neutron/neutron/tests/unit/plugins/ml2/drivers/cisco/apic/test_cisco_apic_sync.py

79 lines
3.3 KiB
Python

# Copyright (c) 2014 Cisco Systems
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import sys
import mock
sys.modules["apicapi"] = mock.Mock()
from neutron.plugins.ml2.drivers.cisco.apic import apic_sync
from neutron.tests import base
LOOPING_CALL = 'neutron.openstack.common.loopingcall.FixedIntervalLoopingCall'
GET_PLUGIN = 'neutron.manager.NeutronManager.get_plugin'
GET_ADMIN_CONTEXT = 'neutron.context.get_admin_context'
L2_DB = 'neutron.plugins.ml2.db.get_locked_port_and_binding'
NETWORK_CONTEXT = 'neutron.plugins.ml2.driver_context.NetworkContext'
SUBNET_CONTEXT = 'neutron.plugins.ml2.driver_context.SubnetContext'
PORT_CONTEXT = 'neutron.plugins.ml2.driver_context.PortContext'
class TestCiscoApicSync(base.BaseTestCase):
def setUp(self):
super(TestCiscoApicSync, self).setUp()
self.driver = mock.Mock()
# Patch looping call
loopingcall_c = mock.patch(LOOPING_CALL).start()
self.loopingcall = mock.Mock()
loopingcall_c.return_value = self.loopingcall
# Patch get plugin
self.get_plugin = mock.patch(GET_PLUGIN).start()
self.get_plugin.return_value = mock.Mock()
# Patch get admin context
self.get_admin_context = mock.patch(GET_ADMIN_CONTEXT).start()
self.get_admin_context.return_value = mock.Mock()
# Patch get locked port and binding
self.get_locked_port_and_binding = mock.patch(L2_DB).start()
self.get_locked_port_and_binding.return_value = [mock.Mock()] * 2
# Patch driver context
mock.patch(NETWORK_CONTEXT).start()
mock.patch(SUBNET_CONTEXT).start()
mock.patch(PORT_CONTEXT).start()
def test_sync_base(self):
sync = apic_sync.ApicBaseSynchronizer(self.driver)
sync.core_plugin = mock.Mock()
sync.core_plugin.get_networks.return_value = [{'id': 'net'}]
sync.core_plugin.get_subnets.return_value = [{'id': 'sub'}]
sync.core_plugin.get_ports.return_value = [{'id': 'port',
'network_id': 'net'}]
sync.sync_base()
self.assertEqual(1, self.driver.create_network_postcommit.call_count)
self.assertEqual(1, self.driver.create_subnet_postcommit.call_count)
self.assertEqual(1, self.get_locked_port_and_binding.call_count)
self.assertEqual(1, self.driver.create_port_postcommit.call_count)
def test_sync_router(self):
sync = apic_sync.ApicRouterSynchronizer(self.driver)
sync.core_plugin = mock.Mock()
sync.core_plugin.get_ports.return_value = [{'id': 'port',
'network_id': 'net',
'device_id': 'dev'}]
sync.sync_router()
self.assertEqual(
1, self.driver.add_router_interface_postcommit.call_count)