Skip to content

Commit 22598cc

Browse files
authored
fix: [DPE-6733] test for DNS availability (#612)
* Test for DNS availability * fix unit tests
1 parent 3d7de87 commit 22598cc

File tree

4 files changed

+30
-5
lines changed

4 files changed

+30
-5
lines changed

src/charm.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,9 @@ def get_unit_address(self, unit: Optional[Unit] = None) -> str:
365365
"get_unit_address: unit DNS domain name is not fully propagated yet, trying again"
366366
)
367367
raise RuntimeError("unit DNS domain name is not fully propagated yet")
368+
if unit_dns_domain == unit_hostname:
369+
logger.error("Can't get fully qualified domain name for unit. IS DNS not ready?")
370+
raise RuntimeError("Can't get unit fqdn")
368371
return unit_dns_domain
369372

370373
def is_unit_busy(self) -> bool:

tests/unit/test_charm.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ def test_on_leader_elected_secrets(self):
135135
secret_data[password].isalnum() and len(secret_data[password]) == PASSWORD_LENGTH
136136
)
137137

138+
@patch("charm.MySQLOperatorCharm.get_unit_address", return_value="mysql-k8s.somedomain")
138139
@patch("mysql_k8s_helpers.MySQL.install_plugins")
139140
@patch("mysql_k8s_helpers.MySQL.cluster_metadata_exists", return_value=False)
140141
@patch("mysql_k8s_helpers.MySQL.rescan_cluster")
@@ -184,6 +185,7 @@ def test_mysql_pebble_ready(
184185
_rescan_cluster,
185186
_cluster_metadata_exists,
186187
_install_plugins,
188+
_get_unit_address,
187189
):
188190
# Check if initial plan is empty
189191
self.harness.set_can_connect("mysql", True)
@@ -254,8 +256,9 @@ def test_pebble_ready_set_data(
254256
self.assertEqual(self.charm.unit_peer_data["member-role"], "secondary")
255257
self.assertEqual(self.charm.unit_peer_data["member-state"], "waiting")
256258

259+
@patch("charm.MySQLOperatorCharm.get_unit_address", return_value="mysql-k8s.somedomain")
257260
@patch("charm.MySQLOperatorCharm._mysql", new_callable=PropertyMock)
258-
def test_mysql_pebble_ready_non_leader(self, _mysql_mock):
261+
def test_mysql_pebble_ready_non_leader(self, _mysql_mock, mock_get_unit_address):
259262
# Test pebble ready when not leader
260263
# Expect unit to be in waiting status
261264
self.harness.update_relation_data(
@@ -266,8 +269,9 @@ def test_mysql_pebble_ready_non_leader(self, _mysql_mock):
266269
self.harness.container_pebble_ready("mysql")
267270
self.assertTrue(isinstance(self.charm.unit.status, WaitingStatus))
268271

272+
@patch("charm.MySQLOperatorCharm.get_unit_address", return_value="mysql-k8s.somedomain")
269273
@patch("charm.MySQLOperatorCharm._mysql")
270-
def test_mysql_pebble_ready_exception(self, _mysql_mock):
274+
def test_mysql_pebble_ready_exception(self, _mysql_mock, mock_get_unit_address):
271275
# Test exception raised in bootstrapping
272276
self.harness.set_leader()
273277
self.charm._mysql = _mysql_mock
@@ -294,8 +298,9 @@ def test_on_config_changed(self):
294298
self.charm.peers.data[self.charm.app]["cluster-name"], "not_valid_cluster_name"
295299
)
296300

301+
@patch("charm.MySQLOperatorCharm.get_unit_address", return_value="mysql-k8s.somedomain")
297302
@patch("mysql_k8s_helpers.MySQL.is_data_dir_initialised", return_value=False)
298-
def test_mysql_property(self, _):
303+
def test_mysql_property(self, _, mock_get_unit_address):
299304
# Test mysql property instance of mysql_k8s_helpers.MySQL
300305
# set leader and populate peer relation data
301306
self.harness.set_leader()
@@ -356,6 +361,7 @@ def test_set_secret_databag(self, _):
356361
== "test-password"
357362
)
358363

