import sys
from typing import NoReturn
import unittest
+from unittest.mock import patch
from charm import GrafanaCharm
from ops.model import ActiveStatus, BlockedStatus
# 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(
{"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__":