aboutsummaryrefslogtreecommitdiffstats
path: root/app/test/event_based_scan/test_port_add.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/test/event_based_scan/test_port_add.py')
-rw-r--r--app/test/event_based_scan/test_port_add.py97
1 files changed, 51 insertions, 46 deletions
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)