aboutsummaryrefslogtreecommitdiffstats
path: root/app/test/event_based_scan/test_router_update.py
diff options
context:
space:
mode:
authorIlia Abashin <abashinos@gmail.com>2017-08-25 14:24:59 +0300
committerIlia Abashin <abashinos@gmail.com>2017-08-25 14:29:28 +0300
commit2f9d5cf583b4b5dd635f386cb9ac07435bd44cc8 (patch)
tree2c025d24aff9bb0192e6d221a4e989e327c72e7c /app/test/event_based_scan/test_router_update.py
parentde9f324ff628a6d9e870f06e6e216f65382a978b (diff)
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 <abashinos@gmail.com>
Diffstat (limited to 'app/test/event_based_scan/test_router_update.py')
-rw-r--r--app/test/event_based_scan/test_router_update.py111
1 files changed, 66 insertions, 45 deletions
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)
+