858ff7cb90832cb396c5d736a2f496fadf8cfef1
2 # Copyright 2021 Canonical Ltd.
4 # Licensed under the Apache License, Version 2.0 (the "License"); you may
5 # not use this file except in compliance with the License. You may obtain
6 # a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 # License for the specific language governing permissions and limitations
16 # For those usages not covered by the Apache License, Version 2.0 please
17 # contact: legal@canonical.com
19 # To get in touch with the maintainers, please contact:
20 # osm-charmers@lists.launchpad.net
24 from typing
import NoReturn
27 from charm
import MonCharm
28 from ops
.model
import ActiveStatus
, BlockedStatus
29 from ops
.testing
import Harness
32 class TestCharm(unittest
.TestCase
):
33 """Prometheus Charm unit tests."""
35 def setUp(self
) -> NoReturn
:
37 self
.image_info
= sys
.modules
["oci_image"].OCIImageResource().fetch()
38 self
.harness
= Harness(MonCharm
)
39 self
.harness
.set_leader(is_leader
=True)
42 "vca_host": "192.168.0.13",
44 "vca_secret": "admin",
45 "vca_cacert": "cacert",
46 "database_commonkey": "commonkey",
48 "openstack_default_granularity": 10,
49 "global_request_timeout": 10,
50 "collector_interval": 30,
51 "evaluator_interval": 30,
52 "keystone_enabled": True,
54 self
.harness
.update_config(self
.config
)
56 def test_config_changed_no_relations(
59 """Test ingress resources without HTTP."""
61 self
.harness
.charm
.on
.config_changed
.emit()
64 self
.assertIsInstance(self
.harness
.charm
.unit
.status
, BlockedStatus
)
67 relation
in self
.harness
.charm
.unit
.status
.message
68 for relation
in ["mongodb", "kafka", "prometheus", "keystone"]
72 def test_config_changed_non_leader(
75 """Test ingress resources without HTTP."""
76 self
.harness
.set_leader(is_leader
=False)
77 self
.harness
.charm
.on
.config_changed
.emit()
80 self
.assertIsInstance(self
.harness
.charm
.unit
.status
, ActiveStatus
)
82 def test_with_relations(
85 "Test with relations (internal)"
86 self
.initialize_kafka_relation()
87 self
.initialize_mongo_relation()
88 self
.initialize_prometheus_relation()
89 self
.initialize_keystone_relation()
91 self
.assertNotIsInstance(self
.harness
.charm
.unit
.status
, BlockedStatus
)
93 def initialize_kafka_relation(self
):
94 kafka_relation_id
= self
.harness
.add_relation("kafka", "kafka")
95 self
.harness
.add_relation_unit(kafka_relation_id
, "kafka/0")
96 self
.harness
.update_relation_data(
97 kafka_relation_id
, "kafka/0", {"host": "kafka", "port": 9092}
100 def initialize_mongo_relation(self
):
101 mongodb_relation_id
= self
.harness
.add_relation("mongodb", "mongodb")
102 self
.harness
.add_relation_unit(mongodb_relation_id
, "mongodb/0")
103 self
.harness
.update_relation_data(
106 {"connection_string": "mongodb://mongo:27017"},
109 def initialize_prometheus_relation(self
):
110 prometheus_relation_id
= self
.harness
.add_relation("prometheus", "prometheus")
111 self
.harness
.add_relation_unit(prometheus_relation_id
, "prometheus/0")
112 self
.harness
.update_relation_data(
113 prometheus_relation_id
,
115 {"hostname": "prometheus", "port": 9090},
118 def initialize_keystone_relation(self
):
119 keystone_relation_id
= self
.harness
.add_relation("keystone", "keystone")
120 self
.harness
.add_relation_unit(keystone_relation_id
, "keystone/0")
121 self
.harness
.update_relation_data(
122 keystone_relation_id
,
127 "user_domain_name": "ud",
128 "project_domain_name": "pd",
132 "keystone_db_password": "something",
133 "region_id": "something",
134 "admin_username": "something",
135 "admin_password": "something",
136 "admin_project_name": "something",
141 if __name__
== "__main__":
145 # class TestCharm(unittest.TestCase):
146 # """MON Charm unit tests."""
148 # def setUp(self) -> NoReturn:
150 # self.harness = Harness(MonCharm)
151 # self.harness.set_leader(is_leader=True)
152 # self.harness.begin()
154 # def test_on_start_without_relations(self) -> NoReturn:
155 # """Test installation without any relation."""
156 # self.harness.charm.on.start.emit()
159 # self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
161 # # Verifying status message
162 # self.assertGreater(len(self.harness.charm.unit.status.message), 0)
164 # self.harness.charm.unit.status.message.startswith("Waiting for ")
166 # self.assertIn("kafka", self.harness.charm.unit.status.message)
167 # self.assertIn("mongodb", self.harness.charm.unit.status.message)
168 # self.assertIn("prometheus", self.harness.charm.unit.status.message)
169 # self.assertTrue(self.harness.charm.unit.status.message.endswith(" relations"))
171 # def test_on_start_with_relations(self) -> NoReturn:
172 # """Test deployment without keystone."""
173 # expected_result = {
178 # "imageDetails": self.harness.charm.image.fetch(),
179 # "imagePullPolicy": "Always",
183 # "containerPort": 8000,
188 # "ALLOW_ANONYMOUS_LOGIN": "yes",
189 # "OSMMON_OPENSTACK_DEFAULT_GRANULARITY": 300,
190 # "OSMMON_GLOBAL_REQUEST_TIMEOUT": 10,
191 # "OSMMON_GLOBAL_LOGLEVEL": "INFO",
192 # "OSMMON_COLLECTOR_INTERVAL": 30,
193 # "OSMMON_EVALUATOR_INTERVAL": 30,
194 # "OSMMON_MESSAGE_DRIVER": "kafka",
195 # "OSMMON_MESSAGE_HOST": "kafka",
196 # "OSMMON_MESSAGE_PORT": 9092,
197 # "OSMMON_DATABASE_DRIVER": "mongo",
198 # "OSMMON_DATABASE_URI": "mongodb://mongo:27017",
199 # "OSMMON_DATABASE_COMMONKEY": "osm",
200 # "OSMMON_PROMETHEUS_URL": "http://prometheus:9090",
201 # "OSMMON_VCA_HOST": "admin",
202 # "OSMMON_VCA_USER": "admin",
203 # "OSMMON_VCA_SECRET": "secret",
204 # "OSMMON_VCA_CACERT": "",
208 # "kubernetesResources": {"ingressResources": []},
211 # self.harness.charm.on.start.emit()
213 # # Check if kafka datastore is initialized
214 # self.assertIsNone(self.harness.charm.state.message_host)
215 # self.assertIsNone(self.harness.charm.state.message_port)
217 # # Check if mongodb datastore is initialized
218 # self.assertIsNone(self.harness.charm.state.database_uri)
220 # # Check if prometheus datastore is initialized
221 # self.assertIsNone(self.harness.charm.state.prometheus_host)
222 # self.assertIsNone(self.harness.charm.state.prometheus_port)
224 # # Initializing the kafka relation
225 # kafka_relation_id = self.harness.add_relation("kafka", "kafka")
226 # self.harness.add_relation_unit(kafka_relation_id, "kafka/0")
227 # self.harness.update_relation_data(
228 # kafka_relation_id, "kafka/0", {"host": "kafka", "port": 9092}
231 # # Initializing the mongo relation
232 # mongodb_relation_id = self.harness.add_relation("mongodb", "mongodb")
233 # self.harness.add_relation_unit(mongodb_relation_id, "mongodb/0")
234 # self.harness.update_relation_data(
235 # mongodb_relation_id,
237 # {"connection_string": "mongodb://mongo:27017"},
240 # # Initializing the prometheus relation
241 # prometheus_relation_id = self.harness.add_relation("prometheus", "prometheus")
242 # self.harness.add_relation_unit(prometheus_relation_id, "prometheus/0")
243 # self.harness.update_relation_data(
244 # prometheus_relation_id,
246 # {"hostname": "prometheus", "port": 9090},
249 # # Checking if kafka data is stored
250 # self.assertEqual(self.harness.charm.state.message_host, "kafka")
251 # self.assertEqual(self.harness.charm.state.message_port, 9092)
253 # # Checking if mongodb data is stored
254 # self.assertEqual(self.harness.charm.state.database_uri, "mongodb://mongo:27017")
256 # # Checking if prometheus data is stored
257 # self.assertEqual(self.harness.charm.state.prometheus_host, "prometheus")
258 # self.assertEqual(self.harness.charm.state.prometheus_port, 9090)
261 # self.assertNotIsInstance(self.harness.charm.unit.status, BlockedStatus)
263 # pod_spec, _ = self.harness.get_pod_spec()
265 # self.assertDictEqual(expected_result, pod_spec)
267 # def test_on_kafka_unit_relation_changed(self) -> NoReturn:
268 # """Test to see if kafka relation is updated."""
269 # self.harness.charm.on.start.emit()
271 # self.assertIsNone(self.harness.charm.state.message_host)
272 # self.assertIsNone(self.harness.charm.state.message_port)
274 # relation_id = self.harness.add_relation("kafka", "kafka")
275 # self.harness.add_relation_unit(relation_id, "kafka/0")
276 # self.harness.update_relation_data(
277 # relation_id, "kafka/0", {"host": "kafka", "port": 9092}
280 # self.assertEqual(self.harness.charm.state.message_host, "kafka")
281 # self.assertEqual(self.harness.charm.state.message_port, 9092)
284 # self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
286 # # Verifying status message
287 # self.assertGreater(len(self.harness.charm.unit.status.message), 0)
289 # self.harness.charm.unit.status.message.startswith("Waiting for ")
291 # self.assertNotIn("kafka", self.harness.charm.unit.status.message)
292 # self.assertIn("mongodb", self.harness.charm.unit.status.message)
293 # self.assertIn("prometheus", self.harness.charm.unit.status.message)
294 # self.assertTrue(self.harness.charm.unit.status.message.endswith(" relations"))
296 # def test_on_mongodb_unit_relation_changed(self) -> NoReturn:
297 # """Test to see if mongodb relation is updated."""
298 # self.harness.charm.on.start.emit()
300 # self.assertIsNone(self.harness.charm.state.database_uri)
302 # relation_id = self.harness.add_relation("mongodb", "mongodb")
303 # self.harness.add_relation_unit(relation_id, "mongodb/0")
304 # self.harness.update_relation_data(
305 # relation_id, "mongodb/0", {"connection_string": "mongodb://mongo:27017"}
308 # self.assertEqual(self.harness.charm.state.database_uri, "mongodb://mongo:27017")
311 # self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
313 # # Verifying status message
314 # self.assertGreater(len(self.harness.charm.unit.status.message), 0)
316 # self.harness.charm.unit.status.message.startswith("Waiting for ")
318 # self.assertIn("kafka", self.harness.charm.unit.status.message)
319 # self.assertNotIn("mongodb", self.harness.charm.unit.status.message)
320 # self.assertIn("prometheus", self.harness.charm.unit.status.message)
321 # self.assertTrue(self.harness.charm.unit.status.message.endswith(" relations"))
323 # def test_on_prometheus_unit_relation_changed(self) -> NoReturn:
324 # """Test to see if prometheus relation is updated."""
325 # self.harness.charm.on.start.emit()
327 # self.assertIsNone(self.harness.charm.state.prometheus_host)
328 # self.assertIsNone(self.harness.charm.state.prometheus_port)
330 # relation_id = self.harness.add_relation("prometheus", "prometheus")
331 # self.harness.add_relation_unit(relation_id, "prometheus/0")
332 # self.harness.update_relation_data(
333 # relation_id, "prometheus", {"hostname": "prometheus", "port": 9090}
336 # self.assertEqual(self.harness.charm.state.prometheus_host, "prometheus")
337 # self.assertEqual(self.harness.charm.state.prometheus_port, 9090)
340 # self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
342 # # Verifying status message
343 # self.assertGreater(len(self.harness.charm.unit.status.message), 0)
345 # self.harness.charm.unit.status.message.startswith("Waiting for ")
347 # self.assertIn("kafka", self.harness.charm.unit.status.message)
348 # self.assertIn("mongodb", self.harness.charm.unit.status.message)
349 # self.assertNotIn("prometheus", self.harness.charm.unit.status.message)
350 # self.assertTrue(self.harness.charm.unit.status.message.endswith(" relations"))
353 # if __name__ == "__main__":