From 2f9d5cf583b4b5dd635f386cb9ac07435bd44cc8 Mon Sep 17 00:00:00 2001 From: Ilia Abashin Date: Fri, 25 Aug 2017 14:24:59 +0300 Subject: Heavily refactored all event based scans Restricted real mongo interaction. Still work to do, but it's a good start. Fixed a bug with old subnets not being properly deleted. Change-Id: I5f260e09f0e11a477a47cb031d397a454465123f Signed-off-by: Ilia Abashin --- app/test/event_based_scan/test_router_update.py | 111 ++++++++++++++---------- 1 file changed, 66 insertions(+), 45 deletions(-) (limited to 'app/test/event_based_scan/test_router_update.py') diff --git a/app/test/event_based_scan/test_router_update.py b/app/test/event_based_scan/test_router_update.py index 72e8edd..390bd6e 100644 --- a/app/test/event_based_scan/test_router_update.py +++ b/app/test/event_based_scan/test_router_update.py @@ -7,56 +7,77 @@ # which accompanies this distribution, and is available at # # http://www.apache.org/licenses/LICENSE-2.0 # ############################################################################### -from unittest.mock import MagicMock +from unittest.mock import MagicMock, patch from discover.events.event_router_update import EventRouterUpdate -from discover.fetchers.api.api_fetch_port import ApiFetchPort -from discover.fetchers.cli.cli_fetch_host_vservice import CliFetchHostVservice from test.event_based_scan.test_data.event_payload_router_update import EVENT_PAYLOAD_ROUTER_UPDATE, ROUTER_DOCUMENT, \ - EVENT_PAYLOAD_ROUTER_SET_GATEWAY, EVENT_PAYLOAD_ROUTER_DEL_GATEWAY, ROUTER_VSERVICE, PORTS, NETWORK_DOC, HOST_DOC + EVENT_PAYLOAD_ROUTER_SET_GATEWAY, EVENT_PAYLOAD_ROUTER_DEL_GATEWAY, ROUTER_VSERVICE, PORT, NETWORK_DOC, HOST_DOC from test.event_based_scan.test_event import TestEvent from utils.util import encode_router_id class TestRouterUpdate(TestEvent): - def test_handle_router_update(self): - for values in [EVENT_PAYLOAD_ROUTER_UPDATE, EVENT_PAYLOAD_ROUTER_SET_GATEWAY, EVENT_PAYLOAD_ROUTER_DEL_GATEWAY]: - self.values = values - self.payload = self.values['payload'] - self.router = self.payload['router'] - host_id = self.values['publisher_id'].replace("network.", "", 1) - self.router_id = encode_router_id(host_id, self.router['id']) - self.item_ids.append(self.router_id) - - # add document for testing - self.set_item(ROUTER_DOCUMENT) - self.set_item(PORTS) - self.set_item(NETWORK_DOC) - self.set_item(HOST_DOC) - - # mock the router document. - original_get_vservice = CliFetchHostVservice.get_vservice - CliFetchHostVservice.get_vservice = MagicMock(return_value=ROUTER_VSERVICE) - self.gw_port_id = ROUTER_DOCUMENT['gw_port_id'] - - # mock - original_get_port = ApiFetchPort.get - ApiFetchPort.get = MagicMock(return_value=[PORTS]) - - handler = EventRouterUpdate() - handler.handle(self.env, self.values) - - # reset the methods back - CliFetchHostVservice.get_vservice = original_get_vservice - ApiFetchPort.get = original_get_port - # assert router document - router_doc = self.inv.get_by_id(self.env, self.router_id) - self.assertIsNotNone(router_doc, msg="router_doc not found.") - self.assertEqual(self.router['name'], router_doc['name']) - self.assertEqual(self.router['admin_state_up'], router_doc['admin_state_up']) - - if self.router['external_gateway_info'] is None: - self.assertEqual(router_doc['gw_port_id'], None) - self.assertEqual(router_doc['network'], []) - else: - self.assertIn(self.router['external_gateway_info']['network_id'], router_doc['network']) + + def get_by_id(self, env, object_id): + if object_id == self.router_id: + return ROUTER_DOCUMENT + elif object_id == self.gw_port_id: + return PORT + elif object_id == self.host_id: + return HOST_DOC + else: + return None + + @patch("discover.events.event_router_update.Scanner") + def _do_test(self, + values, + scanner_class_mock): + self.values = values + self.payload = self.values['payload'] + self.router = self.payload['router'] + self.host_id = self.values['publisher_id'].replace("network.", "", 1) + self.router_id = encode_router_id(self.host_id, self.router['id']) + self.gw_port_id = ROUTER_DOCUMENT['gw_port_id'] + + scanner_mock = scanner_class_mock.return_value + + self.inv.get_by_id.side_effect = self.get_by_id + + res = EventRouterUpdate().handle(self.env, self.values) + + self.assertTrue(res.result) + self.assertTrue(scanner_mock.scan_cliques.called) + + @patch("discover.events.event_router_update.EventPortDelete") + def test_handle_router_update(self, + event_port_delete_class_mock): + event_port_delete_mock = event_port_delete_class_mock.return_value + self._do_test(EVENT_PAYLOAD_ROUTER_UPDATE) + event_port_delete_mock.delete_port\ + .assert_called_with(self.env, self.gw_port_id) + + @patch("discover.events.event_router_update.FindLinksForVserviceVnics") + @patch("discover.events.event_router_update.EventRouterAdd") + @patch("discover.events.event_router_update.CliFetchHostVservice") + def test_handle_router_set_gateway(self, + cli_fetch_vservice_class_mock, + event_router_add_class_mock, + find_links_class_mock): + cli_fetch_vservice_mock = cli_fetch_vservice_class_mock.return_value + cli_fetch_vservice_mock.get_vservice.return_value = ROUTER_VSERVICE + event_router_add_mock = event_router_add_class_mock.return_value + find_links_mock = find_links_class_mock.return_value + self._do_test(EVENT_PAYLOAD_ROUTER_SET_GATEWAY) + cli_fetch_vservice_mock.get_vservice.assert_called_with(self.host_id, + self.router_id) + self.assertTrue(event_router_add_mock.add_children_documents.called) + self.assertTrue(find_links_mock.add_links.called) + + @patch("discover.events.event_router_update.EventPortDelete") + def test_handle_router_delete_gateway(self, + event_port_delete_class_mock): + event_port_delete_mock = event_port_delete_class_mock.return_value + self._do_test(EVENT_PAYLOAD_ROUTER_DEL_GATEWAY) + event_port_delete_mock.delete_port \ + .assert_called_with(self.env, self.gw_port_id) + -- cgit 1.2.3-korg