Fix 1473 and add vca_model_config_* to lcm charm
[osm/devops.git] / installers / charm / lcm / tests / test_charm.py
index bff3cee..831e176 100644 (file)
 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):
@@ -42,7 +43,7 @@ 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",
@@ -88,6 +89,110 @@ class TestCharm(unittest.TestCase):
         # Verifying status
         self.assertNotIsInstance(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")