def test_success(self, mock_corosync_live): conf_text = "test conf text" nodes = ["node1", "node2"] node_addrs_list = NodeAddressesList( [NodeAddresses(addr) for addr in nodes]) mock_corosync_live.set_remote_corosync_conf = mock.MagicMock() lib.distribute_corosync_conf(self.mock_communicator, self.mock_reporter, node_addrs_list, conf_text) corosync_live_calls = [ mock.call.set_remote_corosync_conf("mock node communicator", node_addrs_list[0], conf_text), mock.call.set_remote_corosync_conf("mock node communicator", node_addrs_list[1], conf_text), ] self.assertEqual(len(corosync_live_calls), len(mock_corosync_live.mock_calls)) mock_corosync_live.set_remote_corosync_conf.assert_has_calls( corosync_live_calls, any_order=True) assert_report_item_list_equal(self.mock_reporter.report_item_list, [ (severity.INFO, report_codes.COROSYNC_CONFIG_DISTRIBUTION_STARTED, {}), (severity.INFO, report_codes.COROSYNC_CONFIG_ACCEPTED_BY_NODE, { "node": nodes[0] }), (severity.INFO, report_codes.COROSYNC_CONFIG_ACCEPTED_BY_NODE, { "node": nodes[1] }), ])
def push_corosync_conf( self, corosync_conf_facade, skip_offline_nodes=False ): corosync_conf_data = corosync_conf_facade.config.export() if self.is_corosync_conf_live: node_list = corosync_conf_facade.get_nodes() if corosync_conf_facade.need_stopped_cluster: check_corosync_offline_on_nodes( self.node_communicator(), self.report_processor, node_list, skip_offline_nodes ) distribute_corosync_conf( self.node_communicator(), self.report_processor, node_list, corosync_conf_data, skip_offline_nodes ) if is_service_running(self.cmd_runner(), "corosync"): reload_corosync_config(self.cmd_runner()) self.report_processor.process( reports.corosync_config_reloaded() ) if corosync_conf_facade.need_qdevice_reload: qdevice_reload_on_nodes( self.node_communicator(), self.report_processor, node_list, skip_offline_nodes ) else: self._corosync_conf_data = corosync_conf_data
def push_corosync_conf( self, corosync_conf_facade, skip_offline_nodes=False ): corosync_conf_data = corosync_conf_facade.config.export() if self.is_corosync_conf_live: node_list = corosync_conf_facade.get_nodes() if corosync_conf_facade.need_stopped_cluster: check_corosync_offline_on_nodes( self.node_communicator(), self.report_processor, node_list, skip_offline_nodes ) distribute_corosync_conf( self.node_communicator(), self.report_processor, node_list, corosync_conf_data, skip_offline_nodes ) if is_service_running(self.cmd_runner(), "corosync"): reload_corosync_config(self.cmd_runner()) self.report_processor.process( reports.corosync_config_reloaded() ) if corosync_conf_facade.need_qdevice_reload: qdevice_reload_on_nodes( self.node_communicator(), self.report_processor, node_list, skip_offline_nodes ) else: self._corosync_conf_data = corosync_conf_data
def test_one_node_down_forced(self, mock_corosync_live): conf_text = "test conf text" nodes = ["node1", "node2"] node_addrs_list = NodeAddressesList( [NodeAddresses(addr) for addr in nodes]) mock_corosync_live.set_remote_corosync_conf = mock.MagicMock() def raiser(comm, node, conf): if node.ring0 == nodes[1]: raise NodeAuthenticationException(nodes[1], "command", "HTTP error: 401") mock_corosync_live.set_remote_corosync_conf.side_effect = raiser lib.distribute_corosync_conf(self.mock_communicator, self.mock_reporter, node_addrs_list, conf_text, skip_offline_nodes=True) corosync_live_calls = [ mock.call.set_remote_corosync_conf("mock node communicator", nodes[0], conf_text), mock.call.set_remote_corosync_conf("mock node communicator", nodes[1], conf_text), ] self.assertEqual(len(corosync_live_calls), len(mock_corosync_live.mock_calls)) mock_corosync_live.set_remote_corosync_conf.assert_has_calls( [ mock.call("mock node communicator", node_addrs_list[0], conf_text), mock.call("mock node communicator", node_addrs_list[1], conf_text), ], any_order=True) assert_report_item_list_equal(self.mock_reporter.report_item_list, [ (severity.INFO, report_codes.COROSYNC_CONFIG_DISTRIBUTION_STARTED, {}), (severity.INFO, report_codes.COROSYNC_CONFIG_ACCEPTED_BY_NODE, { "node": nodes[0] }), (severity.WARNING, report_codes.NODE_COMMUNICATION_ERROR_NOT_AUTHORIZED, { "node": nodes[1], "command": "command", "reason": "HTTP error: 401", }), (severity.WARNING, report_codes.COROSYNC_CONFIG_DISTRIBUTION_NODE_ERROR, { "node": nodes[1], }), ])
def test_success(self, mock_corosync_live): conf_text = "test conf text" nodes = ["node1", "node2"] node_addrs_list = NodeAddressesList( [NodeAddresses(addr) for addr in nodes] ) mock_corosync_live.set_remote_corosync_conf = mock.MagicMock() lib.distribute_corosync_conf( self.mock_communicator, self.mock_reporter, node_addrs_list, conf_text ) corosync_live_calls = [ mock.call.set_remote_corosync_conf( "mock node communicator", nodes[0], conf_text ), mock.call.set_remote_corosync_conf( "mock node communicator", nodes[1], conf_text ), ] self.assertEqual( len(corosync_live_calls), len(mock_corosync_live.mock_calls) ) self.assert_set_remote_corosync_conf_call( mock_corosync_live.mock_calls[0], nodes[0], conf_text ) self.assert_set_remote_corosync_conf_call( mock_corosync_live.mock_calls[1], nodes[1], conf_text ) assert_report_item_list_equal( self.mock_reporter.report_item_list, [ ( severity.INFO, report_codes.COROSYNC_CONFIG_DISTRIBUTION_STARTED, {} ), ( severity.INFO, report_codes.COROSYNC_CONFIG_ACCEPTED_BY_NODE, {"node": nodes[0]} ), ( severity.INFO, report_codes.COROSYNC_CONFIG_ACCEPTED_BY_NODE, {"node": nodes[1]} ), ] )
def test_one_node_down_forced(self, mock_corosync_live): conf_text = "test conf text" nodes = ["node1", "node2"] node_addrs_list = NodeAddressesList([NodeAddresses(addr) for addr in nodes]) mock_corosync_live.set_remote_corosync_conf = mock.MagicMock() def raiser(comm, node, conf): if node.ring0 == nodes[1]: raise NodeAuthenticationException(nodes[1], "command", "HTTP error: 401") mock_corosync_live.set_remote_corosync_conf.side_effect = raiser lib.distribute_corosync_conf( self.mock_communicator, self.mock_reporter, node_addrs_list, conf_text, skip_offline_nodes=True ) corosync_live_calls = [ mock.call.set_remote_corosync_conf("mock node communicator", nodes[0], conf_text), mock.call.set_remote_corosync_conf("mock node communicator", nodes[1], conf_text), ] self.assertEqual(len(corosync_live_calls), len(mock_corosync_live.mock_calls)) mock_corosync_live.set_remote_corosync_conf.assert_has_calls( [ mock.call("mock node communicator", node_addrs_list[0], conf_text), mock.call("mock node communicator", node_addrs_list[1], conf_text), ], any_order=True, ) assert_report_item_list_equal( self.mock_reporter.report_item_list, [ (severity.INFO, report_codes.COROSYNC_CONFIG_DISTRIBUTION_STARTED, {}), (severity.INFO, report_codes.COROSYNC_CONFIG_ACCEPTED_BY_NODE, {"node": nodes[0]}), ( severity.WARNING, report_codes.NODE_COMMUNICATION_ERROR_NOT_AUTHORIZED, {"node": nodes[1], "command": "command", "reason": "HTTP error: 401"}, ), (severity.WARNING, report_codes.COROSYNC_CONFIG_DISTRIBUTION_NODE_ERROR, {"node": nodes[1]}), ], )
def test_one_node_down(self, mock_corosync_live): conf_text = "test conf text" nodes = ["node1", "node2"] node_addrs_list = NodeAddressesList( [NodeAddresses(addr) for addr in nodes] ) mock_corosync_live.set_remote_corosync_conf = mock.MagicMock() def raiser(comm, node, conf): if node.ring0 == nodes[1]: raise NodeAuthenticationException( nodes[1], "command", "HTTP error: 401" ) mock_corosync_live.set_remote_corosync_conf.side_effect = raiser assert_raise_library_error( lambda: lib.distribute_corosync_conf( self.mock_communicator, self.mock_reporter, node_addrs_list, conf_text ), ( severity.ERROR, report_codes.NODE_COMMUNICATION_ERROR_NOT_AUTHORIZED, { "node": nodes[1], "command": "command", "reason" : "HTTP error: 401", }, report_codes.SKIP_OFFLINE_NODES ), ( severity.ERROR, report_codes.COROSYNC_CONFIG_DISTRIBUTION_NODE_ERROR, { "node": nodes[1], }, report_codes.SKIP_OFFLINE_NODES ) ) corosync_live_calls = [ mock.call.set_remote_corosync_conf( "mock node communicator", nodes[0], conf_text ), mock.call.set_remote_corosync_conf( "mock node communicator", nodes[1], conf_text ), ] self.assertEqual( len(corosync_live_calls), len(mock_corosync_live.mock_calls) ) self.assert_set_remote_corosync_conf_call( mock_corosync_live.mock_calls[0], nodes[0], conf_text ) self.assert_set_remote_corosync_conf_call( mock_corosync_live.mock_calls[1], nodes[1], conf_text ) assert_report_item_list_equal( self.mock_reporter.report_item_list, [ ( severity.INFO, report_codes.COROSYNC_CONFIG_DISTRIBUTION_STARTED, {} ), ( severity.INFO, report_codes.COROSYNC_CONFIG_ACCEPTED_BY_NODE, {"node": nodes[0]} ), ( severity.ERROR, report_codes.NODE_COMMUNICATION_ERROR_NOT_AUTHORIZED, { "node": nodes[1], "command": "command", "reason" : "HTTP error: 401", }, report_codes.SKIP_OFFLINE_NODES ), ( severity.ERROR, report_codes.COROSYNC_CONFIG_DISTRIBUTION_NODE_ERROR, { "node": nodes[1], }, report_codes.SKIP_OFFLINE_NODES ) ] )