@@ -80,52 +80,91 @@ def test_do_start(self, mock_parse_nodes, mock_active, mock_start, mock_qdevice_
8080 mock_qdevice_configured .assert_called_once_with ()
8181 mock_info .assert_called_once_with ("The cluster stack started on node1" )
8282
83- @mock .patch ('logging.Logger.info ' )
84- @mock .patch ('crmsh.utils.service_is_active ' )
83+ @mock .patch ('crmsh.ui_cluster.Cluster._wait_for_dc ' )
84+ @mock .patch ('crmsh.ui_cluster.Cluster._node_ready_to_stop_cluster_service ' )
8585 @mock .patch ('crmsh.ui_cluster.parse_option_for_nodes' )
86- def test_do_stop_already_stopped (self , mock_parse_nodes , mock_active , mock_info ):
86+ def test_do_stop_return (self , mock_parse_nodes , mock_node_ready_to_stop_cluster_service , mock_dc ):
87+ mock_parse_nodes .return_value = ["node1" , "node2" ]
88+ mock_node_ready_to_stop_cluster_service .side_effect = [False , False ]
89+
8790 context_inst = mock .Mock ()
88- mock_parse_nodes .return_value = ["node1" ]
89- mock_active .side_effect = [False , False ]
90- self .ui_cluster_inst .do_stop (context_inst , "node1" )
91- mock_active .assert_has_calls ([
92- mock .call ("corosync.service" , remote_addr = "node1" ),
93- mock .call ("sbd.service" , remote_addr = "node1" )
94- ])
95- mock_info .assert_called_once_with ("The cluster stack already stopped on node1" )
91+ self .ui_cluster_inst .do_stop (context_inst , "node1" , "node2" )
92+
93+ mock_parse_nodes .assert_called_once_with (context_inst , "node1" , "node2" )
94+ mock_node_ready_to_stop_cluster_service .assert_has_calls ([mock .call ("node1" ), mock .call ("node2" )])
95+ mock_dc .assert_not_called ()
9696
9797 @mock .patch ('logging.Logger.debug' )
9898 @mock .patch ('logging.Logger.info' )
99- @mock .patch ('crmsh.utils.stop_service' )
100- @mock .patch ('crmsh.utils.set_dlm_option' )
101- @mock .patch ('crmsh.utils.is_quorate' )
102- @mock .patch ('crmsh.utils.is_dlm_running' )
103- @mock .patch ('crmsh.utils.get_dc' )
104- @mock .patch ('crmsh.utils.check_function_with_timeout' )
105- @mock .patch ('crmsh.utils.get_property' )
10699 @mock .patch ('crmsh.utils.service_is_active' )
100+ @mock .patch ('crmsh.utils.stop_service' )
101+ @mock .patch ('crmsh.ui_cluster.Cluster._set_dlm' )
102+ @mock .patch ('crmsh.ui_cluster.Cluster._wait_for_dc' )
103+ @mock .patch ('crmsh.ui_cluster.Cluster._node_ready_to_stop_cluster_service' )
107104 @mock .patch ('crmsh.ui_cluster.parse_option_for_nodes' )
108- def test_do_stop (self , mock_parse_nodes , mock_active , mock_get_property , mock_check , mock_get_dc , mock_dlm_running , mock_is_quorate , mock_set_dlm , mock_stop , mock_info , mock_debug ):
105+ def test_do_stop (self , mock_parse_nodes , mock_node_ready_to_stop_cluster_service , mock_dc ,
106+ mock_set_dlm , mock_stop , mock_is_active , mock_info , mock_debug ):
107+ mock_parse_nodes .return_value = ["node1" , "node2" ]
108+ mock_node_ready_to_stop_cluster_service .side_effect = [True , False ]
109+ mock_stop .side_effect = [["node1" ], ["node1" ], ["node1" ]]
110+ mock_is_active .return_value = True
111+
109112 context_inst = mock .Mock ()
110- mock_stop .side_effect = [["node1" ], ["ndoe1" ], ["node1" ]]
111- mock_parse_nodes .return_value = ["node1" ]
112- mock_active .side_effect = [True , True , True ]
113- mock_dlm_running .return_value = True
114- mock_is_quorate .return_value = False
115- mock_get_property .return_value = "20s"
113+ self .ui_cluster_inst .do_stop (context_inst , "node1" , "node2" )
116114
117- self .ui_cluster_inst .do_stop (context_inst , "node1" )
115+ mock_parse_nodes .assert_called_once_with (context_inst , "node1" , "node2" )
116+ mock_node_ready_to_stop_cluster_service .assert_has_calls ([mock .call ("node1" ), mock .call ("node2" )])
117+ mock_debug .assert_called_once_with ("stop node list: ['node1']" )
118+ mock_dc .assert_called_once_with ("node1" )
119+ mock_set_dlm .assert_called_once_with ("node1" )
120+ mock_stop .assert_has_calls ([
121+ mock .call ("pacemaker" , node_list = ["node1" ]),
122+ mock .call ("corosync-qdevice.service" , node_list = ["node1" ]),
123+ mock .call ("corosync" , node_list = ["node1" ]),
124+ ])
125+ mock_info .assert_called_once_with ("The cluster stack stopped on node1" )
118126
119- mock_active .assert_has_calls ([
127+ @mock .patch ('logging.Logger.info' )
128+ @mock .patch ('crmsh.utils.stop_service' )
129+ @mock .patch ('crmsh.utils.service_is_active' )
130+ def test__node_ready_to_stop_cluster_service_corosync (self , mock_is_active , mock_stop , mock_info ):
131+ mock_is_active .side_effect = [False , True , False ]
132+ res = self .ui_cluster_inst ._node_ready_to_stop_cluster_service ("node1" )
133+ assert res is False
134+ mock_is_active .assert_has_calls ([
120135 mock .call ("corosync.service" , remote_addr = "node1" ),
136+ mock .call ("sbd.service" , remote_addr = "node1" ),
121137 mock .call ("pacemaker.service" , remote_addr = "node1" ),
122- mock .call ("corosync-qdevice.service" )
123138 ])
124- mock_stop .assert_has_calls ([
125- mock .call ("pacemaker" , node_list = ["node1" ]),
126- mock .call ("corosync-qdevice.service" , node_list = ["node1" ]),
127- mock .call ("corosync" , node_list = ["node1" ])
139+ mock_stop .assert_called_once_with ("corosync" , remote_addr = "node1" )
140+ mock_info .assert_called_once_with ("The cluster stack stopped on node1" )
141+
142+ @mock .patch ('logging.Logger.info' )
143+ @mock .patch ('crmsh.utils.stop_service' )
144+ @mock .patch ('crmsh.utils.service_is_active' )
145+ def test__node_ready_to_stop_cluster_service_pacemaker (self , mock_is_active , mock_stop , mock_info ):
146+ mock_is_active .side_effect = [True , True , False ]
147+ res = self .ui_cluster_inst ._node_ready_to_stop_cluster_service ("node1" )
148+ assert res is False
149+ mock_is_active .assert_has_calls ([
150+ mock .call ("corosync.service" , remote_addr = "node1" ),
151+ mock .call ("sbd.service" , remote_addr = "node1" ),
152+ mock .call ("pacemaker.service" , remote_addr = "node1" ),
128153 ])
154+ mock_stop .assert_called_once_with ("corosync" , remote_addr = "node1" )
129155 mock_info .assert_called_once_with ("The cluster stack stopped on node1" )
130- mock_debug .assert_called_once_with ("Quorum is lost; Set enable_quorum_fencing=0 and enable_quorum_lockspace=0 for dlm" )
131- mock_check .assert_called_once_with (mock_get_dc , wait_timeout = 25 )
156+
157+ @mock .patch ('logging.Logger.info' )
158+ @mock .patch ('crmsh.utils.stop_service' )
159+ @mock .patch ('crmsh.utils.service_is_active' )
160+ def test__node_ready_to_stop_cluster_service (self , mock_is_active , mock_stop , mock_info ):
161+ mock_is_active .side_effect = [True , True , True ]
162+ res = self .ui_cluster_inst ._node_ready_to_stop_cluster_service ("node1" )
163+ assert res is True
164+ mock_is_active .assert_has_calls ([
165+ mock .call ("corosync.service" , remote_addr = "node1" ),
166+ mock .call ("sbd.service" , remote_addr = "node1" ),
167+ mock .call ("pacemaker.service" , remote_addr = "node1" ),
168+ ])
169+ mock_info .assert_not_called ()
170+ mock_stop .assert_not_called ()
0 commit comments