Merge "Jira: DAISY-490 we can not change the segment type of DATAPLANE, when it is in use." into stable/mitaka

This commit is contained in:
Jenkins
2017-02-16 01:46:31 +00:00
committed by Gerrit Code Review
9 changed files with 762 additions and 3 deletions

View File

@@ -522,6 +522,29 @@ class Controller(controller.BaseController):
raise HTTPBadRequest(explanation=e.msg, request=req)
return dict(networks=networks)
def _is_dataplane_in_use(self, context, network_meta,
network_id, orig_segment_type):
if network_meta.get('custom_name', None):
network_name = network_meta.get('custom_name', None)
else:
network_name = network_meta.get('name', None)
update_segment_type = network_meta.get('segmentation_type')
try:
assigned_network = \
registry.get_assigned_networks_data_by_network_id(
context, network_id)
except exception.NotFound as e:
msg = (_("Failed to find assigned network, %s") %
utils.exception_to_str(e))
LOG.error(msg)
raise HTTPNotFound(explanation=msg)
if assigned_network:
if update_segment_type != orig_segment_type:
msg = (_("DATAPLANE %s is in use, can not "
"change segment type ") % network_name)
LOG.error(msg)
raise HTTPForbidden(explanation=msg)
@utils.mutating
def update_network(self, req, network_id, network_meta):
"""
@@ -618,6 +641,13 @@ class Controller(controller.BaseController):
msg = (_('Networks with the same vlan_id must '
'have the same cidr'))
raise HTTPBadRequest(explanation=msg)
dataplane_type = network_meta.get('network_type',
orig_network_meta['network_type'])
if dataplane_type == 'DATAPLANE':
orig_segment_type = orig_network_meta.get('segmentation_type')
self._is_dataplane_in_use(req.context,
network_meta, network_id,
orig_segment_type)
if network_meta.get('ip_ranges', None) and \
eval(network_meta['ip_ranges']):

View File

@@ -4223,6 +4223,13 @@ def network_destroy(context, network_id):
return network_ref
def get_assigned_networks_by_network_id(context, network_id,
session=None, force_show_deleted=False):
# get the assign networks by network id
assign_networks = \
_get_assigned_networks_by_network_id(context, network_id, session=session)
return assign_networks
def delete_network_ip_range(context, network_id):
session = get_session()
with session.begin():

View File

@@ -383,6 +383,11 @@ def init(mapper):
action="get_network",
conditions=dict(method=["GET"]))
mapper.connect("/assigned_networks/{network_id}",
controller=networks_resource,
action="get_assigned_networks_by_network_id",
conditions=dict(method=["GET"]))
mapper.connect("/networks/update_phyname_of_network",
controller=networks_resource,
action="update_phyname_of_network",

View File

@@ -354,6 +354,28 @@ class Controller(object):
network_data = dict(network=network_data)
return network_data
@utils.mutating
def get_assigned_networks_by_network_id(self, req, network_id):
"""Return assigned network by the given network id."""
try:
assigned_network = \
self.db_api.get_assigned_networks_by_network_id(
req.context, network_id)
msg = "Successfully retrieved " \
"network %(network_id)s" % {'network_id': network_id}
LOG.debug(msg)
if 'network' not in assigned_network:
assigned_network = dict(network=assigned_network)
return assigned_network
except exception.NotFound:
msg = _LI("Network %(network_id)s "
"not found") % {'network_id': network_id}
LOG.info(msg)
raise exc.HTTPNotFound()
except Exception:
LOG.exception(_LE("Unable to show network %s") % network_id)
raise
@utils.mutating
def update_network(self, req, network_id, body):
"""Updates an existing network with the registry.

View File

@@ -569,6 +569,11 @@ def delete_network_metadata(context, network_id):
return c.delete_network(network_id)
def get_assigned_networks_data_by_network_id(context, network_id):
c = get_registry_client(context)
return c.get_assigned_networks_by_network_id(network_id)
def get_network_metadata(context, network_id):
c = get_registry_client(context)
return c.get_networks(network_id)

8
code/daisy/daisy/registry/client/v1/client.py Normal file → Executable file
View File