364+
@patch("charm.MySQLOperatorCharm.get_unit_address", return_value="mysql-k8s.somedomain")
359365
@patch("charm.MySQLOperatorCharm.unit_initialized", return_value=True)
360366
@patch("charms.mysql.v0.mysql.MySQLBase.is_cluster_replica", return_value=False)
361367
@patch("mysql_k8s_helpers.MySQL.remove_instance")
@@ -370,6 +376,7 @@ def test_database_storage_detaching(
370376
mock_remove_instance,
371377
mock_is_cluster_replica,
372378
mock_unit_initialized,
379+
mock_get_unit_address,
373380
):
374381
self.harness.update_relation_data(
375382
self.peer_relation_id,

tests/unit/test_database.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ def setUp(self):
5555
def tearDown(self) -> None:
5656
self.patcher.stop()
5757

58+
@patch("charm.MySQLOperatorCharm.get_unit_address", return_value="mysql-k8s.somedomain")
5859
@patch("mysql_k8s_helpers.MySQL.cluster_metadata_exists", return_value=True)
5960
@patch("charms.rolling_ops.v0.rollingops.RollingOpsManager._on_process_locks")
6061
@patch("k8s_helpers.KubernetesHelpers.wait_service_ready")
@@ -75,6 +76,7 @@ def test_database_requested(
7576
_wait_service_ready,
7677
_,
7778
_cluster_metadata_exists,
79+
_get_unit_address,
7880
):
7981
# run start-up events to enable usage of the helper class
8082
self.harness.set_leader(True)

tests/unit/test_upgrade.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,18 @@ def test_highest_ordinal(self):
6262
"""Test the highest ordinal."""
6363
self.assertEqual(1, self.charm.upgrade.highest_ordinal)
6464

65+
@patch("charm.MySQLOperatorCharm.get_unit_address", return_value="mysql-k8s.somedomain")
6566
@patch("charms.rolling_ops.v0.rollingops.RollingOpsManager._on_process_locks")
6667
@patch("mysql_k8s_helpers.MySQL.rescan_cluster")
6768
@patch("upgrade.MySQLK8sUpgrade._pre_upgrade_prepare")
6869
@patch("mysql_k8s_helpers.MySQL.get_cluster_status", return_value=MOCK_STATUS_ONLINE)
6970
def test_pre_upgrade_check(
70-
self, mock_get_cluster_status, mock_pre_upgrade_prepare, mock_rescan_cluster, _
71+
self,
72+
mock_get_cluster_status,
73+
mock_pre_upgrade_prepare,
74+
mock_rescan_cluster,
75+
_,
76+
mock_get_unit_address,
7177
):
7278
"""Test the pre upgrade check."""
7379
self.harness.set_leader(True)
@@ -128,6 +134,7 @@ def test_log_rollback(self, mock_logging):
128134
]
129135
mock_logging.assert_has_calls(calls)
130136

137+
@patch("charm.MySQLOperatorCharm.get_unit_address", return_value="mysql-k8s.somedomain")
131138
@patch("charms.rolling_ops.v0.rollingops.RollingOpsManager._on_process_locks")
132139
@patch("mysql_k8s_helpers.MySQL.set_dynamic_variable")
133140
@patch("mysql_k8s_helpers.MySQL.get_primary_label", return_value="mysql-k8s-1")
@@ -140,6 +147,7 @@ def test_pre_upgrade_prepare(
140147
mock_get_primary_label,
141148
mock_set_dynamic_variable,
142149
_,
150+
mock_get_unit_address,
143151
):
144152
"""Test the pre upgrade prepare."""
145153
self.harness.set_leader(True)
@@ -151,6 +159,7 @@ def test_pre_upgrade_prepare(
151159
mock_set_rolling_update_partition.assert_called_once()
152160
assert mock_set_dynamic_variable.call_count == 2
153161

162+
@patch("charm.MySQLOperatorCharm.get_unit_address", return_value="mysql-k8s.somedomain")
154163
@patch("charm.MySQLOperatorCharm.recover_unit_after_restart")
155164
@patch("mysql_k8s_helpers.MySQL.install_plugins")
156165
@patch("mysql_k8s_helpers.MySQL.cluster_metadata_exists", return_value=True)
@@ -171,6 +180,7 @@ def test_pebble_ready(
171180
mock_cluster_metadata_exists,
172181
mock_install_plugins,
173182
mock_recover_unit_after_restart,
183+
mock_get_unit_address,
174184
):
175185
"""Test the pebble ready."""
176186
self.charm.on.config_changed.emit()
@@ -221,8 +231,11 @@ def test_set_rolling_update_partition(
221231
with self.assertRaises(KubernetesClientError):
222232
self.charm.upgrade._set_rolling_update_partition(partition=1)
223233

234+
@patch("charm.MySQLOperatorCharm.get_unit_address", return_value="mysql-k8s.somedomain")
224235
@patch("mysql_k8s_helpers.MySQL.verify_server_upgradable")
225-
def test_check_server_upgradeability(self, mock_verify_server_upgradeable):
236+
def test_check_server_upgradeability(
237+
self, mock_verify_server_upgradeable, mock_get_unit_address
238+
):
226239
"""Test the server upgradeability check."""
227240
self.charm.upgrade._check_server_upgradeability()
228241
mock_verify_server_upgradeable.assert_not_called()

0 commit comments

Comments
 (0)