Skip to content

Commit 18bab8a

Browse files
committed
Dev: unittests: Adjust unit test for previous commits
1 parent 4ef9b44 commit 18bab8a

File tree

4 files changed

+48
-46
lines changed

4 files changed

+48
-46
lines changed

test/unittests/test_bootstrap.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -520,16 +520,10 @@ def tearDownClass(cls):
520520
Global tearDown.
521521
"""
522522

523-
@mock.patch('crmsh.parallax.parallax_call')
524523
@mock.patch('crmsh.service_manager.ServiceManager.start_service')
525-
@mock.patch('crmsh.sbd.SBDTimeout.is_sbd_delay_start')
526-
@mock.patch('crmsh.service_manager.ServiceManager.service_is_enabled')
527-
@mock.patch('crmsh.utils.package_is_installed')
528-
def test_start_pacemaker(self, mock_installed, mock_enabled, mock_delay_start, mock_start, mock_parallax_call):
524+
@mock.patch('crmsh.sbd.SBDManager.unset_sbd_delay_start')
525+
def test_start_pacemaker(self, mock_unset_delay_start, mock_start):
529526
bootstrap._context = None
530-
mock_installed.return_value = True
531-
mock_enabled.return_value = True
532-
mock_delay_start.return_value = True
533527
node_list = ["node1", "node2", "node3", "node4", "node5", "node6"]
534528
bootstrap.start_pacemaker(node_list)
535529
mock_start.assert_has_calls([
@@ -541,11 +535,6 @@ def test_start_pacemaker(self, mock_installed, mock_enabled, mock_delay_start, m
541535
mock.call("corosync.service", remote_addr="node6"),
542536
mock.call("pacemaker.service", enable=False, node_list=node_list)
543537
])
544-
mock_parallax_call.assert_has_calls([
545-
mock.call(node_list, f'mkdir -p {sbd.SBDManager.SBD_SYSTEMD_DELAY_START_DISABLE_DIR}'),
546-
mock.call(node_list, f"echo -e '[Service]\nUnsetEnvironment=SBD_DELAY_START' > {sbd.SBDManager.SBD_SYSTEMD_DELAY_START_DISABLE_FILE}"),
547-
mock.call(node_list, "systemctl daemon-reload"),
548-
])
549538

550539
@mock.patch('crmsh.bootstrap.change_user_shell')
551540
@mock.patch('crmsh.bootstrap.configure_ssh_key')

test/unittests/test_sbd.py

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,13 @@ def test_check_devices_metadata_consistent_multiple_devices_consistent(self, moc
147147
self.assertTrue(result)
148148

149149
@patch('crmsh.sbd.SBDUtils.get_sbd_device_metadata')
150-
@patch('logging.Logger.warning')
151-
def test_check_devices_metadata_consistent_multiple_devices_inconsistent(self, mock_logger_warning, mock_get_sbd_device_metadata):
150+
@patch('logging.Logger.error')
151+
def test_check_devices_metadata_consistent_multiple_devices_inconsistent(self, mock_logger_error, mock_get_sbd_device_metadata):
152152
dev_list = ['/dev/sbd_device1', '/dev/sbd_device2']
153153
mock_get_sbd_device_metadata.side_effect = ['metadata1', 'metadata2']
154154
result = SBDUtils.check_devices_metadata_consistent(dev_list)
155155
self.assertFalse(result)
156-
mock_logger_warning.assert_called()
156+
mock_logger_error.assert_called_once_with("Device %s doesn't have the same metadata as %s", '/dev/sbd_device2', '/dev/sbd_device1')
157157

158158
@patch('crmsh.sbd.SBDUtils.check_devices_metadata_consistent')
159159
@patch('crmsh.sbd.SBDUtils.no_overwrite_device_check')
@@ -206,7 +206,7 @@ def test_get_sbd_systemd_start_timeout(self, mock_cluster_shell, mock_get_system
206206
mock_get_systemd_timeout_start_in_sec.return_value = 90
207207
result = sbd.SBDTimeout.get_sbd_systemd_start_timeout()
208208
self.assertEqual(result, 90)
209-
mock_cluster_shell.return_value.get_stdout_or_raise_error.assert_called_once_with(sbd.SBDTimeout.SHOW_SBD_START_TIMEOUT_CMD)
209+
mock_cluster_shell.return_value.get_stdout_or_raise_error.assert_called_once_with(sbd.SBDTimeout.SHOW_SBD_START_TIMEOUT_CMD, None)
210210
mock_get_systemd_timeout_start_in_sec.assert_called_once_with("1min 30s")
211211

212212
@patch('crmsh.corosync.token_and_consensus_timeout')
@@ -263,73 +263,89 @@ def setUp(self):
263263
self.instance_check = sbd.SBDTimeoutChecker(fix=False)
264264
self.instance_fix = sbd.SBDTimeoutChecker(fix=True)
265265

266-
@patch('logging.Logger.warning')
267266
@patch('crmsh.sbd.ServiceManager')
268-
def test_check_and_fix_sbd_not_active(self, mock_service_manager, mock_logger_warning):
267+
def test_check_and_fix_sbd_not_active(self, mock_service_manager):
269268
mock_service_manager_inst = Mock()
270269
mock_service_manager.return_value = mock_service_manager_inst
271270
mock_service_manager_inst.service_is_active = Mock(return_value=False)
272-
with self.assertRaises(utils.TerminateSubCommand):
271+
with self.assertRaises(sbd.FixAborted) as context:
273272
self.instance_check.check_and_fix()
273+
self.assertTrue("sbd.service is not active" in str(context.exception))
274274
mock_service_manager_inst.service_is_active.assert_called_once_with(constants.SBD_SERVICE)
275-
mock_logger_warning.assert_called_once_with('%s is not active, skip SBD timeout checks', constants.SBD_SERVICE)
276275

276+
@patch('crmsh.utils.list_cluster_nodes_except_me')
277+
@patch('crmsh.utils.check_all_nodes_reachable')
277278
@patch('crmsh.sbd.ServiceManager')
278-
def test_check_and_fix_sbd_inconsistent(self, mock_service_manager):
279+
def test_check_and_fix_sbd_inconsistent(self, mock_service_manager, mock_check_all_nodes_reachable, mock_list_cluster_nodes_except_me):
279280
mock_service_manager_inst = Mock()
280281
mock_service_manager.return_value = mock_service_manager_inst
281282
mock_service_manager_inst.service_is_active = Mock(return_value=True)
282283
self.instance_check._check_config_consistency = Mock(return_value=False)
283-
with self.assertRaises(utils.TerminateSubCommand):
284+
with self.assertRaises(sbd.FixAborted):
284285
self.instance_check.check_and_fix()
285286
mock_service_manager_inst.service_is_active.assert_called_once_with(constants.SBD_SERVICE)
286287
self.instance_check._check_config_consistency.assert_called_once()
287288

289+
@patch('crmsh.utils.list_cluster_nodes_except_me')
290+
@patch('crmsh.utils.check_all_nodes_reachable')
288291
@patch('crmsh.sbd.ServiceManager')
289-
def test_check_and_fix_not_fix(self, mock_service_manager):
292+
def test_check_and_fix_not_fix(self, mock_service_manager, mock_check_all_nodes_reachable, mock_list_cluster_nodes_except_me):
290293
mock_service_manager_inst = Mock()
291294
mock_service_manager.return_value = mock_service_manager_inst
292295
mock_service_manager_inst.service_is_active = Mock(return_value=True)
293296
self.instance_check._check_config_consistency = Mock(return_value=True)
294297
self.instance_check._load_configurations_from_runtime = Mock()
295-
self.instance_check._check_sbd_disk_metadata = Mock(return_value=False)
296-
self.instance_check._check_sbd_watchdog_timeout = Mock(return_value=True)
297-
298-
self.assertFalse(self.instance_check.check_and_fix())
298+
self.instance_check._check_sbd_disk_metadata = Mock(return_value=sbd.CheckResult.SUCCESS)
299+
self.instance_check._check_sbd_device_metadata_consistency = Mock(return_value=sbd.CheckResult.SUCCESS)
300+
self.instance_check._check_sbd_watchdog_timeout = Mock(return_value=sbd.CheckResult.SUCCESS)
301+
self.instance_check._check_sbd_delay_start = Mock(return_value=sbd.CheckResult.SUCCESS)
302+
self.instance_check._check_sbd_systemd_start_timeout = Mock(return_value=sbd.CheckResult.ERROR)
303+
self.instance_check._check_stonith_watchdog_timeout = Mock(return_value=sbd.CheckResult.SUCCESS)
304+
self.instance_check._check_stonith_timeout = Mock(return_value=sbd.CheckResult.SUCCESS)
305+
self.instance_check._check_sbd_delay_start_unset_dropin = Mock(return_value=sbd.CheckResult.SUCCESS)
306+
307+
res = self.instance_check.check_and_fix()
308+
self.assertEqual(res, sbd.CheckResult.ERROR)
299309

300310
mock_service_manager_inst.service_is_active.assert_called_once_with(constants.SBD_SERVICE)
301311
self.instance_check._check_config_consistency.assert_called_once()
302312
self.instance_check._load_configurations_from_runtime.assert_called_once()
303313
self.instance_check._check_sbd_disk_metadata.assert_called_once()
304-
self.instance_check._check_sbd_watchdog_timeout.assert_not_called()
305314

315+
@patch('crmsh.utils.list_cluster_nodes_except_me')
316+
@patch('crmsh.utils.check_all_nodes_reachable')
306317
@patch('crmsh.sbd.ServiceManager')
307-
def test_check_and_fix_fix_failure(self, mock_service_manager):
318+
def test_check_and_fix_fix_failure(self, mock_service_manager, mock_check_all_nodes_reachable, mock_list_cluster_nodes_except_me):
308319
mock_service_manager_inst = Mock()
309320
mock_service_manager.return_value = mock_service_manager_inst
310321
mock_service_manager_inst.service_is_active = Mock(return_value=True)
311322
self.instance_fix._check_config_consistency = Mock(return_value=True)
312323
self.instance_fix._load_configurations_from_runtime = Mock()
313-
self.instance_fix._check_sbd_disk_metadata = Mock(side_effect=[False, False])
324+
self.instance_fix._check_sbd_device_metadata_consistency = Mock(return_value=sbd.CheckResult.SUCCESS)
325+
self.instance_fix._check_sbd_disk_metadata = Mock(side_effect=[sbd.CheckResult.ERROR, sbd.CheckResult.ERROR])
314326
self.instance_fix._fix_sbd_disk_metadata = Mock()
315327

316328
with self.assertRaises(sbd.FixFailure) as context:
317329
self.instance_fix.check_and_fix()
318330
self.assertTrue("Failed to fix SBD disk metadata" in str(context.exception))
319331

332+
@patch('crmsh.utils.list_cluster_nodes_except_me')
333+
@patch('crmsh.utils.check_all_nodes_reachable')
320334
@patch('crmsh.sbd.ServiceManager')
321-
def test_check_and_fix_fix_success(self, mock_service_manager):
335+
def test_check_and_fix_fix_success(self, mock_service_manager, mock_check_all_nodes_reachable, mock_list_cluster_nodes_except_me):
322336
mock_service_manager_inst = Mock()
323337
mock_service_manager.return_value = mock_service_manager_inst
324338
mock_service_manager_inst.service_is_active = Mock(return_value=True)
325339
self.instance_fix._check_config_consistency = Mock(return_value=True)
326340
self.instance_fix._load_configurations_from_runtime = Mock()
341+
self.instance_fix._check_sbd_device_metadata_consistency = Mock(return_value=sbd.CheckResult.SUCCESS)
327342
self.instance_fix._check_sbd_disk_metadata = Mock(return_value=sbd.CheckResult.SUCCESS)
328343
self.instance_fix._check_sbd_watchdog_timeout = Mock(return_value=sbd.CheckResult.SUCCESS)
329344
self.instance_fix._check_sbd_delay_start = Mock(return_value=sbd.CheckResult.SUCCESS)
330345
self.instance_fix._check_sbd_systemd_start_timeout = Mock(return_value=sbd.CheckResult.SUCCESS)
331346
self.instance_fix._check_stonith_watchdog_timeout = Mock(return_value=sbd.CheckResult.SUCCESS)
332347
self.instance_fix._check_stonith_timeout = Mock(return_value=sbd.CheckResult.SUCCESS)
348+
self.instance_fix._check_sbd_delay_start_unset_dropin = Mock(return_value=sbd.CheckResult.SUCCESS)
333349

334350
res = self.instance_fix.check_and_fix()
335351
self.assertEqual(res, sbd.CheckResult.SUCCESS)
@@ -343,29 +359,24 @@ def test_check_and_fix_fix_success(self, mock_service_manager):
343359
self.instance_fix._check_sbd_systemd_start_timeout.assert_called_once()
344360
self.instance_fix._check_stonith_watchdog_timeout.assert_called_once()
345361
self.instance_fix._check_stonith_timeout.assert_called_once()
362+
self.instance_fix._check_sbd_delay_start_unset_dropin.assert_called_once()
346363

347-
@patch('crmsh.sbd.SBDUtils.check_devices_metadata_consistent')
348-
@patch('crmsh.sbd.SBDUtils.get_sbd_device_from_config')
349364
@patch('logging.Logger.error')
350365
@patch('logging.Logger.warning')
351366
@patch('crmsh.utils.remote_diff_this')
352367
@patch('crmsh.corosync.conf')
353-
@patch('crmsh.utils.list_cluster_nodes_except_me')
354368
@patch('crmsh.utils.this_node')
355-
def test_check_config_consistency(self, mock_this_node, mock_list_cluster_nodes_except_me, mock_corosync_conf, mock_remote_diff_this, mock_logger_warning, mock_logger_error, mock_get_sbd_device_from_config, mock_check_devices_metadata_consistent):
369+
def test_check_config_consistency(self, mock_this_node, mock_corosync_conf, mock_remote_diff_this, mock_logger_warning, mock_logger_error):
356370
mock_this_node.return_value = 'node1'
357-
mock_list_cluster_nodes_except_me.return_value = ['node2', 'node3']
358371
mock_corosync_conf.return_value = "corosync.conf"
359372
mock_remote_diff_this.side_effect = ["diff data1", "diff data2"]
360-
mock_get_sbd_device_from_config.return_value = ['/dev/sbd_device']
361-
mock_check_devices_metadata_consistent.return_value = False
373+
self.instance_check.peer_node_list = ["node2", "node3"]
362374

363375
self.assertFalse(self.instance_check._check_config_consistency())
364376

365377
mock_logger_error.assert_has_calls([
366-
call('corosync.conf is not consistent across cluster nodes'),
378+
call('%s is not consistent across cluster nodes', "corosync.conf"),
367379
call('%s is not consistent across cluster nodes', sbd.SBDManager.SYSCONFIG_SBD),
368-
call('SBD device metadata is not consistent across cluster nodes')
369380
])
370381

371382
@patch('logging.Logger.error')
@@ -442,7 +453,7 @@ def test_check_sbd_systemd_start_timeout_failure(self, mock_get_sbd_systemd_star
442453
mock_get_sbd_systemd_start_timeout.return_value = 30
443454
self.instance_check.sbd_systemd_start_timeout_expected = 60
444455
self.assertEqual(self.instance_check._check_sbd_systemd_start_timeout(), sbd.CheckResult.ERROR)
445-
mock_logger_error.assert_called_once_with("It's recommended that systemd start timeout for sbd.service is set to %ds, now is %ds", 60, 30)
456+
mock_logger_error.assert_called_once_with("It's recommended that systemd start timeout for sbd.service is set to %ds, now is %ds on node %s", 60, 30, utils.this_node())
446457

447458
@patch('crmsh.sbd.SBDTimeout.get_sbd_systemd_start_timeout')
448459
def test_check_sbd_systemd_start_timeout_success(self, mock_get_sbd_systemd_start_timeout):

test/unittests/test_ui_sbd.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ def test_configure_usage_none(self, mock_is_using_disk_based_sbd, mock_is_using_
153153
@mock.patch('crmsh.sbd.SBDUtils.is_using_disk_based_sbd')
154154
def test_configure_usage_disk_diskbased(self, mock_is_using_disk_based_sbd, mock_is_using_diskless_sbd):
155155
mock_is_using_disk_based_sbd.return_value = True
156-
timeout_usage_str = " ".join([f"[{t}-timeout=<integer>]" for t in ui_sbd.SBD.TIMEOUT_TYPE_MINIMUMS])
156+
timeout_usage_str = " ".join([f"[{t}-timeout=<integer>]" for t in ui_sbd.SBD.DISKBASED_TIMEOUT_TYPES])
157157
show_usage = f"crm sbd configure show [{'|'.join(ui_sbd.SBD.SHOW_TYPES)}]"
158158
expected = f"Usage:\n{show_usage}\ncrm sbd configure {timeout_usage_str} [watchdog-device=<device>]\n"
159159
self.assertEqual(self.sbd_instance_diskbased.configure_usage, expected)
@@ -165,7 +165,7 @@ def test_configure_usage_disk_diskbased(self, mock_is_using_disk_based_sbd, mock
165165
def test_configure_usage_disk_diskless(self, mock_is_using_disk_based_sbd, mock_is_using_diskless_sbd):
166166
mock_is_using_disk_based_sbd.return_value = False
167167
mock_is_using_diskless_sbd.return_value = True
168-
timeout_usage_str = " ".join([f"[{t}-timeout=<integer>]" for t in ui_sbd.SBD.DISKLESS_TIMEOUT_TYPE_MINIMUMS])
168+
timeout_usage_str = " ".join([f"[{t}-timeout=<integer>]" for t in ui_sbd.SBD.DISKLESS_TIMEOUT_TYPES])
169169
show_usage = f"crm sbd configure show [{'|'.join(ui_sbd.SBD.DISKLESS_SHOW_TYPES)}]"
170170
expected = f"Usage:\n{show_usage}\ncrm sbd configure {timeout_usage_str} [watchdog-device=<device>]\n"
171171
self.assertEqual(self.sbd_instance_diskless.configure_usage, expected)
@@ -308,9 +308,11 @@ def test_parse_args_invalid_timeout_value(self):
308308
self.sbd_instance_diskbased._parse_args(["watchdog-timeout=xxx"])
309309
self.assertEqual(str(e.exception), "Invalid timeout value: xxx")
310310

311+
@mock.patch('crmsh.sbd.SBDTimeout.get_timeout_minimum_value')
311312
@mock.patch('logging.Logger.debug')
312313
@mock.patch('crmsh.watchdog.Watchdog.get_watchdog_device')
313-
def test_parse_args(self, mock_get_watchdog_device, mock_logger_debug):
314+
def test_parse_args(self, mock_get_watchdog_device, mock_logger_debug, mock_get_timeout_minimum_value):
315+
mock_get_timeout_minimum_value.return_value = 5
314316
mock_get_watchdog_device.return_value = "/dev/watchdog0"
315317
args = self.sbd_instance_diskbased._parse_args(["watchdog-timeout=10", "watchdog-device=/dev/watchdog0"])
316318
self.assertEqual(args, {"watchdog": 10, "watchdog-device": "/dev/watchdog0"})

test/unittests/test_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -992,7 +992,7 @@ def test_check_all_nodes_reachable_dead_nodes(mock_xml, mock_reachable):
992992

993993
with pytest.raises(utils.DeadNodeError) as err:
994994
utils.check_all_nodes_reachable("testing")
995-
assert err.value.dead_nodes == ["node2"]
995+
assert err.value.summary.dead_nodes == ["node2"]
996996

997997

998998
@mock.patch('crmsh.utils.check_ssh_passwd_need')

0 commit comments

Comments
 (0)