Adding HA support for Grafana charm
[osm/devops.git] / installers / charm / grafana / tests / test_charm.py
index 4e269df..3bfd69c 100644 (file)
@@ -23,6 +23,7 @@
 import sys
 from typing import NoReturn
 import unittest
+from unittest.mock import patch
 
 from charm import GrafanaCharm
 from ops.model import ActiveStatus, BlockedStatus
@@ -42,7 +43,8 @@ class TestCharm(unittest.TestCase):
             "max_file_size": 0,
             "ingress_whitelist_source_range": "",
             "tls_secret_name": "",
-            "site_url": "https://grafana.192.168.100.100.xip.io",
+            "site_url": "https://grafana.192.168.100.100.nip.io",
+            "cluster_issuer": "vault-issuer",
             "osm_dashboards": True,
         }
         self.harness.update_config(self.config)
@@ -68,10 +70,49 @@ class TestCharm(unittest.TestCase):
         # Assertions
         self.assertIsInstance(self.harness.charm.unit.status, ActiveStatus)
 
+    @patch("opslib.osm.interfaces.grafana.GrafanaCluster.set_initial_password")
+    def test_with_db_relation_and_prometheus(self, _) -> NoReturn:
+        self.initialize_prometheus_relation()
+        self.initialize_mysql_relation()
+        self.assertIsInstance(self.harness.charm.unit.status, ActiveStatus)
+
+    @patch("opslib.osm.interfaces.grafana.GrafanaCluster.set_initial_password")
+    def test_with_db_config_and_prometheus(self, _) -> NoReturn:
+        self.initialize_prometheus_relation()
+        self.initialize_mysql_config()
+        self.assertIsInstance(self.harness.charm.unit.status, ActiveStatus)
+
     def test_with_prometheus(
         self,
     ) -> NoReturn:
         """Test to see if prometheus relation is updated."""
+        self.initialize_prometheus_relation()
+        # Verifying status
+        self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
+
+    def test_with_db_config(self) -> NoReturn:
+        "Test with mysql config"
+        self.initialize_mysql_config()
+        # Verifying status
+        self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
+
+    @patch("opslib.osm.interfaces.grafana.GrafanaCluster.set_initial_password")
+    def test_with_db_relations(self, _) -> NoReturn:
+        "Test with relations"
+        self.initialize_mysql_relation()
+        # Verifying status
+        self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
+
+    def test_exception_db_relation_and_config(
+        self,
+    ) -> NoReturn:
+        "Test with relations and config. Must throw exception"
+        self.initialize_mysql_config()
+        self.initialize_mysql_relation()
+        # Verifying status
+        self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
+
+    def initialize_prometheus_relation(self):
         relation_id = self.harness.add_relation("prometheus", "prometheus")
         self.harness.add_relation_unit(relation_id, "prometheus/0")
         self.harness.update_relation_data(
@@ -80,8 +121,25 @@ class TestCharm(unittest.TestCase):
             {"hostname": "prometheus", "port": 9090},
         )
 
-        # Verifying status
-        self.assertNotIsInstance(self.harness.charm.unit.status, BlockedStatus)
+    def initialize_mysql_config(self):
+        self.harness.update_config(
+            {"mysql_uri": "mysql://grafana:$grafanapw$@host:3606/db"}
+        )
+
+    def initialize_mysql_relation(self):
+        relation_id = self.harness.add_relation("db", "mysql")
+        self.harness.add_relation_unit(relation_id, "mysql/0")
+        self.harness.update_relation_data(
+            relation_id,
+            "mysql/0",
+            {
+                "host": "mysql",
+                "port": 3306,
+                "user": "mano",
+                "password": "manopw",
+                "root_password": "rootmanopw",
+            },
+        )
 
 
 if __name__ == "__main__":