@@ -1069,6 +1069,14 @@ class RegistryClient(BaseClient):
data = jsonutils.loads(res.read())
return data['network']
def get_assigned_networks_by_network_id(self, network_id):
"""
Get assigend networks about an network
"""
res = self.do_request("GET", "/assigned_networks/%s" % network_id)
data = jsonutils.loads(res.read())
return data['network']
def get_networks_detailed(self, cluster_id, **kwargs):
"""
Returns a list of detailed host data mappings from Registry

View File

@@ -0,0 +1,609 @@
from daisy.api.v1 import networks
from daisy.common import exception
from daisy.context import RequestContext
import daisy.registry.client.v1.api as registry
from daisy import test
import mock
from oslo_serialization import jsonutils
import webob
network_list = [{u'alias': None,
u'capability': u'high',
u'cidr': u'192.168.1.1/24',
u'cluster_id': u'63d26456-9975-4d7c-a400-45a1ae64b9f3',
u'created_at': u'2016-08-31T02:40:17.000000',
u'deleted': False,
u'deleted_at': None,
u'description': u'',
u'gateway': u'',
u'gre_id_end': None,
u'gre_id_start': None,
u'id': u'8f7cc123-08d6-4424-9352-383bc5890bb6',
u'ip': None,
u'ip_ranges': [],
u'ml2_type': None,
u'mtu': 1500,
u'name': u'PUBLICAPI',
u'network_type': u'PUBLICAPI',
u'physnet_name': u'physnet_enp132s0f1',
u'segmentation_type': None,
u'type': u'default',
u'updated_at': u'2016-08-31T02:41:16.000000',
u'vlan_end': 4094,
u'vlan_id': None,
u'vlan_start': 1,
u'vni_end': None,
u'vni_start': None},
{u'alias': None,
u'capability': u'high',
u'cidr': u'192.168.1.1/24',
u'cluster_id': u'63d26456-9975-4d7c-a400-45a1ae64b9f3',
u'created_at': u'2016-08-31T02:40:17.000000',
u'deleted': False,
u'deleted_at': None,
u'description': u'',
u'gateway': None,
u'gre_id_end': None,
u'gre_id_start': None,
u'id': u'79052a8a-b51f-461a-bdbc-c36bc69d6126',
u'ip': None,
u'ip_ranges': [],
u'ml2_type': u'ovs',
u'mtu': 1500,
u'name': u'physnet1',
u'network_type': u'DATAPLANE',
u'physnet_name': u'physnet_enp132s0f2',
u'segmentation_type': u'vlan',
u'type': u'default',
u'updated_at': u'2016-08-31T02:41:38.000000',
u'vlan_end': 4094,
u'vlan_id': None,
u'vlan_start': 1,
u'vni_end': None,
u'vni_start': None},
{u'alias': None,
u'capability': u'high',
u'cidr': u'199.168.1.1/24',
u'cluster_id': u'63d26456-9975-4d7c-a400-45a1ae64b9f3',
u'created_at': u'2016-08-31T02:40:17.000000',
u'deleted': False,
u'deleted_at': None,
u'description': u'',
u'gateway': u'',
u'gre_id_end': None,
u'gre_id_start': None,
u'id': u'1fafc035-d945-4cf1-807a-86d2a6c2a65c',
u'ip': None,
u'ip_ranges': [],
u'ml2_type': None,
u'mtu': 1500,
u'name': u'MANAGEMENT',
u'network_type': u'MANAGEMENT',
u'physnet_name': u'physnet_enp132s0f0',
u'segmentation_type': None,
u'type': u'default',
u'updated_at': u'2016-08-31T02:41:38.000000',
u'vlan_end': 4094,
u'vlan_id': None,
u'vlan_start': 1,
u'vni_end': None,
u'vni_start': None}]
class TestNetworkApi(test.TestCase):
def setUp(self):
super(TestNetworkApi, self).setUp()
self.controller = networks.Controller()
@mock.patch('daisy.registry.client.v1.api.'
'get_assigned_networks_data_by_network_id')
def test_update_network(self, get_assigned_networks_data_by_network_id):
self.controller.get_network_meta_or_404 = \
mock.Mock(return_value=network_list[0])
registry.get_networks_detail = mock.Mock(return_value=network_list)
req = webob.Request.blank('/')
req.context = RequestContext(is_admin=True,
user='fake user',
tenant='fake tenamet')
network_id = "123"
network_meta = {'network_type': 'DATAPLANE',
'cluster_id': 'test', 'gateway': '192.168.1.1'}
registry.update_network_metadata = mock.Mock(return_value=network_meta)
get_assigned_networks_data_by_network_id.return_value = []
update_network = self.controller.update_network(
req, network_id, network_meta)
self.assertEqual(network_meta['network_type'],
update_network['network_meta']['network_type'])
def test_add_network(self):
req = webob.Request.blank('/')
req.context = RequestContext(is_admin=True,
user='fake user',
tenant='fake tenamet')
network_meta = {'network_type': 'DATAPLANE',
'gateway': '192.168.1.1', 'name': 'pysnet1'}
registry.add_network_metadata = mock.Mock(return_value=network_meta)
add_network = self.controller.add_network(req, network_meta)
self.assertEqual(network_meta['network_type'],
add_network['network_meta']['network_type'])
def test_verify_uniqueness_of_network_custom_name(self):
req = webob.Request.blank('/')
req.context = RequestContext(is_admin=True,
user='fake user',
tenant='fake tenamet')
networks = {u'networks': [
{u'name': u'PUBLICAPI',
u'network_type': u'PUBLICAPI',
u'custom_name': u'publicapi'},
{u'name': u'physnet1',
u'network_type': u'DATAPLANE',
u'custom_name': u'physneta'},
{u'name': u'MANAGEMENT',
u'network_type': u'MANAGEMENT',
u'custom_name': u'management'}]}
network_meta = {u'custom_name': u'management'}
self.assertRaises(
webob.exc.HTTPConflict,
self.controller._verify_uniqueness_of_network_custom_name,
req, networks, network_meta)
@mock.patch('daisy.registry.client.v1.api.add_network_metadata')
@mock.patch('daisy.registry.client.v1.api.get_networks_detail')
@mock.patch('daisy.registry.client.v1.api.get_cluster_metadata')
def test_add_network_with_no_exist_custom_name(self,
get_cluster,
get_networks,
add_network):
req = webob.Request.blank('/')
req.context = RequestContext(is_admin=True,
user='fake user',
tenant='fake tenamet')
network_meta = {'cluster_id': '1',
'network_type': 'MANAGEMENT',
'custom_name': 'management1',
'name': 'MANAGEMENT1'}
cluster = {'id': '1',
'deleted': 0}
networks = [{'name': 'PUBLICAPI',
'network_type': 'PUBLICAPI',
'custom_name': None},
{'name': 'physnet1',
'network_type': 'DATAPLANE',
'custom_name': 'physnet2'}]
return_network = {'name': 'MANAGEMENT1',
'network_type': 'MANAGEMENT',
'custom_name': 'management1'}
get_cluster.return_value = cluster
get_networks.return_value = networks
add_network.return_value = return_network
network = self.controller.add_network(req, network_meta)
self.assertEqual('management1',
network['network_meta']['custom_name'])
@mock.patch('daisy.registry.client.v1.api.get_networks_detail')
@mock.patch('daisy.registry.client.v1.api.get_cluster_metadata')
def test_add_network_with_exist_custom_name(self,
get_cluster,
get_networks):
req = webob.Request.blank('/')
req.context = RequestContext(is_admin=True,
user='fake user',
tenant='fake tenamet')
network_meta = {'cluster_id': '1',
'network_type': 'MANAGEMENT',
'custom_name': 'management1',
'name': 'MANAGEMENT1'}
cluster = {'id': '1',
'deleted': 0}
networks_with_same_custom_name = [{'name': 'PUBLICAPI',
'network_type': 'PUBLICAPI',
'custom_name': None},
{'name': 'physnet1',
'network_type': 'DATAPLANE'},
{'name': 'STORAGE',
'network_type': 'STORAGE',
'custom_name': 'management1'}]
get_cluster.return_value = cluster
get_networks.return_value = networks_with_same_custom_name
self.assertRaises(webob.exc.HTTPConflict, self.controller.add_network,
req, network_meta)
@mock.patch('daisy.registry.client.v1.api.update_network_metadata')
@mock.patch('daisy.registry.client.v1.api.get_networks_detail')
@mock.patch('daisy.registry.client.v1.api.get_cluster_metadata')
@mock.patch('daisy.registry.client.v1.api.get_network_metadata')
def test_update_network_with_no_exist_custom_name(self,
get_network_meta,
get_cluster_meta,
get_networks_detail,
update_network):
req = webob.Request.blank('/')
req.context = RequestContext(is_admin=True,
user='fake user',
tenant='fake tenamet')
network_id = '1'
network_meta = {'custom_name': 'publicapi1'}
orig_network_meta = {'deleted': False,
'cluster_id': '1',
'id': '1',
'network_type': 'PUBLICAPI',
'cidr': '192.168.1.1/24',
'vlan_id': None,
'custom_name': 'publicapi',
'gateway': None}
cluster_meta = {'id': '1',
'deleted': False}
networks_detail = [{'deleted': False,
'cluster_id': '1',
'id': '1',
'network_type': 'PUBLICAPI',
'cidr': '192.168.1.1/24',
'vlan_id': None,
'custom_name': 'publicapi'},
{'deleted': False,
'cluster_id': '1',
'id': '2',
'network_type': 'MANAGEMENT',
'cidr': '192.168.1.1/24',
'vlan_id': None,
'custom_name': 'management'},
{'deleted': False,
'cluster_id': '1',
'id': '3',
'network_type': 'DATAPLANE',
'cidr': None,
'vlan_id': None,
'custom_name': 'physnet'}]
update_network_meta = {'deleted': False,
'cluster_id': '1',
'id': '1',
'network_type': 'PUBLICAPI',
'cidr': '192.168.1.1/24',
'vlan_id': None,
'custom_name': 'publicapi1'}
get_network_meta.return_value = orig_network_meta
get_cluster_meta.return_value = cluster_meta
get_networks_detail.return_value = networks_detail
update_network.return_value = update_network_meta
network_meta = self.controller.update_network(req, network_id,
network_meta)
self.assertEqual('publicapi1',
network_meta['network_meta']['custom_name'])
@mock.patch('daisy.registry.client.v1.api.update_network_metadata')
@mock.patch('daisy.registry.client.v1.api.get_networks_detail')
@mock.patch('daisy.registry.client.v1.api.get_cluster_metadata')
@mock.patch('daisy.registry.client.v1.api.get_network_metadata')
def test_update_network_with_original_custom_name(self,
get_network_meta,
get_cluster_meta,
get_networks_detail,
update_network):
req = webob.Request.blank('/')
req.context = RequestContext(is_admin=True,
user='fake user',
tenant='fake tenamet')
network_id = '1'
network_meta = {'custom_name': 'publicapi'}
orig_network_meta = {'deleted': False,
'cluster_id': '1',
'id': '1',
'network_type': 'PUBLICAPI',
'cidr': '192.168.1.1/24',
'vlan_id': None,
'custom_name': 'publicapi',
'gateway': None}
cluster_meta = {'id': '1',
'deleted': False}
networks_detail = [{'deleted': False,
'cluster_id': '1',
'id': '1',
'network_type': 'PUBLICAPI',
'cidr': '192.168.1.1/24',
'vlan_id': None,
'custom_name': 'publicapi'}]
update_network_meta = {'deleted': False,
'cluster_id': '1',
'id': '1',
'network_type': 'PUBLICAPI',
'cidr': '192.168.1.1/24',
'vlan_id': None,
'custom_name': 'publicapi'}
get_network_meta.return_value = orig_network_meta
get_cluster_meta.return_value = cluster_meta
get_networks_detail.return_value = networks_detail
update_network.return_value = update_network_meta
network_meta = self.controller.update_network(req, network_id,
network_meta)
self.assertEqual('publicapi',
network_meta['network_meta']['custom_name'])
@mock.patch('daisy.registry.client.v1.api.get_networks_detail')
@mock.patch('daisy.registry.client.v1.api.get_cluster_metadata')
@mock.patch('daisy.registry.client.v1.api.get_network_metadata')
def test_update_another_network_with_same_custom_name(self,
get_network_meta,
get_cluster_meta,
get_networks_detail):
req = webob.Request.blank('/')
req.context = RequestContext(is_admin=True,
user='fake user',
tenant='fake tenamet')
network_id = '2'
network_meta = {'custom_name': 'publicapi'}
orig_network_meta = {'deleted': False,
'cluster_id': '1',
'id': '1',
'network_type': 'PUBLICAPI',
'cidr': '192.168.1.1/24',
'vlan_id': None,
'custom_name': 'publicapi',
'gateway': None}
cluster_meta = {'id': '1',
'deleted': False}
networks_detail = [{'deleted': False,
'cluster_id': '1',
'id': '1',
'network_type': 'PUBLICAPI',
'cidr': '192.168.1.1/24',
'vlan_id': None,
'custom_name': 'publicapi'},
{'deleted': False,
'cluster_id': '1',
'id': '2',
'network_type': 'MANAGEMENT',
'cidr': '192.168.1.1/24',
'vlan_id': None,
'custom_name': 'management'}]
get_network_meta.return_value = orig_network_meta
get_cluster_meta.return_value = cluster_meta
get_networks_detail.return_value = networks_detail
self.assertRaises(webob.exc.HTTPConflict,
self.controller.update_network,
req, network_id, network_meta)
@mock.patch('daisy.registry.client.v1.api.'
'get_assigned_networks_data_by_network_id')
@mock.patch('daisy.registry.client.v1.api.get_networks_detail')
@mock.patch('daisy.registry.client.v1.api.get_cluster_metadata')
@mock.patch('daisy.registry.client.v1.api.get_network_metadata')
def test_update_network_with_forbidden_change_segment_type(
self, get_network_meta, get_cluster_meta,
get_networks_detail,
get_assigned_networks_data_by_network_id):
req = webob.Request.blank('/')
req.context = RequestContext(is_admin=True,
user='fake user',
tenant='fake tenamet')
network_id = 'cf531581-a283-41dd-9e4e-4b98454d54e7'
network_meta = {
'cluster_id': '1',
'custom_name': '',
'description': '',
'name': 'physnet1',
'network_type': 'DATAPLANE',
'segmentation_type': 'vlan',
'vlan_end': '4090',
'vlan_start': '1'}
orig_network_meta = {'cidr': '1.2.3.4/24',
'vlan_id': None,
'cluster_id': '1',
'deleted': False,
'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7',
'network_type': 'DATAPLANE',
'segmentation_type': 'vxlan',
'type': 'default'}
cluster_meta = {'id': '1',
'deleted': False}
networks_detail = [
{
'alias': None,
'capability': 'high',
'cidr': '1.2.3.4/24',
'cluster_id': '1',
'custom_name': '',
'deleted': False,
'gateway': '1.2.3.4',
'gre_id_end': None,
'gre_id_start': None,
'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7',
'ip': None,
'ip_ranges': [
{
'end': '1.2.3.6',
'start': '1.2.3.4'}],
'ml2_type': 'ovs',
'mt': 1500,
'name': 'physnet1',
'network_type': 'DATAPLANE',
'physnet_name': 'physnet_eth1',
'segmentation_type': 'vxlan',
'type': 'default',
'updated_at': '2015-05-07T04:26:28.000000',
'vlan_end': 4090,
'vlan_id': None,
'vlan_start': 1,
'vni_end': 20,
'vni_start': 1}]
assigned_network = [
{
'deleted': False,
'id': '658333cf-93d4-499b-8bff-e8bd6bcbb5f1',
'interface_id': '4de86a45-af28-4362-b5f0-afeee235786f',
'ip': '1.2.3.4',
'mac': 'fa:16:3e:7b:1a:95',
'network_id': 'cf531581-a283-41dd-9e4e-4b98454d54e7',
'updated_at': '2015-05-07T04:01:59.000000',
'vswitch_type': 'dvs'}]
get_network_meta.return_value = orig_network_meta
get_cluster_meta.return_value = cluster_meta
get_networks_detail.return_value = networks_detail
get_assigned_networks_data_by_network_id.return_value = \
assigned_network
self.assertRaises(webob.exc.HTTPForbidden,
self.controller.update_network,
req, network_id, network_meta)
@mock.patch('daisy.registry.client.v1.api.'
'get_assigned_networks_data_by_network_id')
@mock.patch('daisy.registry.client.v1.api.get_networks_detail')
@mock.patch('daisy.registry.client.v1.api.get_cluster_metadata')
@mock.patch('daisy.registry.client.v1.api.get_network_metadata')
def test_update_network_with_assigned_network_not_found(
self, get_network_meta, get_cluster_meta,
get_networks_detail,
get_assigned_networks_data_by_network_id):
req = webob.Request.blank('/')
req.context = RequestContext(is_admin=True,
user='fake user',
tenant='fake tenamet')
network_id = 'cf531581-a283-41dd-9e4e-4b98454d54e7'
network_meta = {'cluster_id': '1',
'custom_name': '',
'description': '',
'name': 'physnet1',
'network_type': 'DATAPLANE',
'segmentation_type': 'vlan',
'vlan_end': '4090',
'vlan_start': '1'}
orig_network_meta = {'cidr': '1.2.3.4/24',
'vlan_id': None,
'cluster_id': '1',
'deleted': False,
'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7',
'network_type': 'DATAPLANE',
'segmentation_type': 'vxlan',
'type': 'default'}
cluster_meta = {'id': '1',
'deleted': False}
networks_detail = [{'alias': None,
'capability': 'high',
'cidr': '1.2.3.4/24',
'cluster_id': '1',
'custom_name': '',
'deleted': False,
'gateway': '1.2.3.4',
'gre_id_end': None,
'gre_id_start': None,
'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7',
'ip': None,
'ip_ranges': [
{
'end': '1.2.3.6',
'start': '1.2.3.4'}],
'ml2_type': 'ovs',
'mt': 1500,
'name': 'physnet1',
'network_type': 'DATAPLANE',
'physnet_name': 'physnet_eth1',
'segmentation_type': 'vxlan',
'type': 'default',
'updated_at': '2015-05-07T04:26:28.000000',
'vlan_end': 4090,
'vlan_id': None,
'vlan_start': 1,
'vni_end': 20,
'vni_start': 1}]
assigned_network = [
{'deleted': False,
'id': '658333cf-93d4-499b-8bff-e8bd6bcbb5f1',
'interface_id': '4de86a45-af28-4362-b5f0-afeee235786f',
'ip': '1.2.3.4',
'mac': 'fa:16:3e:7b:1a:95',
'network_id': 'cf531581-a283-41dd-9e4e-4b98454d54e7',
'updated_at': '2015-05-07T04:01:59.000000',
'vswitch_type': 'dvs'}]
get_network_meta.return_value = orig_network_meta
get_cluster_meta.return_value = cluster_meta
get_networks_detail.return_value = networks_detail
get_assigned_networks_data_by_network_id.side_effect = \
exception.NotFound
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.update_network,
req, network_id, network_meta)
@mock.patch('daisy.registry.client.v1.client.RegistryClient.do_request')
@mock.patch('daisy.registry.client.v1.api.update_network_metadata')
@mock.patch('daisy.registry.client.v1.api.get_networks_detail')
@mock.patch('daisy.registry.client.v1.api.get_cluster_metadata')
@mock.patch('daisy.registry.client.v1.api.get_network_metadata')
def test_update_network_with_custom_name(
self, get_network_meta, get_cluster_meta,
get_networks_detail,
update_network_metadata,
mock_do_request):
req = webob.Request.blank('/')
req.context = RequestContext(is_admin=True,
user='fake user',
tenant='fake tenamet')
network_id = 'cf531581-a283-41dd-9e4e-4b98454d54e7'
def fake_do_request(method, path, **params):
res = mock.Mock()
if method == "GET":
if path == "/assigned_networks/%s" % network_id:
get_result = {'network': []}
res.read.return_value = jsonutils.dumps(get_result)
return res
network_meta = {
'cluster_id': '1',
'custom_name': 'phy1',
'network_type': 'DATAPLANE',
'segmentation_type': 'vlan'}
orig_network_meta = {
'cluster_id': '1',
'custom_name': '',
'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7',
'name': 'physnet1',
'network_type': 'DATAPLANE',
'physnet_name': 'physnet_eth1',
'segmentation_type': 'vlan',
'type': 'default',
'cidr': '',
'gateway': '',
'deleted': False,
'vlan_end': 4090,
'vlan_id': None,
'vlan_start': 1,
'vni_end': 20,
'vni_start': 1}
cluster_meta = {'id': '1',
'deleted': False}
networks_detail = [
{
'cluster_id': '1',
'custom_name': '',
'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7',
'name': 'physnet1',
'network_type': 'DATAPLANE',
'physnet_name': 'physnet_eth1',
'segmentation_type': 'vlan',
'type': 'default',
'vlan_end': 4090,
'vlan_id': None,
'vlan_start': 1,
'vni_end': 20,
'vni_start': 1
}]
update_network_meta = {'deleted': False,
'cluster_id': '1',
'network_type': 'DATAPLANE',
'custom_name': 'phy1'}
get_network_meta.return_value = orig_network_meta
get_cluster_meta.return_value = cluster_meta
get_networks_detail.return_value = networks_detail
mock_do_request.side_effect = fake_do_request
update_network_metadata.return_value = update_network_meta
update_network = self.controller.update_network(
req, network_id, network_meta)
self.assertEqual(network_meta['custom_name'],
update_network['network_meta']['custom_name'])

View File

@@ -1,11 +1,11 @@
import mock
import webob
from daisy.common import exception
from oslo_db.sqlalchemy.session import Query
from daisy.context import RequestContext
from daisy.db.sqlalchemy import api
from daisy import test
from daisy.tests import test_utils
import mock
from oslo_db.sqlalchemy.session import Query
import webob
class FakeFetchoneValue(object):
@@ -143,6 +143,7 @@ class FakeSession(object):
class DottableDict(dict):
def __init__(self, *args, **kwargs):
dict.__init__(self, *args, **kwargs)
self.__dict__ = self
@@ -561,3 +562,9 @@ class TestSqlalchemyApi(test.TestCase):
api.discover_host_get,
self.req.context,
discover_host_id)
def test_get_assigned_networks_by_network_id(self):
network_id = u'1'
assigned_networks = api.get_assigned_networks_by_network_id(
self.req.context, network_id)
self.assertEqual(assigned_networks, [])

View File

@@ -0,0 +1,66 @@
from daisy.common import exception
from daisy.context import RequestContext
import daisy.db
from daisy.db.sqlalchemy import models
from daisy.registry.api.v1 import networks as registry_networks
from daisy import test
import mock
import webob
def fake_network_id(network_id):
if network_id == '2':
return exception.NotFound
if network_id == '3':
return exception.Conflict
class TestRegistryNetwork(test.TestCase):
def setUp(self):
super(TestRegistryNetwork, self).setUp()
self.controller = registry_networks.Controller()
def test_get_assigned_networks_by_network_id(self):
id = '1'
self.req = webob.Request.blank('/')
self.req.context = RequestContext(
is_admin=True, user='fake user',
tenant='fake tenant')
self.db_api = daisy.db.get_api()
assigned_network_ref = models.AssignedNetworks()
self.db_api.get_assigned_networks_by_network_id = \
mock.Mock(return_value=assigned_network_ref)
assigned_network = \
self.controller.get_assigned_networks_by_network_id(
self.req, id)
self.assertEqual(daisy.db.sqlalchemy.models.AssignedNetworks,
type(assigned_network['network']))
@mock.patch('daisy.db.sqlalchemy.api.'
'get_assigned_networks_by_network_id')
def test_get_assigned_networks_by_network_id_notfound(
self, mock_get_assigned_networks_by_network_id):
id = '2'
self.req = webob.Request.blank('/')
self.req.context = RequestContext(is_admin=True, user='fake user',
tenant='fake tenant')
mock_get_assigned_networks_by_network_id.side_effect = \
fake_network_id(id)
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.get_assigned_networks_by_network_id,
self.req, id)
@mock.patch('daisy.db.sqlalchemy.api.'
'get_assigned_networks_by_network_id')
def test_get_assigned_networks_by_network_id_exception(
self, mock_get_assigned_networks_by_network_id):
id = '3'
self.req = webob.Request.blank('/')
self.req.context = RequestContext(is_admin=True, user='fake user',
tenant='fake tenant')
mock_get_assigned_networks_by_network_id.side_effect = \
fake_network_id(id)
self.assertRaises(exception.Conflict,
self.controller.get_assigned_networks_by_network_id,
self.req, id)