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