blob: 2b4ea0fef3cd081a202b1ea19e1d63e039e6ff6f [file] [log] [blame]
sousaedu6248fe62020-10-13 23:46:51 +01001#!/usr/bin/env python3
David Garcia49379ce2021-02-24 13:48:22 +01002# Copyright 2021 Canonical Ltd.
sousaedu6248fe62020-10-13 23:46:51 +01003#
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
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
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
14# under the License.
15#
16# For those usages not covered by the Apache License, Version 2.0 please
17# contact: legal@canonical.com
18#
19# To get in touch with the maintainers, please contact:
20# osm-charmers@lists.launchpad.net
21##
22
David Garcia49379ce2021-02-24 13:48:22 +010023import sys
sousaedu6248fe62020-10-13 23:46:51 +010024from typing import NoReturn
25import unittest
David Garciac753dc52021-03-17 15:28:47 +010026
sousaedu6248fe62020-10-13 23:46:51 +010027
28from charm import NbiCharm
David Garciac753dc52021-03-17 15:28:47 +010029from ops.model import ActiveStatus, BlockedStatus
30from ops.testing import Harness
sousaedu6248fe62020-10-13 23:46:51 +010031
32
33class TestCharm(unittest.TestCase):
David Garcia49379ce2021-02-24 13:48:22 +010034 """Prometheus Charm unit tests."""
sousaedu6248fe62020-10-13 23:46:51 +010035
36 def setUp(self) -> NoReturn:
37 """Test setup"""
David Garcia49379ce2021-02-24 13:48:22 +010038 self.image_info = sys.modules["oci_image"].OCIImageResource().fetch()
sousaedu6248fe62020-10-13 23:46:51 +010039 self.harness = Harness(NbiCharm)
40 self.harness.set_leader(is_leader=True)
41 self.harness.begin()
David Garcia49379ce2021-02-24 13:48:22 +010042 self.config = {
43 "enable_test": False,
44 "auth_backend": "internal",
45 "database_commonkey": "key",
46 "log_level": "INFO",
47 "max_file_size": 0,
48 "ingress_whitelist_source_range": "",
49 "tls_secret_name": "",
50 "site_url": "https://nbi.192.168.100.100.xip.io",
sousaedu3cc03162021-04-29 16:53:12 +020051 "cluster_issuer": "vault-issuer",
sousaedu6248fe62020-10-13 23:46:51 +010052 }
David Garcia49379ce2021-02-24 13:48:22 +010053 self.harness.update_config(self.config)
sousaedu6248fe62020-10-13 23:46:51 +010054
David Garcia49379ce2021-02-24 13:48:22 +010055 def test_config_changed_no_relations(
56 self,
57 ) -> NoReturn:
58 """Test ingress resources without HTTP."""
sousaedu6248fe62020-10-13 23:46:51 +010059
David Garcia49379ce2021-02-24 13:48:22 +010060 self.harness.charm.on.config_changed.emit()
sousaedu6248fe62020-10-13 23:46:51 +010061
David Garcia49379ce2021-02-24 13:48:22 +010062 # Assertions
63 self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
64 self.assertTrue(
65 all(
66 relation in self.harness.charm.unit.status.message
67 for relation in ["mongodb", "kafka", "prometheus"]
68 )
sousaedu6248fe62020-10-13 23:46:51 +010069 )
70
David Garcia49379ce2021-02-24 13:48:22 +010071 def test_config_changed_non_leader(
72 self,
73 ) -> NoReturn:
74 """Test ingress resources without HTTP."""
75 self.harness.set_leader(is_leader=False)
76 self.harness.charm.on.config_changed.emit()
sousaedu6248fe62020-10-13 23:46:51 +010077
David Garcia49379ce2021-02-24 13:48:22 +010078 # Assertions
79 self.assertIsInstance(self.harness.charm.unit.status, ActiveStatus)
sousaedu6248fe62020-10-13 23:46:51 +010080
David Garcia49379ce2021-02-24 13:48:22 +010081 def test_with_relations_internal(
82 self,
83 ) -> NoReturn:
84 "Test with relations (internal)"
85 self.initialize_kafka_relation()
86 self.initialize_mongo_relation()
87 self.initialize_prometheus_relation()
sousaedu6248fe62020-10-13 23:46:51 +010088 # Verifying status
89 self.assertNotIsInstance(self.harness.charm.unit.status, BlockedStatus)
90
David Garcia49379ce2021-02-24 13:48:22 +010091 def test_with_relations_keystone_missing(
92 self,
93 ) -> NoReturn:
94 "Test with relations (keystone)"
sousaedu6248fe62020-10-13 23:46:51 +010095 self.harness.update_config({"auth_backend": "keystone"})
David Garcia49379ce2021-02-24 13:48:22 +010096 self.initialize_kafka_relation()
97 self.initialize_mongo_relation()
98 self.initialize_prometheus_relation()
99 # Verifying status
100 self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
101 self.assertTrue("keystone" in self.harness.charm.unit.status.message)
sousaedu6248fe62020-10-13 23:46:51 +0100102
David Garcia49379ce2021-02-24 13:48:22 +0100103 def test_with_relations_keystone(
104 self,
105 ) -> NoReturn:
106 "Test with relations (keystone)"
107 self.harness.update_config({"auth_backend": "keystone"})
108 self.initialize_kafka_relation()
109 self.initialize_mongo_relation()
110 self.initialize_prometheus_relation()
111 self.initialize_keystone_relation()
112 # Verifying status
113 self.assertNotIsInstance(self.harness.charm.unit.status, BlockedStatus)
sousaedu6248fe62020-10-13 23:46:51 +0100114
David Garcia49379ce2021-02-24 13:48:22 +0100115 def initialize_kafka_relation(self):
sousaedu6248fe62020-10-13 23:46:51 +0100116 kafka_relation_id = self.harness.add_relation("kafka", "kafka")
117 self.harness.add_relation_unit(kafka_relation_id, "kafka/0")
118 self.harness.update_relation_data(
119 kafka_relation_id, "kafka/0", {"host": "kafka", "port": 9092}
120 )
121
David Garcia49379ce2021-02-24 13:48:22 +0100122 def initialize_mongo_relation(self):
sousaedu6248fe62020-10-13 23:46:51 +0100123 mongodb_relation_id = self.harness.add_relation("mongodb", "mongodb")
124 self.harness.add_relation_unit(mongodb_relation_id, "mongodb/0")
125 self.harness.update_relation_data(
126 mongodb_relation_id,
127 "mongodb/0",
sousaedu4df5a462020-11-17 14:30:47 +0000128 {"connection_string": "mongodb://mongo:27017"},
sousaedu6248fe62020-10-13 23:46:51 +0100129 )
130
David Garcia49379ce2021-02-24 13:48:22 +0100131 def initialize_keystone_relation(self):
sousaedu6248fe62020-10-13 23:46:51 +0100132 keystone_relation_id = self.harness.add_relation("keystone", "keystone")
133 self.harness.add_relation_unit(keystone_relation_id, "keystone/0")
134 self.harness.update_relation_data(
135 keystone_relation_id,
David Garcia49379ce2021-02-24 13:48:22 +0100136 "keystone",
sousaedu6248fe62020-10-13 23:46:51 +0100137 {
David Garcia49379ce2021-02-24 13:48:22 +0100138 "host": "host",
sousaedu6248fe62020-10-13 23:46:51 +0100139 "port": 5000,
David Garcia49379ce2021-02-24 13:48:22 +0100140 "user_domain_name": "ud",
141 "project_domain_name": "pd",
142 "username": "u",
143 "password": "p",
144 "service": "s",
145 "keystone_db_password": "something",
146 "region_id": "something",
147 "admin_username": "something",
148 "admin_password": "something",
149 "admin_project_name": "something",
sousaedu6248fe62020-10-13 23:46:51 +0100150 },
151 )
152
David Garcia49379ce2021-02-24 13:48:22 +0100153 def initialize_prometheus_relation(self):
154 prometheus_relation_id = self.harness.add_relation("prometheus", "prometheus")
155 self.harness.add_relation_unit(prometheus_relation_id, "prometheus/0")
sousaedu6248fe62020-10-13 23:46:51 +0100156 self.harness.update_relation_data(
David Garcia49379ce2021-02-24 13:48:22 +0100157 prometheus_relation_id,
158 "prometheus",
sousaedu6248fe62020-10-13 23:46:51 +0100159 {"hostname": "prometheus", "port": 9090},
160 )
161
sousaedu6248fe62020-10-13 23:46:51 +0100162
163if __name__ == "__main__":
164 unittest.main()
David Garcia49379ce2021-02-24 13:48:22 +0100165
166
167# class TestCharm(unittest.TestCase):
168# """Prometheus Charm unit tests."""
169
170# def setUp(self) -> NoReturn:
171# """Test setup"""
172# self.image_info = sys.modules["oci_image"].OCIImageResource().fetch()
173# self.harness = Harness(NbiCharm)
174# self.harness.set_leader(is_leader=True)
175# self.harness.begin()
176# self.config = {
177# "enable_ng_ro": True,
178# "database_commonkey": "commonkey",
179# "log_level": "INFO",
180# "vim_database": "db_name",
181# "ro_database": "ro_db_name",
182# "openmano_tenant": "mano",
183# }
184
185# def test_config_changed_no_relations(
186# self,
187# ) -> NoReturn:
188# """Test ingress resources without HTTP."""
189
190# self.harness.charm.on.config_changed.emit()
191
192# # Assertions
193# self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
194# self.assertTrue(
195# all(
196# relation in self.harness.charm.unit.status.message
197# for relation in ["mongodb", "kafka"]
198# )
199# )
200
201# # Disable ng-ro
202# self.harness.update_config({"enable_ng_ro": False})
203# self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
204# self.assertTrue(
205# all(
206# relation in self.harness.charm.unit.status.message
207# for relation in ["mysql"]
208# )
209# )
210
211# def test_config_changed_non_leader(
212# self,
213# ) -> NoReturn:
214# """Test ingress resources without HTTP."""
215# self.harness.set_leader(is_leader=False)
216# self.harness.charm.on.config_changed.emit()
217
218# # Assertions
219# self.assertIsInstance(self.harness.charm.unit.status, ActiveStatus)
220
221# def test_with_relations_ng(
222# self,
223# ) -> NoReturn:
224# "Test with relations (ng-ro)"
225
226# # Initializing the kafka relation
227# kafka_relation_id = self.harness.add_relation("kafka", "kafka")
228# self.harness.add_relation_unit(kafka_relation_id, "kafka/0")
229# self.harness.update_relation_data(
230# kafka_relation_id, "kafka/0", {"host": "kafka", "port": 9092}
231# )
232
233# # Initializing the mongo relation
234# mongodb_relation_id = self.harness.add_relation("mongodb", "mongodb")
235# self.harness.add_relation_unit(mongodb_relation_id, "mongodb/0")
236# self.harness.update_relation_data(
237# mongodb_relation_id,
238# "mongodb/0",
239# {"connection_string": "mongodb://mongo:27017"},
240# )
241
242# self.harness.charm.on.config_changed.emit()
243
244# # Verifying status
245# self.assertNotIsInstance(self.harness.charm.unit.status, BlockedStatus)
246
247
248# if __name__ == "__main__":
249# unittest.main()