Skip to content

Commit c8137e5

Browse files
committed
Dev: unittest: Adjust unit test for previous changes
1 parent 8a1d762 commit c8137e5

File tree

5 files changed

+61
-97
lines changed

5 files changed

+61
-97
lines changed

test/unittests/test_ocfs2.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -445,16 +445,15 @@ def test_join_ocfs2_return(self, mock_find):
445445
@mock.patch('crmsh.utils.compare_uuid_with_peer_dev')
446446
@mock.patch('crmsh.utils.is_dev_a_plain_raw_disk_or_partition')
447447
@mock.patch('crmsh.ocfs2.OCFS2Manager._verify_packages')
448-
@mock.patch('crmsh.xmlutil.CrmMonXmlParser.is_resource_configured')
448+
@mock.patch('crmsh.xmlutil.CrmMonXmlParser')
449449
@mock.patch('crmsh.log.LoggerUtils.status_long')
450450
@mock.patch('crmsh.ocfs2.OCFS2Manager._find_target_on_join')
451-
def test_join_ocfs2(self, mock_find, mock_long, mock_configured, mock_verify_packages, mock_is_mapper, mock_compare):
451+
def test_join_ocfs2(self, mock_find, mock_long, mock_parser, mock_verify_packages, mock_is_mapper, mock_compare):
452452
mock_find.return_value = "/dev/sda2"
453-
mock_configured.return_value = False
453+
mock_parser("node1").is_resource_configured.return_value = False
454454
mock_is_mapper.return_value = True
455455
self.ocfs2_inst3.join_ocfs2("node1")
456456
mock_find.assert_called_once_with("node1")
457-
mock_configured.assert_called_once_with(constants.LVMLOCKD_RA, "node1")
458457
mock_verify_packages.assert_called_once_with(False)
459458
mock_is_mapper.assert_called_once_with("/dev/sda2", "node1")
460459
mock_compare.assert_called_once_with(["/dev/sda2"], "node1")

test/unittests/test_qdevice.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,32 +38,30 @@ def test_evaluate_qdevice_quorum_effect_reload(mock_get_dict, mock_quorate):
3838
mock_quorate.assert_called_once_with(3, 2)
3939

4040

41-
@mock.patch('crmsh.xmlutil.CrmMonXmlParser.is_any_resource_running')
41+
@mock.patch('crmsh.xmlutil.CrmMonXmlParser')
4242
@mock.patch('crmsh.utils.calculate_quorate_status')
4343
@mock.patch('crmsh.utils.get_quorum_votes_dict')
44-
def test_evaluate_qdevice_quorum_effect_later(mock_get_dict, mock_quorate, mock_ra_running):
44+
def test_evaluate_qdevice_quorum_effect_later(mock_get_dict, mock_quorate, mock_parser):
4545
mock_get_dict.return_value = {'Expected': '2', 'Total': '2'}
4646
mock_quorate.return_value = False
47-
mock_ra_running.return_value = True
47+
mock_parser().is_any_resource_running.return_value = True
4848
res = qdevice.evaluate_qdevice_quorum_effect(qdevice.QDEVICE_REMOVE)
4949
assert res == qdevice.QdevicePolicy.QDEVICE_RESTART_LATER
5050
mock_get_dict.assert_called_once_with()
5151
mock_quorate.assert_called_once_with(2, 1)
52-
mock_ra_running.assert_called_once_with()
5352

5453

55-
@mock.patch('crmsh.xmlutil.CrmMonXmlParser.is_any_resource_running')
54+
@mock.patch('crmsh.xmlutil.CrmMonXmlParser')
5655
@mock.patch('crmsh.utils.calculate_quorate_status')
5756
@mock.patch('crmsh.utils.get_quorum_votes_dict')
58-
def test_evaluate_qdevice_quorum_effect(mock_get_dict, mock_quorate, mock_ra_running):
57+
def test_evaluate_qdevice_quorum_effect(mock_get_dict, mock_quorate, mock_parser):
5958
mock_get_dict.return_value = {'Expected': '2', 'Total': '2'}
6059
mock_quorate.return_value = False
61-
mock_ra_running.return_value = False
60+
mock_parser().is_any_resource_running.return_value = False
6261
res = qdevice.evaluate_qdevice_quorum_effect(qdevice.QDEVICE_REMOVE)
6362
assert res == qdevice.QdevicePolicy.QDEVICE_RESTART
6463
mock_get_dict.assert_called_once_with()
6564
mock_quorate.assert_called_once_with(2, 1)
66-
mock_ra_running.assert_called_once_with()
6765

6866

6967
@mock.patch('crmsh.lock.RemoteLock')

