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_interface_add.py | 96 +++++++++++++------------ 1 file changed, 49 insertions(+), 47 deletions(-) (limited to 'app/test/event_based_scan/test_interface_add.py') diff --git a/app/test/event_based_scan/test_interface_add.py b/app/test/event_based_scan/test_interface_add.py index a9eaac8..04a1982 100644 --- a/app/test/event_based_scan/test_interface_add.py +++ b/app/test/event_based_scan/test_interface_add.py @@ -7,68 +7,70 @@ # which accompanies this distribution, and is available at # # http://www.apache.org/licenses/LICENSE-2.0 # ############################################################################### -from unittest.mock import MagicMock +import copy +from unittest.mock import MagicMock, patch, Mock +from discover.events.event_base import EventResult from discover.events.event_interface_add import EventInterfaceAdd -from discover.fetchers.api.api_access import ApiAccess -from discover.fetchers.api.api_fetch_port import ApiFetchPort -from discover.fetchers.cli.cli_fetch_host_vservice import CliFetchHostVservice -from discover.fetchers.cli.cli_fetch_vservice_vnics import CliFetchVserviceVnics -from discover.find_links_for_vservice_vnics import FindLinksForVserviceVnics -from test.event_based_scan.test_data.event_payload_interface_add import EVENT_PAYLOAD_INTERFACE_ADD, NETWORK_DOC, \ +from test.event_based_scan.test_data.event_payload_interface_add import \ + EVENT_PAYLOAD_INTERFACE_ADD, NETWORK_DOC, \ EVENT_PAYLOAD_REGION, PORT_DOC, ROUTER_DOCUMENT, HOST, VNIC_DOCS from test.event_based_scan.test_event import TestEvent +from test.event_based_scan.util import TestRegions from utils.util import encode_router_id class TestInterfaceAdd(TestEvent): - def test_handle_interface_add(self): - self.values = EVENT_PAYLOAD_INTERFACE_ADD - self.payload = self.values['payload'] - self.interface = self.payload['router_interface'] - - self.port_id = self.interface['port_id'] - self.host_id = self.values["publisher_id"].replace("network.", "", 1) - self.router_id = encode_router_id(self.host_id, self.interface['id']) - self.set_item(NETWORK_DOC) - ApiAccess.regions = EVENT_PAYLOAD_REGION + def get_by_id(self, env, object_id): + interface = self.values["payload"]["router_interface"] + host_id = self.values["publisher_id"].replace("network.", "", 1) + router_id = encode_router_id(host_id, interface['id']) - # mock port data, - original_api_get_port = ApiFetchPort.get - ApiFetchPort.get = MagicMock(return_value=[PORT_DOC]) - self.item_ids.append(PORT_DOC['id']) + if object_id == host_id: + return HOST + elif object_id == router_id: + return ROUTER_DOCUMENT + elif object_id == ROUTER_DOCUMENT["gw_port_id"]: + return PORT_DOC + else: + return None - # set router document - self.set_item(ROUTER_DOCUMENT) - - # set host document - self.set_item(HOST) + @patch("discover.events.event_interface_add.FindLinksForVserviceVnics") + @patch("discover.events.event_interface_add.Scanner") + @patch("discover.events.event_interface_add.CliFetchHostVservice") + @patch("discover.events.event_interface_add.EventPortAdd") + @patch("discover.events.event_interface_add.EventSubnetAdd") + def test_handle_interface_add(self, subnet_add_class_mock, + port_add_class_mock, + fetcher_class_mock, + scanner_class_mock, + find_links_class_mock): + self.values = EVENT_PAYLOAD_INTERFACE_ADD - # mock add_links - original_add_links = FindLinksForVserviceVnics.add_links - FindLinksForVserviceVnics.add_links = MagicMock() + self.inv.get_by_field.return_value = NETWORK_DOC + self.inv.get_by_id.side_effect = self.get_by_id - # mock get_vservice - original_get_vservice = CliFetchHostVservice.get_vservice - CliFetchHostVservice.get_vservice = MagicMock(return_value=ROUTER_DOCUMENT) + subnet_add_mock = subnet_add_class_mock.return_value + subnet_add_mock.add_port_document.return_value = PORT_DOC - # mock handle_vservice - original_handle_service = CliFetchVserviceVnics.handle_service - CliFetchVserviceVnics.handle_service = MagicMock(return_value=VNIC_DOCS) + port_add_mock = port_add_class_mock.return_value + port_add_mock.add_vnic_document = \ + Mock(return_value=EventResult(result=True)) - # handle the notification - EventInterfaceAdd().handle(self.env, self.values) + fetcher_mock = fetcher_class_mock.return_value + fetcher_mock.get_vservice.return_value = ROUTER_DOCUMENT + fetcher_mock.handle_service.return_value = VNIC_DOCS - # reset the method. - ApiFetchPort.get = original_api_get_port - FindLinksForVserviceVnics.add_links = original_add_links - CliFetchHostVservice.get_vservice = original_get_vservice - CliFetchVserviceVnics.handle_service = original_handle_service + scanner_mock = scanner_class_mock.return_value + find_links_mock = find_links_class_mock.return_value - # check port and router document - port_doc = self.inv.get_by_id(self.env, self.port_id) - self.assertIsNotNone(port_doc) + with patch("discover.fetcher.FullLogger"): + with TestRegions(EVENT_PAYLOAD_REGION): + res = EventInterfaceAdd().handle(self.env, self.values) - router_doc = self.inv.get_by_id(self.env, self.router_id) - self.assertIn(NETWORK_DOC['id'], router_doc['network']) + self.assertTrue(res.result) + self.inv.set.assert_called_with(ROUTER_DOCUMENT) + self.assertTrue(port_add_mock.add_vnic_document.called) + self.assertTrue(scanner_mock.scan_cliques.called) + self.assertTrue(find_links_mock.add_links.called) -- cgit 1.2.3-korg