X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Fcharm%2Fpla%2Ftests%2Ftest_charm.py;h=d577e9fb11d3d4d1f6603b5d35ccd897d3ea59a0;hb=refs%2Fchanges%2F58%2F11758%2F5;hp=dbc7be3bcefeb50857c515929c0f3391d38e2ad5;hpb=95ba7e1641316616ce5a9442d485753456ff9525;p=osm%2Fdevops.git diff --git a/installers/charm/pla/tests/test_charm.py b/installers/charm/pla/tests/test_charm.py index dbc7be3b..d577e9fb 100644 --- a/installers/charm/pla/tests/test_charm.py +++ b/installers/charm/pla/tests/test_charm.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# Copyright 2020 Canonical Ltd. +# Copyright 2021 Canonical Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain @@ -20,27 +20,103 @@ # osm-charmers@lists.launchpad.net ## +import sys from typing import NoReturn import unittest -from ops.testing import Harness -from charm import PLACharm +from charm import PlaCharm +from ops.model import ActiveStatus, BlockedStatus +from ops.testing import Harness class TestCharm(unittest.TestCase): - """PLA Charm unit tests.""" + """Pla Charm unit tests.""" def setUp(self) -> NoReturn: """Test setup""" - self.harness = Harness(PLACharm) + self.image_info = sys.modules["oci_image"].OCIImageResource().fetch() + self.harness = Harness(PlaCharm) self.harness.set_leader(is_leader=True) self.harness.begin() + self.config = { + "log_level": "INFO", + "mongodb_uri": "", + } + self.harness.update_config(self.config) + + def test_config_changed_no_relations( + self, + ) -> NoReturn: + """Test ingress resources without HTTP.""" - def test_on_start_without_relations(self) -> NoReturn: - """Test installation without any relation.""" self.harness.charm.on.config_changed.emit() + # Assertions + self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus) + self.assertTrue( + all( + relation in self.harness.charm.unit.status.message + for relation in ["mongodb", "kafka"] + ) + ) + + def test_config_changed_non_leader( + self, + ) -> NoReturn: + """Test ingress resources without HTTP.""" + self.harness.set_leader(is_leader=False) + self.harness.charm.on.config_changed.emit() + + # Assertions + self.assertIsInstance(self.harness.charm.unit.status, ActiveStatus) + + def test_with_relations_and_mongodb_config( + self, + ) -> NoReturn: + "Test with relations and mongodb config (internal)" + self.initialize_kafka_relation() + self.initialize_mongo_config() + # Verifying status + self.assertNotIsInstance(self.harness.charm.unit.status, BlockedStatus) + + def test_with_relations( + self, + ) -> NoReturn: + "Test with relations (internal)" + self.initialize_kafka_relation() + self.initialize_mongo_relation() + # Verifying status + self.assertNotIsInstance(self.harness.charm.unit.status, BlockedStatus) + + def test_exception_mongodb_relation_and_config( + self, + ) -> NoReturn: + "Test with relation and config for Mongodb. Test must fail" + self.initialize_mongo_relation() + self.initialize_mongo_config() + # Verifying status + self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus) + + def initialize_kafka_relation(self): + kafka_relation_id = self.harness.add_relation("kafka", "kafka") + self.harness.add_relation_unit(kafka_relation_id, "kafka/0") + self.harness.update_relation_data( + kafka_relation_id, "kafka", {"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") + self.harness.update_relation_data( + mongodb_relation_id, + "mongodb/0", + {"connection_string": "mongodb://mongo:27017"}, + ) + if __name__ == "__main__": unittest.main()