X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Fcharm%2Flcm%2Ftests%2Ftest_charm.py;h=1378e5c74cc12f13f95b1720aef01529b7482490;hb=refs%2Fchanges%2F27%2F11127%2F2;hp=bff3cee2c00446cba6533c41c7781171350f79fd;hpb=49379ced23b5e344a773ce77ac9cb59c1864e19b;p=osm%2Fdevops.git diff --git a/installers/charm/lcm/tests/test_charm.py b/installers/charm/lcm/tests/test_charm.py index bff3cee2..1378e5c7 100644 --- a/installers/charm/lcm/tests/test_charm.py +++ b/installers/charm/lcm/tests/test_charm.py @@ -23,14 +23,15 @@ import sys from typing import NoReturn import unittest -from ops.model import ActiveStatus, BlockedStatus -from ops.testing import Harness from charm import LcmCharm +import mock +from ops.model import ActiveStatus, BlockedStatus +from ops.testing import Harness class TestCharm(unittest.TestCase): - """Prometheus Charm unit tests.""" + """LCM Charm unit tests.""" def setUp(self) -> NoReturn: """Test setup""" @@ -42,12 +43,13 @@ class TestCharm(unittest.TestCase): "vca_host": "192.168.0.13", "vca_port": 17070, "vca_user": "admin", - "vca_password": "admin", + "vca_secret": "admin", "vca_pubkey": "key", "vca_cacert": "cacert", "vca_cloud": "cloud", "vca_k8s_cloud": "k8scloud", "database_commonkey": "commonkey", + "mongodb_uri": "", "log_level": "INFO", } self.harness.update_config(self.config) @@ -78,6 +80,16 @@ class TestCharm(unittest.TestCase): # Assertions self.assertIsInstance(self.harness.charm.unit.status, ActiveStatus) + def test_with_relations_and_mongodb_config( + self, + ) -> NoReturn: + "Test with relations and mongodb config" + self.initialize_kafka_relation() + self.initialize_mongo_config() + self.initialize_ro_relation() + # Verifying status + self.assertNotIsInstance(self.harness.charm.unit.status, BlockedStatus) + def test_with_relations( self, ) -> NoReturn: @@ -88,6 +100,119 @@ class TestCharm(unittest.TestCase): # Verifying status self.assertNotIsInstance(self.harness.charm.unit.status, BlockedStatus) + def test_exception_mongodb_relation_and_config( + self, + ) -> NoReturn: + "Test with all relations and config for mongodb. Must fail" + self.initialize_mongo_relation() + self.initialize_mongo_config() + # Verifying status + self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus) + + def test_build_pod_spec( + self, + ) -> NoReturn: + expected_config = { + "OSMLCM_GLOBAL_LOGLEVEL": self.config["log_level"], + "OSMLCM_DATABASE_COMMONKEY": self.config["database_commonkey"], + } + expected_config.update( + { + f"OSMLCM_{k.upper()}": v + for k, v in self.config.items() + if k.startswith("vca_") + } + ) + self.harness.charm._check_missing_dependencies = mock.Mock() + pod_spec = self.harness.charm.build_pod_spec( + {"imageDetails": {"imagePath": "lcm-image"}} + ) + actual_config = pod_spec["containers"][0]["envConfig"] + + self.assertDictContainsSubset( + expected_config, + actual_config, + ) + for config_key in actual_config: + self.assertNotIn("VCA_MODEL_CONFIG", config_key) + + def test_build_pod_spec_with_model_config( + self, + ) -> NoReturn: + self.harness.update_config( + { + "vca_model_config_agent_metadata_url": "string", + "vca_model_config_agent_stream": "string", + "vca_model_config_apt_ftp_proxy": "string", + "vca_model_config_apt_http_proxy": "string", + "vca_model_config_apt_https_proxy": "string", + "vca_model_config_apt_mirror": "string", + "vca_model_config_apt_no_proxy": "string", + "vca_model_config_automatically_retry_hooks": False, + "vca_model_config_backup_dir": "string", + "vca_model_config_cloudinit_userdata": "string", + "vca_model_config_container_image_metadata_url": "string", + "vca_model_config_container_image_stream": "string", + "vca_model_config_container_inherit_properties": "string", + "vca_model_config_container_networking_method": "string", + "vca_model_config_default_series": "string", + "vca_model_config_default_space": "string", + "vca_model_config_development": False, + "vca_model_config_disable_network_management": False, + "vca_model_config_egress_subnets": "string", + "vca_model_config_enable_os_refresh_update": False, + "vca_model_config_enable_os_upgrade": False, + "vca_model_config_fan_config": "string", + "vca_model_config_firewall_mode": "string", + "vca_model_config_ftp_proxy": "string", + "vca_model_config_http_proxy": "string", + "vca_model_config_https_proxy": "string", + "vca_model_config_ignore_machine_addresses": False, + "vca_model_config_image_metadata_url": "string", + "vca_model_config_image_stream": "string", + "vca_model_config_juju_ftp_proxy": "string", + "vca_model_config_juju_http_proxy": "string", + "vca_model_config_juju_https_proxy": "string", + "vca_model_config_juju_no_proxy": "string", + "vca_model_config_logforward_enabled": False, + "vca_model_config_logging_config": "string", + "vca_model_config_lxd_snap_channel": "string", + "vca_model_config_max_action_results_age": "string", + "vca_model_config_max_action_results_size": "string", + "vca_model_config_max_status_history_age": "string", + "vca_model_config_max_status_history_size": "string", + "vca_model_config_net_bond_reconfigure_delay": "string", + "vca_model_config_no_proxy": "string", + "vca_model_config_provisioner_harvest_mode": "string", + "vca_model_config_proxy_ssh": False, + "vca_model_config_snap_http_proxy": "string", + "vca_model_config_snap_https_proxy": "string", + "vca_model_config_snap_store_assertions": "string", + "vca_model_config_snap_store_proxy": "string", + "vca_model_config_snap_store_proxy_url": "string", + "vca_model_config_ssl_hostname_verification": False, + "vca_model_config_test_mode": False, + "vca_model_config_transmit_vendor_metrics": False, + "vca_model_config_update_status_hook_interval": "string", + } + ) + expected_config = { + f"OSMLCM_{k.upper()}": v + for k, v in self.config.items() + if k.startswith("vca_model_config_") + } + + self.harness.charm._check_missing_dependencies = mock.Mock() + pod_spec = self.harness.charm.build_pod_spec( + {"imageDetails": {"imagePath": "lcm-image"}} + ) + actual_config = pod_spec["containers"][0]["envConfig"] + + self.assertDictContainsSubset( + expected_config, + actual_config, + ) + def initialize_kafka_relation(self): kafka_relation_id = self.harness.add_relation("kafka", "kafka") self.harness.add_relation_unit(kafka_relation_id, "kafka/0") @@ -95,6 +220,9 @@ class TestCharm(unittest.TestCase): kafka_relation_id, "kafka/0", {"host": "kafka", "port": 9092} ) + def initialize_mongo_config(self): + self.harness.update_config({"mongodb_uri": "mongodb://mongo:27017"}) + def initialize_mongo_relation(self): mongodb_relation_id = self.harness.add_relation("mongodb", "mongodb") self.harness.add_relation_unit(mongodb_relation_id, "mongodb/0")