test/unittests/test_sbd.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -618,9 +618,9 @@ def test_sbd_init(self, mock_package, mock_watchdog, mock_get_device, mock_initi
618618
@mock.patch('crmsh.bootstrap.wait_for_cluster')
619619
@mock.patch('crmsh.utils.cluster_run_cmd')
620620
@mock.patch('logging.Logger.info')
621-
@mock.patch('crmsh.xmlutil.CrmMonXmlParser.is_any_resource_running')
622-
def test_restart_cluster_on_needed_no_ra_running(self, mock_ra_running, mock_status, mock_cluster_run, mock_wait, mock_config_sbd_ra):
623-
mock_ra_running.return_value = False
621+
@mock.patch('crmsh.xmlutil.CrmMonXmlParser')
622+
def test_restart_cluster_on_needed_no_ra_running(self, mock_parser, mock_status, mock_cluster_run, mock_wait, mock_config_sbd_ra):
623+
mock_parser().is_any_resource_running.return_value = False
624624
self.sbd_inst._restart_cluster_and_configure_sbd_ra()
625625
mock_status.assert_called_once_with("Restarting cluster service")
626626
mock_cluster_run.assert_called_once_with("crm cluster restart")
@@ -629,9 +629,9 @@ def test_restart_cluster_on_needed_no_ra_running(self, mock_ra_running, mock_sta
629629

630630
@mock.patch('crmsh.sbd.SBDTimeout.get_stonith_timeout')
631631
@mock.patch('logging.Logger.warning')
632-
@mock.patch('crmsh.xmlutil.CrmMonXmlParser.is_any_resource_running')
633-
def test_restart_cluster_on_needed_diskless(self, mock_ra_running, mock_warn, mock_get_timeout):
634-
mock_ra_running.return_value = True
632+
@mock.patch('crmsh.xmlutil.CrmMonXmlParser')
633+
def test_restart_cluster_on_needed_diskless(self, mock_parser, mock_warn, mock_get_timeout):
634+
mock_parser().is_any_resource_running.return_value = True
635635
mock_get_timeout.return_value = 60
636636
self.sbd_inst_diskless.timeout_inst = mock.Mock(stonith_watchdog_timeout=-1)
637637
self.sbd_inst_diskless._restart_cluster_and_configure_sbd_ra()
@@ -642,14 +642,13 @@ def test_restart_cluster_on_needed_diskless(self, mock_ra_running, mock_warn, mo
642642

643643
@mock.patch('crmsh.sbd.SBDManager.configure_sbd_resource_and_properties')
644644
@mock.patch('logging.Logger.warning')
645-
@mock.patch('crmsh.xmlutil.CrmMonXmlParser.is_any_resource_running')
646-
def test_restart_cluster_on_needed(self, mock_ra_running, mock_warn, mock_config_sbd_ra):
647-
mock_ra_running.return_value = True
645+
@mock.patch('crmsh.xmlutil.CrmMonXmlParser')
646+
def test_restart_cluster_on_needed(self, mock_parser, mock_warn, mock_config_sbd_ra):
647+
mock_parser().is_any_resource_running.return_value = True
648648
self.sbd_inst._restart_cluster_and_configure_sbd_ra()
649649
mock_warn.assert_has_calls([
650650
mock.call("To start sbd.service, need to restart cluster service manually on each node"),
651651
])
652-
mock_config_sbd_ra.assert_called_once_with()
653652

654653
@mock.patch('crmsh.bootstrap.invoke')
655654
def test_enable_sbd_service_init(self, mock_invoke):
@@ -677,16 +676,16 @@ def test_configure_sbd_resource_and_properties_not_installed(self, mock_package)
677676
@mock.patch('crmsh.sbd.SBDTimeout.adjust_sbd_timeout_related_cluster_configuration')
678677
@mock.patch('crmsh.utils.set_property')
679678
@mock.patch('crmsh.sh.ClusterShell.get_stdout_or_raise_error')
680-
@mock.patch('crmsh.xmlutil.CrmMonXmlParser.is_resource_configured')
679+
@mock.patch('crmsh.xmlutil.CrmMonXmlParser')
681680
@mock.patch('crmsh.service_manager.ServiceManager.service_is_enabled')
682681
@mock.patch('crmsh.utils.package_is_installed')
683682
def test_configure_sbd_resource_and_properties(
684683
self,
685-
mock_package, mock_enabled, mock_configured, mock_run, mock_set_property, sbd_adjust, mock_is_active,
684+
mock_package, mock_enabled, mock_parser, mock_run, mock_set_property, sbd_adjust, mock_is_active,
686685
):
687686
mock_package.return_value = True
688687
mock_enabled.return_value = True
689-
mock_configured.return_value = False
688+
mock_parser().is_resource_configured.return_value = False
690689
mock_is_active.return_value = False
691690
self.sbd_inst._context = mock.Mock(cluster_is_running=True)
692691
self.sbd_inst._get_sbd_device_from_config = mock.Mock()
@@ -696,7 +695,6 @@ def test_configure_sbd_resource_and_properties(
696695

697696
mock_package.assert_called_once_with("sbd")
698697
mock_enabled.assert_called_once_with("sbd.service")
699-
mock_configured.assert_called_once_with(sbd.SBDManager.SBD_RA)
700698
mock_run.assert_called_once_with("crm configure primitive {} {}".format(sbd.SBDManager.SBD_RA_ID, sbd.SBDManager.SBD_RA))
701699
mock_set_property.assert_called_once_with("stonith-enabled", "true")
702700

test/unittests/test_utils.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1327,11 +1327,11 @@ def test_set_dlm_option(mock_get_dict, mock_run):
13271327
mock_run.assert_called_once_with('dlm_tool set_config "key2=test"')
13281328

13291329

1330-
@mock.patch('crmsh.xmlutil.CrmMonXmlParser.is_resource_configured')
1331-
def test_is_dlm_configured(mock_configured):
1332-
mock_configured.return_value = True
1330+
@mock.patch('crmsh.xmlutil.CrmMonXmlParser')
1331+
def test_is_dlm_configured(mock_parser):
1332+
mock_parser().is_resource_configured.return_value = True
13331333
assert utils.is_dlm_configured() is True
1334-
mock_configured.assert_called_once_with(constants.DLM_CONTROLD_RA)
1334+
mock_parser().is_resource_configured.assert_called_once_with(constants.DLM_CONTROLD_RA)
13351335

13361336

13371337
@mock.patch('crmsh.sh.ClusterShell.get_stdout_or_raise_error')

test/unittests/test_xmlutil.py

Lines changed: 36 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -12,81 +12,50 @@ class TestCrmMonXmlParser(unittest.TestCase):
1212
"""
1313
Unitary tests for crmsh.xmlutil.CrmMonXmlParser
1414
"""
15-
16-
@classmethod
17-
def setUpClass(cls):
18-
"""
19-
Global setUp.
20-
"""
21-
22-
def setUp(self):
15+
@mock.patch('crmsh.sh.cluster_shell')
16+
def setUp(self, mock_cluster_shell):
2317
"""
2418
Test setUp.
2519
"""
26-
self.parser_inst = xmlutil.CrmMonXmlParser()
27-
self.nodes_xml = """
20+
data = '''
21+
<data>
2822
<nodes>
29-
<node name="tbw-1" id="1084783148" online="true" standby="false" standby_onfail="false" maintenance="false" pending="false" unclean="false" shutdown="false" expected_up="true" is_dc="true" resources_running="3" type="member"/>
30-
<node name="tbw-2" id="1084783312" online="true" standby="false" standby_onfail="false" maintenance="false" pending="false" unclean="false" shutdown="false" expected_up="true" is_dc="false" resources_running="2" type="member"/>
23+
<node name="tbw-1" id="1084783148" online="true" standby="true" standby_onfail="false" maintenance="false" pending="false" unclean="false" shutdown="false" expected_up="true" is_dc="true" resources_running="3" type="member"/>
24+
<node name="tbw-2" id="1084783312" online="false" standby="false" standby_onfail="false" maintenance="false" pending="false" unclean="false" shutdown="false" expected_up="true" is_dc="false" resources_running="2" type="member"/>
3125
</nodes>
32-
"""
33-
self.resources_xml = """
34-
<resources>
35-
<resource id="ocfs2-dlm" resource_agent="ocf::pacemaker:controld" role="Started" active="true" orphaned="false" blocked="false" managed="true" failed="false" failure_ignored="false" nodes_running_on="1">
36-
<node name="tbw-2" id="1084783312" cached="true"/>
37-
</resource>
38-
<resource id="ocfs2-clusterfs" resource_agent="ocf::heartbeat:Filesystem" role="Started" active="true" orphaned="false" blocked="false" managed="true" failed="false" failure_ignored="false" nodes_running_on="1">
39-
<node name="tbw-2" id="1084783312" cached="true"/>
40-
</resource>
41-
</resources>
42-
"""
43-
44-
def tearDown(self):
45-
"""
46-
Test tearDown.
47-
"""
48-
49-
@classmethod
50-
def tearDownClass(cls):
51-
"""
52-
Global tearDown.
53-
"""
26+
<resources>
27+
<resource id="ocfs2-dlm" resource_agent="ocf::pacemaker:controld" role="Started" active="true" orphaned="false" blocked="false" managed="true" failed="false" failure_ignored="false" nodes_running_on="1">
28+
<node name="tbw-2" id="1084783312" cached="true"/>
29+
</resource>
30+
<resource id="ocfs2-clusterfs" resource_agent="ocf::heartbeat:Filesystem" role="Started" active="true" orphaned="false" blocked="false" managed="true" failed="false" failure_ignored="false" nodes_running_on="1">
31+
<node name="tbw-2" id="1084783312" cached="true"/>
32+
</resource>
33+
</resources>
34+
</data>
35+
'''
36+
mock_cluster_shell().get_rc_stdout_stderr_without_input.return_value = (0, data, '')
37+
self.parser_inst = xmlutil.CrmMonXmlParser()
5438

55-
@mock.patch('crmsh.xmlutil.text2elem')
56-
@mock.patch('crmsh.sh.ClusterShell.get_rc_stdout_stderr_without_input')
57-
def test_load(self, mock_run, mock_text2elem):
58-
mock_run.return_value = (0, "data", "")
59-
mock_text2elem.return_value = mock.Mock()
60-
self.parser_inst._load()
61-
mock_run.assert_called_once_with(None, constants.CRM_MON_XML_OUTPUT)
62-
mock_text2elem.assert_called_once_with("data")
39+
def test_is_node_online(self):
40+
assert self.parser_inst.is_node_online("tbw-1") is True
41+
assert self.parser_inst.is_node_online("tbw-2") is False
6342

64-
@mock.patch('crmsh.sh.ClusterShell.get_rc_stdout_stderr_without_input')
65-
def test_is_node_online(self, mock_run):
66-
mock_run.return_value = (0, self.nodes_xml, "")
67-
assert xmlutil.CrmMonXmlParser.is_node_online("node1") is False
68-
assert xmlutil.CrmMonXmlParser.is_node_online("tbw-2") is True
43+
def test_get_node_list(self):
44+
assert self.parser_inst.get_node_list("standby") == ['tbw-1']
45+
assert self.parser_inst.get_node_list("online") == ['tbw-2']
6946

70-
@mock.patch('crmsh.sh.ClusterShell.get_rc_stdout_stderr_without_input')
71-
def test_is_resource_configured(self, mock_run):
72-
mock_run.return_value = (0, self.resources_xml, "")
73-
assert xmlutil.CrmMonXmlParser.is_resource_configured("test") is False
74-
assert xmlutil.CrmMonXmlParser.is_resource_configured("ocf::heartbeat:Filesystem") is True
47+
def test_is_resource_configured(self):
48+
assert self.parser_inst.is_resource_configured("test") is False
49+
assert self.parser_inst.is_resource_configured("ocf::heartbeat:Filesystem") is True
7550

76-
@mock.patch('crmsh.sh.ClusterShell.get_rc_stdout_stderr_without_input')
77-
def test_is_any_resource_running(self, mock_run):
78-
mock_run.return_value = (0, self.resources_xml, "")
79-
assert xmlutil.CrmMonXmlParser.is_any_resource_running() is True
51+
def test_is_any_resource_running(self):
52+
assert self.parser_inst.is_any_resource_running() is True
8053

81-
@mock.patch('crmsh.sh.ClusterShell.get_rc_stdout_stderr_without_input')
82-
def test_is_resource_started(self, mock_run):
83-
mock_run.return_value = (0, self.resources_xml, "")
84-
assert xmlutil.CrmMonXmlParser.is_resource_started("test") is False
85-
assert xmlutil.CrmMonXmlParser.is_resource_started("ocfs2-clusterfs") is True
86-
assert xmlutil.CrmMonXmlParser.is_resource_started("ocf::pacemaker:controld") is True
54+
def test_is_resource_started(self):
55+
assert self.parser_inst.is_resource_started("test") is False
56+
assert self.parser_inst.is_resource_started("ocfs2-clusterfs") is True
57+
assert self.parser_inst.is_resource_started("ocf::pacemaker:controld") is True
8758

88-
@mock.patch('crmsh.sh.ClusterShell.get_rc_stdout_stderr_without_input')
89-
def test_get_resource_id_list_via_type(self, mock_run):
90-
mock_run.return_value = (0, self.resources_xml, "")
91-
assert xmlutil.CrmMonXmlParser.get_resource_id_list_via_type("test") == []
92-
assert xmlutil.CrmMonXmlParser.get_resource_id_list_via_type("ocf::pacemaker:controld")[0] == "ocfs2-dlm"
59+
def test_get_resource_id_list_via_type(self):
60+
assert self.parser_inst.get_resource_id_list_via_type("test") == []
61+
assert self.parser_inst.get_resource_id_list_via_type("ocf::pacemaker:controld")[0] == "ocfs2-dlm"

0 commit comments

Comments
 (0)