diff --git a/run_tests_locally.sh b/run_tests_locally.sh index 5c932487d62601b1466a267198c68ee7075bffcb..a6c6b6c43d67ea56a091729d7ba4aec8e8ce2ade 100755 --- a/run_tests_locally.sh +++ b/run_tests_locally.sh @@ -11,26 +11,30 @@ cat $PROJECTDIR/coverage/.coveragerc.template | sed s+~/teraflow/controller+$PRO # Run unitary tests and analyze coverage of code at same time +# Populate environment variables for context to use Redis +export REDIS_SERVICE_HOST=$(kubectl get node kubernetes-master -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}') +export REDIS_SERVICE_PORT=$(kubectl get service contextservice-public --namespace cttc-dev -o 'jsonpath={.spec.ports[?(@.port==6379)].nodePort}') + # First destroy old coverage file rm -f $COVERAGEFILE -#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ -# common/orm/tests/test_unitary.py \ -# common/message_broker/tests/test_unitary.py \ -# common/rpc_method_wrapper/tests/test_unitary.py +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + common/orm/tests/test_unitary.py \ + common/message_broker/tests/test_unitary.py \ + common/rpc_method_wrapper/tests/test_unitary.py -#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ -# centralizedattackdetector/tests/test_unitary.py +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + centralizedattackdetector/tests/test_unitary.py -#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ -# context/tests/test_unitary.py +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + context/tests/test_unitary.py coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + device/tests/test_unitary_driverapi.py \ device/tests/test_unitary.py - #device/tests/test_unitary_driverapi.py \ #coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ # service/tests/test_unitary.py -#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ -# compute/tests/test_unitary.py +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + compute/tests/test_unitary.py diff --git a/src/context/service/database/ConfigModel.py b/src/context/service/database/ConfigModel.py index 8754da786ae4180378c66cf3191bdeace92878ea..774ea3743b9742dbb8c1a39b924dc2f173a38a76 100644 --- a/src/context/service/database/ConfigModel.py +++ b/src/context/service/database/ConfigModel.py @@ -1,8 +1,8 @@ import functools, logging, operator from enum import Enum -from typing import Dict, List, Tuple, Union +from typing import Dict, List, Optional, Tuple, Union from common.orm.Database import Database -from common.orm.HighLevel import get_or_create_object, update_or_create_object +from common.orm.HighLevel import get_object, get_or_create_object, update_or_create_object from common.orm.backend.Tools import key_to_str from common.orm.fields.EnumeratedField import EnumeratedField from common.orm.fields.ForeignKeyField import ForeignKeyField @@ -66,6 +66,17 @@ def set_config_rule( db_config_rule, updated = result return db_config_rule, updated +def delete_config_rule( + database : Database, db_config : ConfigModel, grpc_config_rule + ) -> Tuple[ConfigRuleModel, bool]: + + str_rule_key_hash = fast_hasher(grpc_config_rule.resource_key) + str_config_rule_key = key_to_str([db_config.pk, str_rule_key_hash], separator=':') + + db_config_rule : Optional[ConfigRuleModel] = get_object( + database, ConfigRuleModel, str_config_rule_key, raise_if_not_found=False) + db_config_rule.delete() + def set_config( database : Database, db_parent_pk : str, config_name : str, grpc_config_rules ) -> List[Tuple[Union[ConfigModel, ConfigRuleModel], bool]]: @@ -77,8 +88,15 @@ def set_config( db_objects = [(db_config, created)] for position,grpc_config_rule in enumerate(grpc_config_rules): - result : Tuple[ConfigRuleModel, bool] = set_config_rule(database, db_config, grpc_config_rule, position) - db_config_rule, updated = result - db_objects.append((db_config_rule, updated)) + action = grpc_to_enum__config_action(grpc_config_rule.action) + if action == ORM_ConfigActionEnum.SET: + result : Tuple[ConfigRuleModel, bool] = set_config_rule(database, db_config, grpc_config_rule, position) + db_config_rule, updated = result + db_objects.append((db_config_rule, updated)) + elif action == ORM_ConfigActionEnum.DELETE: + delete_config_rule(database, db_config, grpc_config_rule) + else: + msg = 'Unsupported action({:s})' + raise AttributeError(msg.format(str(ConfigActionEnum.Name(grpc_config_rule.action)))) return db_objects diff --git a/src/device/service/data_cache/database/ConfigModel.py b/src/device/service/data_cache/database/ConfigModel.py index 73fc06eb57c943ce456b7c4ded7cb5f37a28fef1..ce5904bc2e7a270ff1457465bb9b46e258c11811 100644 --- a/src/device/service/data_cache/database/ConfigModel.py +++ b/src/device/service/data_cache/database/ConfigModel.py @@ -1,8 +1,8 @@ import functools, logging, operator from enum import Enum -from typing import Dict, List, Tuple, Union +from typing import Dict, List, Optional, Tuple, Union from common.orm.Database import Database -from common.orm.HighLevel import get_or_create_object, update_or_create_object +from common.orm.HighLevel import get_object, get_or_create_object, update_or_create_object from common.orm.backend.Tools import key_to_str from common.orm.fields.EnumeratedField import EnumeratedField from common.orm.fields.ForeignKeyField import ForeignKeyField @@ -66,6 +66,18 @@ def set_config_rule( db_config_rule, updated = result return db_config_rule, updated +def delete_config_rule( + database : Database, db_config : ConfigModel, grpc_config_rule + ) -> Tuple[ConfigRuleModel, bool]: + + str_rule_key_hash = fast_hasher(grpc_config_rule.resource_key) + str_config_rule_key = key_to_str([db_config.pk, str_rule_key_hash], separator=':') + + db_config_rule : Optional[ConfigRuleModel] = get_object( + database, ConfigRuleModel, str_config_rule_key, raise_if_not_found=False) + if db_config_rule is None: return + db_config_rule.delete() + def set_config( database : Database, db_parent_pk : str, config_name : str, grpc_config_rules ) -> List[Tuple[Union[ConfigModel, ConfigRuleModel], bool]]: @@ -77,8 +89,15 @@ def set_config( db_objects = [(db_config, created)] for position,grpc_config_rule in enumerate(grpc_config_rules): - result : Tuple[ConfigRuleModel, bool] = set_config_rule(database, db_config, grpc_config_rule, position) - db_config_rule, updated = result - db_objects.append((db_config_rule, updated)) + action = grpc_to_enum__config_action(grpc_config_rule.action) + if action == ORM_ConfigActionEnum.SET: + result : Tuple[ConfigRuleModel, bool] = set_config_rule(database, db_config, grpc_config_rule, position) + db_config_rule, updated = result + db_objects.append((db_config_rule, updated)) + elif action == ORM_ConfigActionEnum.DELETE: + delete_config_rule(database, db_config, grpc_config_rule) + else: + msg = 'Unsupported action({:s})' + raise AttributeError(msg.format(str(ConfigActionEnum.Name(grpc_config_rule.action)))) return db_objects