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_port_add.py | 97 ++++++++++++++++-------------- 1 file changed, 51 insertions(+), 46 deletions(-) (limited to 'app/test/event_based_scan/test_port_add.py') diff --git a/app/test/event_based_scan/test_port_add.py b/app/test/event_based_scan/test_port_add.py index 8bf2553..58926a9 100644 --- a/app/test/event_based_scan/test_port_add.py +++ b/app/test/event_based_scan/test_port_add.py @@ -7,7 +7,7 @@ # 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_port_add import EventPortAdd from discover.fetchers.api.api_fetch_host_instances import ApiFetchHostInstances @@ -15,61 +15,66 @@ from discover.fetchers.cli.cli_fetch_instance_vnics import CliFetchInstanceVnics from discover.find_links_for_instance_vnics import FindLinksForInstanceVnics from discover.find_links_for_vedges import FindLinksForVedges from discover.scanner import Scanner -from test.event_based_scan.test_data.event_payload_port_add import EVENT_PAYLOAD_PORT_INSTANCE_ADD, NETWORK_DOC, \ - INSTANCE_DOC, INSTANCES_ROOT, VNIC_DOCS, INSTANCE_DOCS +from test.event_based_scan.test_data.event_payload_port_add import \ + EVENT_PAYLOAD_PORT_INSTANCE_ADD, NETWORK_DOC, \ + INSTANCE_DOC, INSTANCES_ROOT, VNIC_DOCS, INSTANCE_DOCS, PORTS_FOLDER, \ + PORT_DOC from test.event_based_scan.test_event import TestEvent class TestPortAdd(TestEvent): - def test_handle_port_add(self): + + def get_by_id(self, env, object_id): + if object_id == self.network_id: + return NETWORK_DOC + elif object_id == "{}-ports".format(self.network_id): + return PORTS_FOLDER + elif object_id == self.instance_id: + return INSTANCE_DOC + elif object_id == "{}-instances".format(self.host_id): + return INSTANCES_ROOT + elif [call for call in self.inv.set.call_args_list + if call[0][0].get('type') == 'port']: + self.port_set = True + return PORT_DOC + else: + return None + + @patch("discover.events.event_port_add.Scanner") + @patch("discover.events.event_port_add.FindLinksForVedges") + @patch("discover.events.event_port_add.FindLinksForInstanceVnics") + @patch("discover.events.event_port_add.CliFetchInstanceVnics") + @patch("discover.events.event_port_add.ApiFetchHostInstances") + def test_handle_port_add(self, + api_fetch_instances_class_mock, + cli_fetch_instances_class_mock, + fl_for_vnics_class_mock, + fl_for_vedges_class_mock, + scanner_class_mock): self.values = EVENT_PAYLOAD_PORT_INSTANCE_ADD self.payload = self.values['payload'] self.port = self.payload['port'] - self.port_id = self.port['id'] - self.item_ids.append(self.port_id) - - # prepare data for test - self.set_item(NETWORK_DOC) - self.set_item(INSTANCE_DOC) - self.set_item(INSTANCES_ROOT) - self.item_ids.append(VNIC_DOCS[0]['id']) - - # mock methods - original_get_instance = ApiFetchHostInstances.get - ApiFetchHostInstances.get = MagicMock(return_value=INSTANCE_DOCS) - - original_get_vnic = CliFetchInstanceVnics.get - CliFetchInstanceVnics.get = MagicMock(return_value=VNIC_DOCS) - - original_find_link_instance = FindLinksForInstanceVnics.add_links - original_find_link_vedge = FindLinksForVedges.add_links - original_scan = Scanner.scan_cliques + self.host_id = self.port['binding:host_id'] + self.instance_id = INSTANCE_DOC['id'] + self.network_id = NETWORK_DOC['id'] - FindLinksForInstanceVnics.add_links = MagicMock(return_value=None) - FindLinksForVedges.add_links = MagicMock(return_value=None) - Scanner.scan_cliques = MagicMock(return_value=None) + self.inv.get_by_id.side_effect = self.get_by_id - # add network document - EventPortAdd().handle(self.env, self.values) + api_fetch_instances_mock = api_fetch_instances_class_mock.return_value + api_fetch_instances_mock.get.return_value = INSTANCE_DOCS - # check network document - port_document = self.inv.get_by_id(self.env, self.port_id) - self.assertIsNotNone(port_document) - self.assertEqual(port_document["name"], self.port['name']) + cli_fetch_instances_mock = cli_fetch_instances_class_mock.return_value + cli_fetch_instances_mock.get.return_value = VNIC_DOCS - instance = self.inv.get_by_id(self.env, INSTANCE_DOC['id']) - self.assertEqual(instance["network_info"][0]['devname'], - INSTANCE_DOCS[0]["network_info"][0]['devname']) - self.assertEqual(instance["network_info"], - INSTANCE_DOCS[0]["network_info"]) - self.assertEqual(instance["network"], INSTANCE_DOCS[0]["network"]) + scanner_mock = scanner_class_mock.return_value + fl_for_vnics_mock = fl_for_vnics_class_mock.return_value + fl_for_vedges_mock = fl_for_vedges_class_mock.return_value - vnic = self.inv.get_by_field(self.env, 'vnic', 'mac_address', - self.port['mac_address']) - self.assertIsNotNone(vnic) + res = EventPortAdd().handle(self.env, self.values) - FindLinksForVedges.add_links = original_find_link_vedge - FindLinksForInstanceVnics.add_links = original_find_link_instance - Scanner.scan_cliques = original_scan - CliFetchInstanceVnics.get = original_get_vnic - ApiFetchHostInstances.get = original_get_instance + self.assertTrue(res.result) + # Assert that port has been added to db + self.assertTrue(self.port_set) + self.assertTrue(fl_for_vnics_mock.add_links.called) + self.assertTrue(fl_for_vedges_mock.add_links.called) + self.assertTrue(scanner_mock.scan_cliques.called) -- cgit 1.2.3-korg