diff --git a/code/daisy/daisy/test.py b/code/daisy/daisy/test.py index 0dd6030a..1d662086 100755 --- a/code/daisy/daisy/test.py +++ b/code/daisy/daisy/test.py @@ -1,5 +1,4 @@ -# Copyright 2010 United States Government as represented by the -# Administrator of the National Aeronautics and Space Administration. +# Copyright 2010-2011 OpenStack Foundation # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may diff --git a/code/daisy/daisy/tests/api/test_api_common.py b/code/daisy/daisy/tests/api/test_api_common.py index c257bf35..171f76cb 100755 --- a/code/daisy/daisy/tests/api/test_api_common.py +++ b/code/daisy/daisy/tests/api/test_api_common.py @@ -11,344 +11,344 @@ # 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. - -from daisy import test -from daisy.api import common -from webob import exc -from daisy.tests import fakes -import mock - - -class TestApiCommon(test.TestCase): - - def setUp(self): - super(TestApiCommon, self).setUp() - self.req = fakes.HTTPRequest.blank('/') - - def test_valid_cluster_networks(self): - nets = [{'id': '123', - 'cidr': None, - 'vlan_id': None, - 'ip_ranges': [], - 'gateway': '192.168.1.1', - 'name': 'PUBLICAPI'}, - {'id': '456', - 'cidr': None, - 'vlan_id': None, - 'ip_ranges': [], - 'gateway': '192.168.1.1', - 'name': 'PUBLICAPI'}] - common.valid_cluster_networks(nets) - - nets = [{'id': '123', - 'cidr': '192.167.1.1/24', - 'vlan_id': None, - 'ip_ranges': [], - 'gateway': '192.167.1.1', - 'name': 'PUBLICAPI'}, - {'id': '456', - 'cidr': '192.168.1.1/24', - 'vlan_id': None, - 'ip_ranges': [], - 'gateway': '192.168.1.1', - 'name': 'PUBLICAPI'}] - common.valid_cluster_networks(nets) - - nets = [{'id': '123', - 'cidr': '192.167.1.1/24', - 'vlan_id': 2, - 'ip_ranges': [], - 'gateway': '192.167.1.1', - 'name': 'PUBLICAPI'}, - {'id': '456', - 'cidr': '192.168.1.1/24', - 'vlan_id': 2, - 'ip_ranges': [], - 'gateway': '192.168.1.1', - 'name': 'PUBLICAPI'}] - self.assertRaises(exc.HTTPBadRequest, - common.valid_cluster_networks, nets) - - nets = [{'id': '123', - 'cidr': '192.168.1.1/24', - 'vlan_id': 2, - 'ip_ranges': [], - 'gateway': '192.168.1.1', - 'name': 'PUBLICAPI'}, - {'id': '456', - 'cidr': '192.168.1.1/24', - 'vlan_id': 22, - 'ip_ranges': [], - 'gateway': '192.168.1.1', - 'name': 'PUBLICAPI'}] - self.assertRaises(exc.HTTPBadRequest, - common.valid_cluster_networks, nets) - - nets = [{'id': '123', - 'cidr': '192.168.1.1/24', - 'vlan_id': 2, - 'ip_ranges': [], - 'gateway': '192.168.1.2', - 'name': 'PUBLICAPI'}, - {'id': '456', - 'cidr': '192.168.1.1/24', - 'vlan_id': 2, - 'ip_ranges': [], - 'gateway': '192.168.1.1', - 'name': 'PUBLICAPI'}] - self.assertRaises(exc.HTTPBadRequest, - common.valid_cluster_networks, nets) - - nets = [{'id': '123', - 'cidr': '192.168.1.1/24', - 'vlan_id': 2, - 'ip_ranges': [{'start': '192.168.1.10', - 'end': '192.168.1.100'}], - 'gateway': '192.168.1.1', - 'name': 'PUBLICAPI'}, - {'id': '456', - 'cidr': '192.168.1.1/24', - 'vlan_id': 2, - 'ip_ranges': [{'start': '192.168.1.10', - 'end': '192.168.1.120'}], - 'gateway': '192.168.1.1', - 'name': 'PUBLICAPI'}] - self.assertRaises(exc.HTTPBadRequest, - common.valid_cluster_networks, nets) - - def test_check_gateway_uniqueness(self): - nets = [{'deleted': False, - 'cluster_id': '1', - 'id': '1', - 'network_type': 'PUBLICAPI', - 'cidr': '192.168.1.1/24', - 'custom_name': 'publicapi', - 'vlan_id': None, - 'gateway': '192.168.1.1', - 'ip_ranges': [], - 'name': 'PUBLICAPI'}, - {'deleted': False, - 'cluster_id': '1', - 'id': '2', - 'network_type': 'MANAGEMENT', - 'cidr': '192.168.1.1/24', - 'custom_name': 'management', - 'vlan_id': None, - 'gateway': '192.168.1.1', - 'ip_ranges': [], - 'name': 'MANAGEMENT'}] - self.assertEqual(None, common.check_gateway_uniqueness(nets)) - - nets = [{'deleted': False, - 'cluster_id': '1', - 'id': '1', - 'network_type': 'PUBLICAPI', - 'cidr': '192.168.1.1/24', - 'custom_name': 'publicapi', - 'vlan_id': None, - 'gateway': '192.168.1.1', - 'ip_ranges': [], - 'name': 'PUBLICAPI'}, - {'deleted': False, - 'cluster_id': '1', - 'id': '2', - 'network_type': 'DATAPLANE', - 'cidr': '192.168.1.1/24', - 'custom_name': 'phy1', - 'vlan_id': None, - 'gateway': '192.167.1.1', - 'ip_ranges': [], - 'name': 'physnet1'}] - self.assertEqual(None, common.check_gateway_uniqueness(nets)) - - def test_check_gateway_uniqueness_error(self): - nets = [{'deleted': False, - 'cluster_id': '1', - 'id': '1', - 'network_type': 'PUBLICAPI', - 'cidr': '192.168.1.1/24', - 'custom_name': 'publicapi', - 'vlan_id': None, - 'gateway': '192.168.1.1', - 'ip_ranges': [], - 'name': 'PUBLICAPI'}, - {'deleted': False, - 'cluster_id': '1', - 'id': '2', - 'network_type': 'MANAGEMENT', - 'cidr': '192.168.1.1/24', - 'custom_name': 'management', - 'vlan_id': None, - 'gateway': '192.168.1.1', - 'ip_ranges': [], - 'name': 'MANAGEMENT'}, - {'deleted': False, - 'cluster_id': '1', - 'id': '3', - 'network_type': 'STORAGE', - 'cidr': '99.99.1.1/24', - 'custom_name': 'storage', - 'vlan_id': None, - 'gateway': '99.99.1.1', - 'ip_ranges': [], - 'name': 'STORAGE'}] - - self.assertRaises(exc.HTTPBadRequest, - common.check_gateway_uniqueness, nets) - - @mock.patch('daisy.api.common.valid_ip_ranges') - def test_valid_ip_ranges_with_cidr(self, fake_valid_ip_ranges): - ip_ranges = [ - { - 'start': '12.18.1.5', - 'cidr': '12.18.1.1/24', - 'end': '12.18.1.5', - 'gateway': '12.18.1.2' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.5' - }, - ] - cidr = '12.10.1.2/24' - common.valid_ip_ranges_with_cidr(ip_ranges, cidr) - - def test_valid_ip_ranges_with_cidr_invalid_startip(self): - ip_ranges = [ - { - 'start': '13.18.1.5', - 'cidr': '12.18.1.1/24', - 'end': '12.18.1.5', - 'gateway': '12.18.1.2' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.5' - }, - ] - cidr = '12.10.1.2/24' - self.assertRaises(exc.HTTPForbidden, - common.valid_ip_ranges_with_cidr, - ip_ranges, - cidr) - - def test_valid_ip_ranges_with_cidr_invalid_endip(self): - ip_ranges = [ - { - 'start': '12.18.1.5', - 'cidr': '12.18.1.1/24', - 'end': '13.18.1.5', - 'gateway': '12.18.1.2' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.5' - }, - ] - cidr = '12.10.1.2/24' - self.assertRaises(exc.HTTPForbidden, - common.valid_ip_ranges_with_cidr, - ip_ranges, - cidr) - - def test_valid_ip_ranges_with_cidr_invalid_gateway(self): - ip_ranges = [ - { - 'start': '12.18.1.5', - 'cidr': '12.18.1.1/24', - 'end': '12.18.1.9', - 'gateway': '12.18.1.5' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.5' - }, - ] - cidr = '12.10.1.2/24' - self.assertRaises(exc.HTTPBadRequest, - common.valid_ip_ranges_with_cidr, - ip_ranges, - cidr) - - def test_valid_ip_ranges_with_cidr_cidr_overlapped(self): - ip_ranges = [ - { - 'start': '12.18.1.5', - 'cidr': '12.18.1.1/24', - 'end': '12.18.1.5', - 'gateway': '12.18.1.2' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.5' - }, - ] - cidr = '12.18.1.1/26' - self.assertRaises(exc.HTTPBadRequest, - common.valid_ip_ranges_with_cidr, - ip_ranges, - cidr) - - def test_valid_network_range(self): - range = [1, 4094] - network_meta = {} - vlan_start = 'vlan_start' - vlan_end = 'vlan_end' - value_start = 1 - value_end = 4095 - network_meta[vlan_start] = value_start - try: - common.valid_network_range(self.req, network_meta) - except exc.HTTPBadRequest as e: - msg = "%s and %s must be appeared "\ - "at the same time" % (vlan_start, vlan_end) - self.assertEqual(e.explanation, msg) - - network_meta[vlan_end] = value_end - try: - common.valid_network_range(self.req, network_meta) - except exc.HTTPBadRequest as e: - msg = "%s:%d and %s:%d must be in %d~%d and " \ - "start:%d less than end:%d"\ - % (vlan_start, value_start, vlan_end, value_end, - range[0], range[1], value_start, value_end) - self.assertEqual(e.explanation, msg) - - network_meta[vlan_end] = value_end-1 - result = common.valid_network_range(self.req, network_meta) - self.assertEqual(result, None) - - svlan_start = 'svlan_start' - svlan_end = 'svlan_end' - network_meta[svlan_start] = value_start - try: - common.valid_network_range(self.req, network_meta) - except exc.HTTPBadRequest as e: - msg = "%s and %s must be appeared "\ - "at the same time" % (svlan_start, svlan_end) - self.assertEqual(e.explanation, msg) - - network_meta[svlan_end] = value_end - try: - common.valid_network_range(self.req, network_meta) - except exc.HTTPBadRequest as e: - msg = "%s:%d and %s:%d must be in %d~%d " \ - "and start:%d less than end:%d"\ - % (svlan_start, value_start, svlan_end, - value_end, range[0], range[1], value_start, value_end) - self.assertEqual(e.explanation, msg) - - network_meta[svlan_end] = value_end-1 - result = common.valid_network_range(self.req, network_meta) - self.assertEqual(result, None) +# under the License. + +from daisy import test +from daisy.api import common +from webob import exc +from daisy.tests import fakes +import mock + + +class TestApiCommon(test.TestCase): + + def setUp(self): + super(TestApiCommon, self).setUp() + self.req = fakes.HTTPRequest.blank('/') + + def test_valid_cluster_networks(self): + nets = [{'id': '123', + 'cidr': None, + 'vlan_id': None, + 'ip_ranges': [], + 'gateway': '192.168.1.1', + 'name': 'PUBLICAPI'}, + {'id': '456', + 'cidr': None, + 'vlan_id': None, + 'ip_ranges': [], + 'gateway': '192.168.1.1', + 'name': 'PUBLICAPI'}] + common.valid_cluster_networks(nets) + + nets = [{'id': '123', + 'cidr': '192.167.1.1/24', + 'vlan_id': None, + 'ip_ranges': [], + 'gateway': '192.167.1.1', + 'name': 'PUBLICAPI'}, + {'id': '456', + 'cidr': '192.168.1.1/24', + 'vlan_id': None, + 'ip_ranges': [], + 'gateway': '192.168.1.1', + 'name': 'PUBLICAPI'}] + common.valid_cluster_networks(nets) + + nets = [{'id': '123', + 'cidr': '192.167.1.1/24', + 'vlan_id': 2, + 'ip_ranges': [], + 'gateway': '192.167.1.1', + 'name': 'PUBLICAPI'}, + {'id': '456', + 'cidr': '192.168.1.1/24', + 'vlan_id': 2, + 'ip_ranges': [], + 'gateway': '192.168.1.1', + 'name': 'PUBLICAPI'}] + self.assertRaises(exc.HTTPBadRequest, + common.valid_cluster_networks, nets) + + nets = [{'id': '123', + 'cidr': '192.168.1.1/24', + 'vlan_id': 2, + 'ip_ranges': [], + 'gateway': '192.168.1.1', + 'name': 'PUBLICAPI'}, + {'id': '456', + 'cidr': '192.168.1.1/24', + 'vlan_id': 22, + 'ip_ranges': [], + 'gateway': '192.168.1.1', + 'name': 'PUBLICAPI'}] + self.assertRaises(exc.HTTPBadRequest, + common.valid_cluster_networks, nets) + + nets = [{'id': '123', + 'cidr': '192.168.1.1/24', + 'vlan_id': 2, + 'ip_ranges': [], + 'gateway': '192.168.1.2', + 'name': 'PUBLICAPI'}, + {'id': '456', + 'cidr': '192.168.1.1/24', + 'vlan_id': 2, + 'ip_ranges': [], + 'gateway': '192.168.1.1', + 'name': 'PUBLICAPI'}] + self.assertRaises(exc.HTTPBadRequest, + common.valid_cluster_networks, nets) + + nets = [{'id': '123', + 'cidr': '192.168.1.1/24', + 'vlan_id': 2, + 'ip_ranges': [{'start': '192.168.1.10', + 'end': '192.168.1.100'}], + 'gateway': '192.168.1.1', + 'name': 'PUBLICAPI'}, + {'id': '456', + 'cidr': '192.168.1.1/24', + 'vlan_id': 2, + 'ip_ranges': [{'start': '192.168.1.10', + 'end': '192.168.1.120'}], + 'gateway': '192.168.1.1', + 'name': 'PUBLICAPI'}] + self.assertRaises(exc.HTTPBadRequest, + common.valid_cluster_networks, nets) + + def test_check_gateway_uniqueness(self): + nets = [{'deleted': False, + 'cluster_id': '1', + 'id': '1', + 'network_type': 'PUBLICAPI', + 'cidr': '192.168.1.1/24', + 'custom_name': 'publicapi', + 'vlan_id': None, + 'gateway': '192.168.1.1', + 'ip_ranges': [], + 'name': 'PUBLICAPI'}, + {'deleted': False, + 'cluster_id': '1', + 'id': '2', + 'network_type': 'MANAGEMENT', + 'cidr': '192.168.1.1/24', + 'custom_name': 'management', + 'vlan_id': None, + 'gateway': '192.168.1.1', + 'ip_ranges': [], + 'name': 'MANAGEMENT'}] + self.assertEqual(None, common.check_gateway_uniqueness(nets)) + + nets = [{'deleted': False, + 'cluster_id': '1', + 'id': '1', + 'network_type': 'PUBLICAPI', + 'cidr': '192.168.1.1/24', + 'custom_name': 'publicapi', + 'vlan_id': None, + 'gateway': '192.168.1.1', + 'ip_ranges': [], + 'name': 'PUBLICAPI'}, + {'deleted': False, + 'cluster_id': '1', + 'id': '2', + 'network_type': 'DATAPLANE', + 'cidr': '192.168.1.1/24', + 'custom_name': 'phy1', + 'vlan_id': None, + 'gateway': '192.167.1.1', + 'ip_ranges': [], + 'name': 'physnet1'}] + self.assertEqual(None, common.check_gateway_uniqueness(nets)) + + def test_check_gateway_uniqueness_error(self): + nets = [{'deleted': False, + 'cluster_id': '1', + 'id': '1', + 'network_type': 'PUBLICAPI', + 'cidr': '192.168.1.1/24', + 'custom_name': 'publicapi', + 'vlan_id': None, + 'gateway': '192.168.1.1', + 'ip_ranges': [], + 'name': 'PUBLICAPI'}, + {'deleted': False, + 'cluster_id': '1', + 'id': '2', + 'network_type': 'MANAGEMENT', + 'cidr': '192.168.1.1/24', + 'custom_name': 'management', + 'vlan_id': None, + 'gateway': '192.168.1.1', + 'ip_ranges': [], + 'name': 'MANAGEMENT'}, + {'deleted': False, + 'cluster_id': '1', + 'id': '3', + 'network_type': 'STORAGE', + 'cidr': '99.99.1.1/24', + 'custom_name': 'storage', + 'vlan_id': None, + 'gateway': '99.99.1.1', + 'ip_ranges': [], + 'name': 'STORAGE'}] + + self.assertRaises(exc.HTTPBadRequest, + common.check_gateway_uniqueness, nets) + + @mock.patch('daisy.api.common.valid_ip_ranges') + def test_valid_ip_ranges_with_cidr(self, fake_valid_ip_ranges): + ip_ranges = [ + { + 'start': '12.18.1.5', + 'cidr': '12.18.1.1/24', + 'end': '12.18.1.5', + 'gateway': '12.18.1.2' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.5' + }, + ] + cidr = '12.10.1.2/24' + common.valid_ip_ranges_with_cidr(ip_ranges, cidr) + + def test_valid_ip_ranges_with_cidr_invalid_startip(self): + ip_ranges = [ + { + 'start': '13.18.1.5', + 'cidr': '12.18.1.1/24', + 'end': '12.18.1.5', + 'gateway': '12.18.1.2' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.5' + }, + ] + cidr = '12.10.1.2/24' + self.assertRaises(exc.HTTPForbidden, + common.valid_ip_ranges_with_cidr, + ip_ranges, + cidr) + + def test_valid_ip_ranges_with_cidr_invalid_endip(self): + ip_ranges = [ + { + 'start': '12.18.1.5', + 'cidr': '12.18.1.1/24', + 'end': '13.18.1.5', + 'gateway': '12.18.1.2' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.5' + }, + ] + cidr = '12.10.1.2/24' + self.assertRaises(exc.HTTPForbidden, + common.valid_ip_ranges_with_cidr, + ip_ranges, + cidr) + + def test_valid_ip_ranges_with_cidr_invalid_gateway(self): + ip_ranges = [ + { + 'start': '12.18.1.5', + 'cidr': '12.18.1.1/24', + 'end': '12.18.1.9', + 'gateway': '12.18.1.5' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.5' + }, + ] + cidr = '12.10.1.2/24' + self.assertRaises(exc.HTTPBadRequest, + common.valid_ip_ranges_with_cidr, + ip_ranges, + cidr) + + def test_valid_ip_ranges_with_cidr_cidr_overlapped(self): + ip_ranges = [ + { + 'start': '12.18.1.5', + 'cidr': '12.18.1.1/24', + 'end': '12.18.1.5', + 'gateway': '12.18.1.2' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.5' + }, + ] + cidr = '12.18.1.1/26' + self.assertRaises(exc.HTTPBadRequest, + common.valid_ip_ranges_with_cidr, + ip_ranges, + cidr) + + def test_valid_network_range(self): + range = [1, 4094] + network_meta = {} + vlan_start = 'vlan_start' + vlan_end = 'vlan_end' + value_start = 1 + value_end = 4095 + network_meta[vlan_start] = value_start + try: + common.valid_network_range(self.req, network_meta) + except exc.HTTPBadRequest as e: + msg = "%s and %s must be appeared "\ + "at the same time" % (vlan_start, vlan_end) + self.assertEqual(e.explanation, msg) + + network_meta[vlan_end] = value_end + try: + common.valid_network_range(self.req, network_meta) + except exc.HTTPBadRequest as e: + msg = "%s:%d and %s:%d must be in %d~%d and " \ + "start:%d less than end:%d"\ + % (vlan_start, value_start, vlan_end, value_end, + range[0], range[1], value_start, value_end) + self.assertEqual(e.explanation, msg) + + network_meta[vlan_end] = value_end-1 + result = common.valid_network_range(self.req, network_meta) + self.assertEqual(result, None) + + svlan_start = 'svlan_start' + svlan_end = 'svlan_end' + network_meta[svlan_start] = value_start + try: + common.valid_network_range(self.req, network_meta) + except exc.HTTPBadRequest as e: + msg = "%s and %s must be appeared "\ + "at the same time" % (svlan_start, svlan_end) + self.assertEqual(e.explanation, msg) + + network_meta[svlan_end] = value_end + try: + common.valid_network_range(self.req, network_meta) + except exc.HTTPBadRequest as e: + msg = "%s:%d and %s:%d must be in %d~%d " \ + "and start:%d less than end:%d"\ + % (svlan_start, value_start, svlan_end, + value_end, range[0], range[1], value_start, value_end) + self.assertEqual(e.explanation, msg) + + network_meta[svlan_end] = value_end-1 + result = common.valid_network_range(self.req, network_meta) + self.assertEqual(result, None) diff --git a/code/daisy/daisy/tests/api/test_backup_restore.py b/code/daisy/daisy/tests/api/test_backup_restore.py index 0e046014..76037e8f 100755 --- a/code/daisy/daisy/tests/api/test_backup_restore.py +++ b/code/daisy/daisy/tests/api/test_backup_restore.py @@ -11,59 +11,59 @@ # 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 mock -import webob -import subprocess -from daisy import test -from daisy.context import RequestContext -from daisy.api.v1 import backup_restore - - -class TestBackupRestore(test.TestCase): - - def setUp(self): - super(TestBackupRestore, self).setUp() - self.controller = backup_restore.Controller() - self.req = webob.Request.blank('/') - self.req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - - @mock.patch('subprocess.check_output') - @mock.patch("daisy.api.v1.backup_restore.Controller.check_file_format") - def test_restore(self, mock_do_check_file_format, - mock_do_check_output): - def mock_check_output(*args, **kwargs): - pass - - def mock_check_file_format(*args, **kwargs): - return True - - file_meta = { - "backup_file_path": "/home/test.tar.gz"} - mock_do_check_output.side_effect = mock_check_output - mock_do_check_file_format.side_effect = mock_check_file_format - result = self.controller.restore(self.req, file_meta) - self.assertEqual(None, result) - - @mock.patch('subprocess.check_output') - @mock.patch("daisy.api.v1.backup_restore.Controller.check_file_format") - def test_restore_call_process_error(self, mock_do_check_file_format, - mock_do_check_output): - - def mock_check_output(*args, **kwargs): - e = subprocess.CalledProcessError(0, 'test') - e.output = 'test error' - raise e - - def mock_check_file_format(*args, **kwargs): - return True - - file_meta = { - "backup_file_path": "/home/test.tar.gz"} - mock_do_check_output.side_effect = mock_check_output - self.assertRaises(webob.exc.HTTPBadRequest, - self.controller.restore, - self.req, file_meta) +# under the License. + +import mock +import webob +import subprocess +from daisy import test +from daisy.context import RequestContext +from daisy.api.v1 import backup_restore + + +class TestBackupRestore(test.TestCase): + + def setUp(self): + super(TestBackupRestore, self).setUp() + self.controller = backup_restore.Controller() + self.req = webob.Request.blank('/') + self.req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + + @mock.patch('subprocess.check_output') + @mock.patch("daisy.api.v1.backup_restore.Controller.check_file_format") + def test_restore(self, mock_do_check_file_format, + mock_do_check_output): + def mock_check_output(*args, **kwargs): + pass + + def mock_check_file_format(*args, **kwargs): + return True + + file_meta = { + "backup_file_path": "/home/test.tar.gz"} + mock_do_check_output.side_effect = mock_check_output + mock_do_check_file_format.side_effect = mock_check_file_format + result = self.controller.restore(self.req, file_meta) + self.assertEqual(None, result) + + @mock.patch('subprocess.check_output') + @mock.patch("daisy.api.v1.backup_restore.Controller.check_file_format") + def test_restore_call_process_error(self, mock_do_check_file_format, + mock_do_check_output): + + def mock_check_output(*args, **kwargs): + e = subprocess.CalledProcessError(0, 'test') + e.output = 'test error' + raise e + + def mock_check_file_format(*args, **kwargs): + return True + + file_meta = { + "backup_file_path": "/home/test.tar.gz"} + mock_do_check_output.side_effect = mock_check_output + self.assertRaises(webob.exc.HTTPBadRequest, + self.controller.restore, + self.req, file_meta) diff --git a/code/daisy/daisy/tests/api/test_deploy_server.py b/code/daisy/daisy/tests/api/test_deploy_server.py index 53473ddc..dadc4bb8 100755 --- a/code/daisy/daisy/tests/api/test_deploy_server.py +++ b/code/daisy/daisy/tests/api/test_deploy_server.py @@ -11,244 +11,244 @@ # 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 mock -import webob -from daisy import test -from daisy.context import RequestContext -from daisy.api.v1 import deploy_server - - -class MockStdout(): - - def __init__(self): - pass - - def readline(self): - return '' - - -class MockPopen(): - - def __init__(self, returncode): - self.returncode = returncode - self.stdout = MockStdout() - - def wait(self): - pass - - def poll(self): - return True - - -class DeployServerFuncs(test.TestCase): - - def setUp(self): - super(DeployServerFuncs, self).setUp() - self.controller = deploy_server.Controller() - self.req = webob.Request.blank('/') - self.req.context = RequestContext(is_admin=True, user='fake user', - tenant='fake tenant') - - @mock.patch("commands.getstatusoutput") - def test_get_nics(self, mock_do_getstatusoutput): - def mock_getstatusoutput(*args, **kwargs): - return (0, 'docker0: eth0: eth1: ') - - mock_do_getstatusoutput.side_effect = mock_getstatusoutput - nics = self.controller.get_nics() - self.assertEqual(set(['docker0', 'eth1', 'eth0']), nics) - - @mock.patch("commands.getstatusoutput") - def test_get_nics_with_lo(self, mock_do_getstatusoutput): - def mock_getstatusoutput(*args, **kwargs): - return (0, 'docker0: eth0: eth1: lo: ') - - mock_do_getstatusoutput.side_effect = mock_getstatusoutput - nics = self.controller.get_nics() - self.assertEqual(set(['docker0', 'eth1', 'eth0']), nics) - - @mock.patch("commands.getstatusoutput") - def test_get_pxe_nic(self, mock_do_getstatusoutput): - def mock_getstatusoutput(*args, **kwargs): - return (0, 'bond0:100') - - mock_do_getstatusoutput.side_effect = mock_getstatusoutput - pxe_nic = self.controller.get_pxe_nic("99.99.1.5") - self.assertEqual("bond0", pxe_nic) - - @mock.patch("commands.getstatusoutput") - def test_get_pxe_nic_with_error(self, mock_do_getstatusoutput): - def mock_getstatusoutput(*args, **kwargs): - return (1, 'bond0:100') - - mock_do_getstatusoutput.side_effect = mock_getstatusoutput - pxe_nic = self.controller.get_pxe_nic("99.99.1.5") - self.assertEqual(None, pxe_nic) - - @mock.patch("daisy.registry.client.v1.api.get_all_networks") - @mock.patch("daisy.api.v1.deploy_server.Controller.get_nics") - @mock.patch("daisy.api.v1.deploy_server.Controller.get_pxe_nic") - def test_list_deploy_server(self, mock_do_get_pxe_nic, - mock_do_get_nics, - mock_do_get_all_networks): - - def mock_get_all_networks(*args, **kwargs): - return [{"ip": "99.99.1.5"}] - - def mock_get_nics(*args, **kwargs): - return set(['docker0', 'eth1', 'eth0']) - - def mock_get_pxe_nic(*args, **kwargs): - return "bond0" - - mock_do_get_all_networks.side_effect = mock_get_all_networks - mock_do_get_nics.side_effect = mock_get_nics - mock_do_get_pxe_nic.side_effect = mock_get_pxe_nic - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - actual = {'deploy_servers': [ - { - 'ip': '99.99.1.5', - 'nics': set(['docker0', 'eth0', 'eth1']), - 'pxe_nic': 'bond0' - }]} - deploy_servers = self.controller.list_deploy_server(req) - self.assertEqual(actual, deploy_servers) - - @mock.patch("daisy.registry.client.v1.api.get_all_networks") - @mock.patch("daisy.api.v1.deploy_server.Controller.get_nics") - @mock.patch("daisy.api.v1.deploy_server.Controller.get_pxe_nic") - def test_list_more_deploy_server(self, mock_do_get_pxe_nic, - mock_do_get_nics, - mock_do_get_all_networks): - - def mock_get_all_networks(*args, **kwargs): - return [{"ip": "99.99.1.5"}, {"ip": "99.99.1.5"}] - - def mock_get_nics(*args, **kwargs): - return set(['docker0', 'eth1', 'eth0']) - - def mock_get_pxe_nic(*args, **kwargs): - return "bond0" - - mock_do_get_all_networks.side_effect = mock_get_all_networks - mock_do_get_nics.side_effect = mock_get_nics - mock_do_get_pxe_nic.side_effect = mock_get_pxe_nic - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - self.assertRaises(webob.exc.HTTPBadRequest, - self.controller.list_deploy_server, - req) - - @mock.patch("daisy.registry.client.v1.api.get_all_networks") - @mock.patch("daisy.api.v1.deploy_server.Controller.get_nics") - @mock.patch("daisy.api.v1.deploy_server.Controller.get_pxe_nic") - def test_list_more_deploy_server_with_error( - self, mock_do_get_pxe_nic, mock_do_get_nics, - mock_do_get_all_networks): - - def mock_get_all_networks(*args, **kwargs): - raise webob.exc.HTTPBadRequest( - explanation="Get system net plane failed.", - request=self.req) - - def mock_get_nics(*args, **kwargs): - return set(['docker0', 'eth1', 'eth0']) - - def mock_get_pxe_nic(*args, **kwargs): - return "bond0" - - mock_do_get_all_networks.side_effect = mock_get_all_networks - mock_do_get_nics.side_effect = mock_get_nics - mock_do_get_pxe_nic.side_effect = mock_get_pxe_nic - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - self.assertRaises(webob.exc.HTTPBadRequest, - self.controller.list_deploy_server, - req) - - @mock.patch("subprocess.Popen") - def test_pxe_env_check(self, mock_do_popen): - - def mock_popen(*args, **kwargs): - _popen = MockPopen(0) - return _popen - - mock_do_popen.side_effect = mock_popen - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - deploy_server_meta = { - "deployment_interface": "bond0", - "server_ip": "99.99.1.5"} - actual = {'deploy_server_meta': {'return_code': 0}} - - result = self.controller.pxe_env_check(req, deploy_server_meta) - self.assertEqual(actual, result) - - @mock.patch("subprocess.Popen") - def test_pxe_env_check_with_error_popen(self, mock_do_popen): - - def mock_popen(*args, **kwargs): - _popen = MockPopen(1) - return _popen - - mock_do_popen.side_effect = mock_popen - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - deploy_server_meta = { - "deployment_interface": "bond0", - "server_ip": "99.99.1.5"} - self.assertRaises(webob.exc.HTTPBadRequest, - self.controller.pxe_env_check, - req, deploy_server_meta) - - @mock.patch("subprocess.Popen") - def test_pxe_env_check_call_process_error(self, mock_do_popen): - - def mock_popen(*args, **kwargs): - e = subprocess.CalledProcessError(0, 'test') - e.output = 'test error' - raise e - - mock_do_popen.side_effect = mock_popen - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - deploy_server_meta = { - "deployment_interface": "bond0", - "server_ip": "99.99.1.5"} - self.assertRaises(webob.exc.HTTPBadRequest, - self.controller.pxe_env_check, - req, deploy_server_meta) - - @mock.patch("subprocess.Popen") - def test_pxe_env_check_error(self, mock_do_popen): - - def mock_popen(*args, **kwargs): - _popen = MockPopen(1) - return _popen - - mock_do_popen.side_effect = mock_popen - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - deploy_server_meta = { - "deployment_interface": "bond0", - "server_ip": "99.99.1.5"} - self.assertRaises(webob.exc.HTTPBadRequest, - self.controller.pxe_env_check, - req, deploy_server_meta) +# under the License. + +import mock +import webob +from daisy import test +from daisy.context import RequestContext +from daisy.api.v1 import deploy_server + + +class MockStdout(): + + def __init__(self): + pass + + def readline(self): + return '' + + +class MockPopen(): + + def __init__(self, returncode): + self.returncode = returncode + self.stdout = MockStdout() + + def wait(self): + pass + + def poll(self): + return True + + +class DeployServerFuncs(test.TestCase): + + def setUp(self): + super(DeployServerFuncs, self).setUp() + self.controller = deploy_server.Controller() + self.req = webob.Request.blank('/') + self.req.context = RequestContext(is_admin=True, user='fake user', + tenant='fake tenant') + + @mock.patch("commands.getstatusoutput") + def test_get_nics(self, mock_do_getstatusoutput): + def mock_getstatusoutput(*args, **kwargs): + return (0, 'docker0: eth0: eth1: ') + + mock_do_getstatusoutput.side_effect = mock_getstatusoutput + nics = self.controller.get_nics() + self.assertEqual(set(['docker0', 'eth1', 'eth0']), nics) + + @mock.patch("commands.getstatusoutput") + def test_get_nics_with_lo(self, mock_do_getstatusoutput): + def mock_getstatusoutput(*args, **kwargs): + return (0, 'docker0: eth0: eth1: lo: ') + + mock_do_getstatusoutput.side_effect = mock_getstatusoutput + nics = self.controller.get_nics() + self.assertEqual(set(['docker0', 'eth1', 'eth0']), nics) + + @mock.patch("commands.getstatusoutput") + def test_get_pxe_nic(self, mock_do_getstatusoutput): + def mock_getstatusoutput(*args, **kwargs): + return (0, 'bond0:100') + + mock_do_getstatusoutput.side_effect = mock_getstatusoutput + pxe_nic = self.controller.get_pxe_nic("99.99.1.5") + self.assertEqual("bond0", pxe_nic) + + @mock.patch("commands.getstatusoutput") + def test_get_pxe_nic_with_error(self, mock_do_getstatusoutput): + def mock_getstatusoutput(*args, **kwargs): + return (1, 'bond0:100') + + mock_do_getstatusoutput.side_effect = mock_getstatusoutput + pxe_nic = self.controller.get_pxe_nic("99.99.1.5") + self.assertEqual(None, pxe_nic) + + @mock.patch("daisy.registry.client.v1.api.get_all_networks") + @mock.patch("daisy.api.v1.deploy_server.Controller.get_nics") + @mock.patch("daisy.api.v1.deploy_server.Controller.get_pxe_nic") + def test_list_deploy_server(self, mock_do_get_pxe_nic, + mock_do_get_nics, + mock_do_get_all_networks): + + def mock_get_all_networks(*args, **kwargs): + return [{"ip": "99.99.1.5"}] + + def mock_get_nics(*args, **kwargs): + return set(['docker0', 'eth1', 'eth0']) + + def mock_get_pxe_nic(*args, **kwargs): + return "bond0" + + mock_do_get_all_networks.side_effect = mock_get_all_networks + mock_do_get_nics.side_effect = mock_get_nics + mock_do_get_pxe_nic.side_effect = mock_get_pxe_nic + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + actual = {'deploy_servers': [ + { + 'ip': '99.99.1.5', + 'nics': set(['docker0', 'eth0', 'eth1']), + 'pxe_nic': 'bond0' + }]} + deploy_servers = self.controller.list_deploy_server(req) + self.assertEqual(actual, deploy_servers) + + @mock.patch("daisy.registry.client.v1.api.get_all_networks") + @mock.patch("daisy.api.v1.deploy_server.Controller.get_nics") + @mock.patch("daisy.api.v1.deploy_server.Controller.get_pxe_nic") + def test_list_more_deploy_server(self, mock_do_get_pxe_nic, + mock_do_get_nics, + mock_do_get_all_networks): + + def mock_get_all_networks(*args, **kwargs): + return [{"ip": "99.99.1.5"}, {"ip": "99.99.1.5"}] + + def mock_get_nics(*args, **kwargs): + return set(['docker0', 'eth1', 'eth0']) + + def mock_get_pxe_nic(*args, **kwargs): + return "bond0" + + mock_do_get_all_networks.side_effect = mock_get_all_networks + mock_do_get_nics.side_effect = mock_get_nics + mock_do_get_pxe_nic.side_effect = mock_get_pxe_nic + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + self.assertRaises(webob.exc.HTTPBadRequest, + self.controller.list_deploy_server, + req) + + @mock.patch("daisy.registry.client.v1.api.get_all_networks") + @mock.patch("daisy.api.v1.deploy_server.Controller.get_nics") + @mock.patch("daisy.api.v1.deploy_server.Controller.get_pxe_nic") + def test_list_more_deploy_server_with_error( + self, mock_do_get_pxe_nic, mock_do_get_nics, + mock_do_get_all_networks): + + def mock_get_all_networks(*args, **kwargs): + raise webob.exc.HTTPBadRequest( + explanation="Get system net plane failed.", + request=self.req) + + def mock_get_nics(*args, **kwargs): + return set(['docker0', 'eth1', 'eth0']) + + def mock_get_pxe_nic(*args, **kwargs): + return "bond0" + + mock_do_get_all_networks.side_effect = mock_get_all_networks + mock_do_get_nics.side_effect = mock_get_nics + mock_do_get_pxe_nic.side_effect = mock_get_pxe_nic + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + self.assertRaises(webob.exc.HTTPBadRequest, + self.controller.list_deploy_server, + req) + + @mock.patch("subprocess.Popen") + def test_pxe_env_check(self, mock_do_popen): + + def mock_popen(*args, **kwargs): + _popen = MockPopen(0) + return _popen + + mock_do_popen.side_effect = mock_popen + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + deploy_server_meta = { + "deployment_interface": "bond0", + "server_ip": "99.99.1.5"} + actual = {'deploy_server_meta': {'return_code': 0}} + + result = self.controller.pxe_env_check(req, deploy_server_meta) + self.assertEqual(actual, result) + + @mock.patch("subprocess.Popen") + def test_pxe_env_check_with_error_popen(self, mock_do_popen): + + def mock_popen(*args, **kwargs): + _popen = MockPopen(1) + return _popen + + mock_do_popen.side_effect = mock_popen + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + deploy_server_meta = { + "deployment_interface": "bond0", + "server_ip": "99.99.1.5"} + self.assertRaises(webob.exc.HTTPBadRequest, + self.controller.pxe_env_check, + req, deploy_server_meta) + + @mock.patch("subprocess.Popen") + def test_pxe_env_check_call_process_error(self, mock_do_popen): + + def mock_popen(*args, **kwargs): + e = subprocess.CalledProcessError(0, 'test') + e.output = 'test error' + raise e + + mock_do_popen.side_effect = mock_popen + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + deploy_server_meta = { + "deployment_interface": "bond0", + "server_ip": "99.99.1.5"} + self.assertRaises(webob.exc.HTTPBadRequest, + self.controller.pxe_env_check, + req, deploy_server_meta) + + @mock.patch("subprocess.Popen") + def test_pxe_env_check_error(self, mock_do_popen): + + def mock_popen(*args, **kwargs): + _popen = MockPopen(1) + return _popen + + mock_do_popen.side_effect = mock_popen + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + deploy_server_meta = { + "deployment_interface": "bond0", + "server_ip": "99.99.1.5"} + self.assertRaises(webob.exc.HTTPBadRequest, + self.controller.pxe_env_check, + req, deploy_server_meta) diff --git a/code/daisy/daisy/tests/api/test_members.py b/code/daisy/daisy/tests/api/test_members.py index dd51628c..b1ac138b 100755 --- a/code/daisy/daisy/tests/api/test_members.py +++ b/code/daisy/daisy/tests/api/test_members.py @@ -11,37 +11,37 @@ # 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 mock -import webob -from daisy.context import RequestContext -from daisy import test -from daisy.api.v1 import members - - -class TestMembers(test.TestCase): - def setUp(self): - super(TestMembers, self).setUp() - self.controller = members.Controller() - - @mock.patch('daisy.api.backends.common._judge_ssh_host') - @mock.patch('daisy.registry.client.v1.api.update_host_metadata') - @mock.patch('daisy.registry.client.v1.api.delete_cluster_host') - @mock.patch('daisy.registry.client.v1.api.get_host_metadata') - @mock.patch('daisy.registry.client.v1.api.get_cluster_metadata') - def test_delete_cluster_host(self, mock_get_cluster, mock_get_host, - mock_delete_cluster_host, mock_update_host, - mock_judge_ssh_host): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, user='fake user', - tenant='fake tenant') - cluster_id = '1' - host_id = '1' - mock_get_cluster.return_value = {'id': '1', 'deleted': 0} - mock_get_host.return_value = {'id': '1', 'deleted': 0} - mock_delete_cluster_host.return_value = [] - mock_judge_ssh_host.return_value = False - mock_update_host.return_value = {} - self.controller.delete_cluster_host(req, cluster_id, host_id) - self.assertTrue(mock_update_host.called) +# under the License. + +import mock +import webob +from daisy.context import RequestContext +from daisy import test +from daisy.api.v1 import members + + +class TestMembers(test.TestCase): + def setUp(self): + super(TestMembers, self).setUp() + self.controller = members.Controller() + + @mock.patch('daisy.api.backends.common._judge_ssh_host') + @mock.patch('daisy.registry.client.v1.api.update_host_metadata') + @mock.patch('daisy.registry.client.v1.api.delete_cluster_host') + @mock.patch('daisy.registry.client.v1.api.get_host_metadata') + @mock.patch('daisy.registry.client.v1.api.get_cluster_metadata') + def test_delete_cluster_host(self, mock_get_cluster, mock_get_host, + mock_delete_cluster_host, mock_update_host, + mock_judge_ssh_host): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, user='fake user', + tenant='fake tenant') + cluster_id = '1' + host_id = '1' + mock_get_cluster.return_value = {'id': '1', 'deleted': 0} + mock_get_host.return_value = {'id': '1', 'deleted': 0} + mock_delete_cluster_host.return_value = [] + mock_judge_ssh_host.return_value = False + mock_update_host.return_value = {} + self.controller.delete_cluster_host(req, cluster_id, host_id) + self.assertTrue(mock_update_host.called) diff --git a/code/daisy/daisy/tests/api/test_network.py b/code/daisy/daisy/tests/api/test_network.py index 726e7d25..cf359133 100755 --- a/code/daisy/daisy/tests/api/test_network.py +++ b/code/daisy/daisy/tests/api/test_network.py @@ -11,1056 +11,1056 @@ # 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. - -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 -from webob import exc - -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_networks_detail") - @mock.patch("daisy.registry.client.v1.api.update_network_metadata") - @mock.patch("daisy.api.v1.networks.Controller.get_network_meta_or_404") - @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, - mock_get_network_meta_or_404, mock_update_network_metadata, - mock_get_networks_detail): - mock_get_network_meta_or_404.return_value = network_list[0] - #self.controller.get_network_meta_or_404 = \ - # mock.Mock(return_value=network_list[0]) - mock_get_networks_detail.return_value = network_list - #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'} - mock_update_network_metadata.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']) - - @mock.patch("daisy.registry.client.v1.api.add_network_metadata") - def test_add_network(self, mock_add_network_metadata): - 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'} - mock_add_network_metadata.return_value = network_meta - #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']) - - @mock.patch('daisy.api.common.valid_network_range') - @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_invalid_ip_ranges(self, get_cluster, get_networks, - add_network, - fake_valid_network_range): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenamet') - ip_ranges = [ - { - 'start': '12.18.1.5', - 'cidr': '12.18.1.1/24', - 'end': '12.18.1.5', - 'gateway': '12.18.1.2' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.5' - }, - ] - network_meta = {'name': 'PUBLICAPI', - 'network_type': 'PUBLICAPI', - 'ip_ranges': str(ip_ranges) - } - return_network = {'name': 'MANAGEMENT1', - 'network_type': 'MANAGEMENT', - 'custom_name': 'management1'} - fake_valid_network_range.return_value = True - self.assertRaises( - exc.HTTPForbidden, self.controller.add_network, req, network_meta) - - @mock.patch('daisy.api.common.valid_ip_ranges') - @mock.patch('daisy.api.common.valid_network_range') - @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_publicapi_net(self, get_cluster, get_networks, - add_network, fake_valid_network_range, - fake_valid_ip_ranges): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenamet') - ip_ranges = [ - { - 'start': '112.18.1.5', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.5', - 'gateway': '112.18.1.2' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.1' - }, - ] - network_meta = {'name': 'PUBLICAPI', - 'network_type': 'PUBLICAPI', - 'ip_ranges': str(ip_ranges), - 'cidr': '112.18.1.1/24' - } - return_network = {'name': 'PUBLICAPI', - 'network_type': 'PUBLICAPI'} - get_cluster.return_value = [] - get_networks.return_value = [] - add_network.return_value = return_network - fake_valid_network_range.return_value = True - network = self.controller.add_network(req, network_meta) - self.assertEqual('PUBLICAPI', - network['network_meta']['name']) - - @mock.patch('daisy.api.common.valid_ip_ranges') - @mock.patch('daisy.api.v1.networks.Controller.get_network_meta_or_404') - @mock.patch('daisy.api.common.valid_network_range') - @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_invalid_ip_ranges(self, - get_cluster, - get_networks, - add_network, - fake_valid_network_range, - fake_get_network_meta_or_404, - fake_valid_ip_ranges): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenamet') - ip_ranges = [ - { - 'start': '112.18.1.5', - 'cidr': '112.18.1.1/24', - 'gateway': '112.18.1.2' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.1' - }, - ] - network_meta = {'name': 'PUBLICAPI', - 'network_type': 'PUBLICAPI', - 'ip_ranges': str(ip_ranges), - 'cidr': '112.18.1.1/24' - } - return_network = {'name': 'PUBLICAPI', - 'network_type': 'PUBLICAPI'} - # get_cluster.return_value = [] - # get_networks.return_value = [] - # add_network.return_value = return_network - fake_valid_network_range.return_value = True - fake_get_network_meta_or_404.return_value = True - self.assertRaises( - exc.HTTPForbidden, self.controller.add_network, req, network_meta) - - @mock.patch('daisy.api.common.valid_ip_ranges') - @mock.patch('daisy.api.common.valid_network_range') - @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_dataplane_net(self, get_cluster, get_networks, - add_network, fake_valid_network_range, - fake_valid_ip_ranges): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenamet') - ip_ranges = [ - { - 'start': '112.18.1.5', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.5', - 'gateway': '112.18.1.2' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.1' - }, - ] - network_meta = {'name': 'DATAPLANE', - 'network_type': 'DATAPLANE', - 'ip_ranges': str(ip_ranges), - 'cidr': '112.18.1.1/24', - 'gateway': '112.18.1.1' - } - return_network = {'name': 'DATAPLANE', - 'network_type': 'DATAPLANE'} - get_cluster.return_value = [] - get_networks.return_value = [] - add_network.return_value = return_network - fake_valid_network_range.return_value = True - network = self.controller.add_network(req, network_meta) - self.assertEqual('DATAPLANE', - network['network_meta']['name']) - - @mock.patch('daisy.api.common.valid_ip_ranges') - @mock.patch('daisy.registry.client.v1.api.update_network_metadata') - @mock.patch('daisy.api.v1.networks.Controller._is_dataplane_in_use') - @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_dataplane_net(self, get_network_meta, - get_cluster_meta, - get_networks_detail, - fake_is_dataplane_in_use, - fake_update_network, - fake_valid_ip_ranges): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenamet') - ip_ranges = [ - { - 'start': '112.18.1.5', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.5', - 'gateway': '112.18.1.2' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.1' - }, - ] - network_id = 'cf531581-a283-41dd-9e4e-4b98454d54e7' - network_meta = {'cluster_id': '1', - 'name': 'physnet1', - 'network_type': 'DATAPLANE', - 'segmentation_type': 'vxlan', - 'ip_ranges': str(ip_ranges), - 'cidr': '112.18.1.1/24', } - orig_network_meta = {'cidr': '112.18.1.1/24', - 'gateway': '112.18.1.1', - 'cluster_id': '1', - 'vlan_id': None, - 'deleted': False, - 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', - 'network_type': 'DATAPLANE', - 'segmentation_type': 'vxlan', - 'type': 'default'} - cluster_meta = {'id': '1', 'deleted': False, } - networks_detail = [{'cluster_id': '1', - 'gateway': '112.18.1.1', - 'vlan_id': None, - 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', - 'ip_ranges': [ - { - 'end': '112.18.1.16', - 'start': '112.18.1.17'}], - 'name': 'physnet1', - 'network_type': 'DATAPLANE', - 'physnet_name': 'physnet_eth1', - 'segmentation_type': 'vxlan', - 'type': 'default'}] - - get_network_meta.return_value = orig_network_meta - get_cluster_meta.return_value = cluster_meta - get_networks_detail.return_value = networks_detail - fake_update_network.return_value = network_meta - fake_is_dataplane_in_use.return_value = False - updated_network = self.controller.update_network( - req, network_id, network_meta) - self.assertEqual('physnet1', updated_network['network_meta']['name']) - - @mock.patch('daisy.api.common.valid_ip_ranges') - @mock.patch('daisy.registry.client.v1.api.update_network_metadata') - @mock.patch('daisy.api.v1.networks.Controller._is_dataplane_in_use') - @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_publicapi_net(self, get_network_meta, - get_cluster_meta, - get_networks_detail, - fake_is_dataplane_in_use, - fake_update_network, - fake_valid_ip_ranges): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenamet') - ip_ranges = [ - { - 'start': '112.18.1.5', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.5', - 'gateway': '112.18.1.2' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.1' - }, - ] - network_id = 'cf531581-a283-41dd-9e4e-4b98454d54e7' - network_meta = {'cluster_id': '1', - 'name': 'PUBLICAPI', - 'network_type': 'PUBLICAPI', - 'segmentation_type': 'vxlan', - 'ip_ranges': str(ip_ranges), - 'cidr': '112.18.1.1/24', } - orig_network_meta = {'cidr': '112.18.1.1/24', - 'gateway': '112.18.1.1', - 'cluster_id': '1', - 'vlan_id': None, - 'deleted': False, - 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', - 'network_type': 'PUBLICAPI', - 'type': 'default'} - cluster_meta = {'id': '1', 'deleted': False, } - networks_detail = [{'cluster_id': '1', - 'gateway': '112.18.1.1', - 'vlan_id': None, - 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', - 'ip_ranges': [ - { - 'end': '112.18.1.16', - 'start': '112.18.1.17'}], - 'name': 'physnet1', - 'network_type': 'PUBLICAPI', - 'physnet_name': 'PUBLICAPI', - 'type': 'default'}] - - get_network_meta.return_value = orig_network_meta - get_cluster_meta.return_value = cluster_meta - get_networks_detail.return_value = networks_detail - fake_update_network.return_value = network_meta - fake_is_dataplane_in_use.return_value = False - updated_network = self.controller.update_network( - req, network_id, network_meta) - self.assertEqual('PUBLICAPI', updated_network['network_meta']['name']) - - @mock.patch('daisy.api.common.valid_ip_ranges') - @mock.patch('daisy.registry.client.v1.api.update_network_metadata') - @mock.patch('daisy.api.v1.networks.Controller._is_dataplane_in_use') - @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_invalid_cidr(self, get_network_meta, - get_cluster_meta, - get_networks_detail, - fake_is_dataplane_in_use, - fake_update_network, - fake_valid_ip_ranges): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenamet') - ip_ranges = [ - { - 'start': '112.18.1.5', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.5', - 'gateway': '112.18.1.2' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.1' - }, - ] - network_id = 'cf531581-a283-41dd-9e4e-4b98454d54e7' - network_meta = {'cluster_id': '1', - 'name': 'PUBLICAPI', - 'network_type': 'PUBLICAPI', - 'ip_ranges': str(ip_ranges), - 'cidr': None} - orig_network_meta = {'cidr': None, - 'gateway': '112.18.1.1', - 'cluster_id': '1', - 'vlan_id': None, - 'deleted': False, - 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', - 'network_type': 'PUBLICAPI', - 'type': 'default'} - cluster_meta = {'id': '1', 'deleted': False, } - networks_detail = [{'cluster_id': '1', - 'gateway': '112.18.1.1', - 'vlan_id': None, - 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', - 'ip_ranges': [ - { - 'end': '112.18.1.16', - 'start': '112.18.1.17'}], - 'name': 'physnet1', - 'network_type': 'PUBLICAPI', - 'type': 'default'}] - - get_network_meta.return_value = orig_network_meta - get_cluster_meta.return_value = cluster_meta - get_networks_detail.return_value = networks_detail - fake_update_network.return_value = network_meta - fake_is_dataplane_in_use.return_value = False - self.assertRaises(exc.HTTPForbidden, self.controller.update_network, - req, network_id, network_meta) - - @mock.patch('daisy.api.common.valid_ip_ranges') - @mock.patch('daisy.registry.client.v1.api.update_network_metadata') - @mock.patch('daisy.api.v1.networks.Controller._is_dataplane_in_use') - @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_invalid_ipranges(self, get_network_meta, - get_cluster_meta, - get_networks_detail, - fake_is_dataplane_in_use, - fake_update_network, - fake_valid_ip_ranges): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenamet') - ip_ranges = [ - { - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.5', - 'gateway': '112.18.1.2' - }, - { - 'start': '112.18.1.15', - 'cidr': '112.18.1.1/24', - 'end': '112.18.1.15', - 'gateway': '112.18.1.1' - }, - ] - network_id = 'cf531581-a283-41dd-9e4e-4b98454d54e7' - network_meta = {'cluster_id': '1', - 'name': 'PUBLICAPI', - 'network_type': 'PUBLICAPI', - 'ip_ranges': str(ip_ranges), - 'cidr': '112.18.1.1/24'} - orig_network_meta = {'cidr': '112.18.1.1/24', - 'gateway': '112.18.1.1', - 'cluster_id': '1', - 'vlan_id': None, - 'deleted': False, - 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', - 'network_type': 'PUBLICAPI', - 'type': 'default'} - cluster_meta = {'id': '1', 'deleted': False, } - networks_detail = [{'cluster_id': '1', - 'gateway': '112.18.1.1', - 'vlan_id': None, - 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', - 'ip_ranges': [ - { - 'end': '112.18.1.16', - 'start': '112.18.1.17'}], - 'name': 'physnet1', - 'network_type': 'PUBLICAPI', - 'type': 'default'}] - - get_network_meta.return_value = orig_network_meta - get_cluster_meta.return_value = cluster_meta - get_networks_detail.return_value = networks_detail - fake_update_network.return_value = network_meta - fake_is_dataplane_in_use.return_value = False - self.assertRaises(exc.HTTPForbidden, self.controller.update_network, - req, network_id, network_meta) +# under the License. + +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 +from webob import exc + +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_networks_detail") + @mock.patch("daisy.registry.client.v1.api.update_network_metadata") + @mock.patch("daisy.api.v1.networks.Controller.get_network_meta_or_404") + @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, + mock_get_network_meta_or_404, mock_update_network_metadata, + mock_get_networks_detail): + mock_get_network_meta_or_404.return_value = network_list[0] + #self.controller.get_network_meta_or_404 = \ + # mock.Mock(return_value=network_list[0]) + mock_get_networks_detail.return_value = network_list + #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'} + mock_update_network_metadata.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']) + + @mock.patch("daisy.registry.client.v1.api.add_network_metadata") + def test_add_network(self, mock_add_network_metadata): + 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'} + mock_add_network_metadata.return_value = network_meta + #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']) + + @mock.patch('daisy.api.common.valid_network_range') + @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_invalid_ip_ranges(self, get_cluster, get_networks, + add_network, + fake_valid_network_range): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenamet') + ip_ranges = [ + { + 'start': '12.18.1.5', + 'cidr': '12.18.1.1/24', + 'end': '12.18.1.5', + 'gateway': '12.18.1.2' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.5' + }, + ] + network_meta = {'name': 'PUBLICAPI', + 'network_type': 'PUBLICAPI', + 'ip_ranges': str(ip_ranges) + } + return_network = {'name': 'MANAGEMENT1', + 'network_type': 'MANAGEMENT', + 'custom_name': 'management1'} + fake_valid_network_range.return_value = True + self.assertRaises( + exc.HTTPForbidden, self.controller.add_network, req, network_meta) + + @mock.patch('daisy.api.common.valid_ip_ranges') + @mock.patch('daisy.api.common.valid_network_range') + @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_publicapi_net(self, get_cluster, get_networks, + add_network, fake_valid_network_range, + fake_valid_ip_ranges): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenamet') + ip_ranges = [ + { + 'start': '112.18.1.5', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.5', + 'gateway': '112.18.1.2' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.1' + }, + ] + network_meta = {'name': 'PUBLICAPI', + 'network_type': 'PUBLICAPI', + 'ip_ranges': str(ip_ranges), + 'cidr': '112.18.1.1/24' + } + return_network = {'name': 'PUBLICAPI', + 'network_type': 'PUBLICAPI'} + get_cluster.return_value = [] + get_networks.return_value = [] + add_network.return_value = return_network + fake_valid_network_range.return_value = True + network = self.controller.add_network(req, network_meta) + self.assertEqual('PUBLICAPI', + network['network_meta']['name']) + + @mock.patch('daisy.api.common.valid_ip_ranges') + @mock.patch('daisy.api.v1.networks.Controller.get_network_meta_or_404') + @mock.patch('daisy.api.common.valid_network_range') + @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_invalid_ip_ranges(self, + get_cluster, + get_networks, + add_network, + fake_valid_network_range, + fake_get_network_meta_or_404, + fake_valid_ip_ranges): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenamet') + ip_ranges = [ + { + 'start': '112.18.1.5', + 'cidr': '112.18.1.1/24', + 'gateway': '112.18.1.2' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.1' + }, + ] + network_meta = {'name': 'PUBLICAPI', + 'network_type': 'PUBLICAPI', + 'ip_ranges': str(ip_ranges), + 'cidr': '112.18.1.1/24' + } + return_network = {'name': 'PUBLICAPI', + 'network_type': 'PUBLICAPI'} + # get_cluster.return_value = [] + # get_networks.return_value = [] + # add_network.return_value = return_network + fake_valid_network_range.return_value = True + fake_get_network_meta_or_404.return_value = True + self.assertRaises( + exc.HTTPForbidden, self.controller.add_network, req, network_meta) + + @mock.patch('daisy.api.common.valid_ip_ranges') + @mock.patch('daisy.api.common.valid_network_range') + @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_dataplane_net(self, get_cluster, get_networks, + add_network, fake_valid_network_range, + fake_valid_ip_ranges): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenamet') + ip_ranges = [ + { + 'start': '112.18.1.5', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.5', + 'gateway': '112.18.1.2' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.1' + }, + ] + network_meta = {'name': 'DATAPLANE', + 'network_type': 'DATAPLANE', + 'ip_ranges': str(ip_ranges), + 'cidr': '112.18.1.1/24', + 'gateway': '112.18.1.1' + } + return_network = {'name': 'DATAPLANE', + 'network_type': 'DATAPLANE'} + get_cluster.return_value = [] + get_networks.return_value = [] + add_network.return_value = return_network + fake_valid_network_range.return_value = True + network = self.controller.add_network(req, network_meta) + self.assertEqual('DATAPLANE', + network['network_meta']['name']) + + @mock.patch('daisy.api.common.valid_ip_ranges') + @mock.patch('daisy.registry.client.v1.api.update_network_metadata') + @mock.patch('daisy.api.v1.networks.Controller._is_dataplane_in_use') + @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_dataplane_net(self, get_network_meta, + get_cluster_meta, + get_networks_detail, + fake_is_dataplane_in_use, + fake_update_network, + fake_valid_ip_ranges): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenamet') + ip_ranges = [ + { + 'start': '112.18.1.5', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.5', + 'gateway': '112.18.1.2' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.1' + }, + ] + network_id = 'cf531581-a283-41dd-9e4e-4b98454d54e7' + network_meta = {'cluster_id': '1', + 'name': 'physnet1', + 'network_type': 'DATAPLANE', + 'segmentation_type': 'vxlan', + 'ip_ranges': str(ip_ranges), + 'cidr': '112.18.1.1/24', } + orig_network_meta = {'cidr': '112.18.1.1/24', + 'gateway': '112.18.1.1', + 'cluster_id': '1', + 'vlan_id': None, + 'deleted': False, + 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', + 'network_type': 'DATAPLANE', + 'segmentation_type': 'vxlan', + 'type': 'default'} + cluster_meta = {'id': '1', 'deleted': False, } + networks_detail = [{'cluster_id': '1', + 'gateway': '112.18.1.1', + 'vlan_id': None, + 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', + 'ip_ranges': [ + { + 'end': '112.18.1.16', + 'start': '112.18.1.17'}], + 'name': 'physnet1', + 'network_type': 'DATAPLANE', + 'physnet_name': 'physnet_eth1', + 'segmentation_type': 'vxlan', + 'type': 'default'}] + + get_network_meta.return_value = orig_network_meta + get_cluster_meta.return_value = cluster_meta + get_networks_detail.return_value = networks_detail + fake_update_network.return_value = network_meta + fake_is_dataplane_in_use.return_value = False + updated_network = self.controller.update_network( + req, network_id, network_meta) + self.assertEqual('physnet1', updated_network['network_meta']['name']) + + @mock.patch('daisy.api.common.valid_ip_ranges') + @mock.patch('daisy.registry.client.v1.api.update_network_metadata') + @mock.patch('daisy.api.v1.networks.Controller._is_dataplane_in_use') + @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_publicapi_net(self, get_network_meta, + get_cluster_meta, + get_networks_detail, + fake_is_dataplane_in_use, + fake_update_network, + fake_valid_ip_ranges): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenamet') + ip_ranges = [ + { + 'start': '112.18.1.5', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.5', + 'gateway': '112.18.1.2' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.1' + }, + ] + network_id = 'cf531581-a283-41dd-9e4e-4b98454d54e7' + network_meta = {'cluster_id': '1', + 'name': 'PUBLICAPI', + 'network_type': 'PUBLICAPI', + 'segmentation_type': 'vxlan', + 'ip_ranges': str(ip_ranges), + 'cidr': '112.18.1.1/24', } + orig_network_meta = {'cidr': '112.18.1.1/24', + 'gateway': '112.18.1.1', + 'cluster_id': '1', + 'vlan_id': None, + 'deleted': False, + 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', + 'network_type': 'PUBLICAPI', + 'type': 'default'} + cluster_meta = {'id': '1', 'deleted': False, } + networks_detail = [{'cluster_id': '1', + 'gateway': '112.18.1.1', + 'vlan_id': None, + 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', + 'ip_ranges': [ + { + 'end': '112.18.1.16', + 'start': '112.18.1.17'}], + 'name': 'physnet1', + 'network_type': 'PUBLICAPI', + 'physnet_name': 'PUBLICAPI', + 'type': 'default'}] + + get_network_meta.return_value = orig_network_meta + get_cluster_meta.return_value = cluster_meta + get_networks_detail.return_value = networks_detail + fake_update_network.return_value = network_meta + fake_is_dataplane_in_use.return_value = False + updated_network = self.controller.update_network( + req, network_id, network_meta) + self.assertEqual('PUBLICAPI', updated_network['network_meta']['name']) + + @mock.patch('daisy.api.common.valid_ip_ranges') + @mock.patch('daisy.registry.client.v1.api.update_network_metadata') + @mock.patch('daisy.api.v1.networks.Controller._is_dataplane_in_use') + @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_invalid_cidr(self, get_network_meta, + get_cluster_meta, + get_networks_detail, + fake_is_dataplane_in_use, + fake_update_network, + fake_valid_ip_ranges): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenamet') + ip_ranges = [ + { + 'start': '112.18.1.5', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.5', + 'gateway': '112.18.1.2' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.1' + }, + ] + network_id = 'cf531581-a283-41dd-9e4e-4b98454d54e7' + network_meta = {'cluster_id': '1', + 'name': 'PUBLICAPI', + 'network_type': 'PUBLICAPI', + 'ip_ranges': str(ip_ranges), + 'cidr': None} + orig_network_meta = {'cidr': None, + 'gateway': '112.18.1.1', + 'cluster_id': '1', + 'vlan_id': None, + 'deleted': False, + 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', + 'network_type': 'PUBLICAPI', + 'type': 'default'} + cluster_meta = {'id': '1', 'deleted': False, } + networks_detail = [{'cluster_id': '1', + 'gateway': '112.18.1.1', + 'vlan_id': None, + 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', + 'ip_ranges': [ + { + 'end': '112.18.1.16', + 'start': '112.18.1.17'}], + 'name': 'physnet1', + 'network_type': 'PUBLICAPI', + 'type': 'default'}] + + get_network_meta.return_value = orig_network_meta + get_cluster_meta.return_value = cluster_meta + get_networks_detail.return_value = networks_detail + fake_update_network.return_value = network_meta + fake_is_dataplane_in_use.return_value = False + self.assertRaises(exc.HTTPForbidden, self.controller.update_network, + req, network_id, network_meta) + + @mock.patch('daisy.api.common.valid_ip_ranges') + @mock.patch('daisy.registry.client.v1.api.update_network_metadata') + @mock.patch('daisy.api.v1.networks.Controller._is_dataplane_in_use') + @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_invalid_ipranges(self, get_network_meta, + get_cluster_meta, + get_networks_detail, + fake_is_dataplane_in_use, + fake_update_network, + fake_valid_ip_ranges): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenamet') + ip_ranges = [ + { + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.5', + 'gateway': '112.18.1.2' + }, + { + 'start': '112.18.1.15', + 'cidr': '112.18.1.1/24', + 'end': '112.18.1.15', + 'gateway': '112.18.1.1' + }, + ] + network_id = 'cf531581-a283-41dd-9e4e-4b98454d54e7' + network_meta = {'cluster_id': '1', + 'name': 'PUBLICAPI', + 'network_type': 'PUBLICAPI', + 'ip_ranges': str(ip_ranges), + 'cidr': '112.18.1.1/24'} + orig_network_meta = {'cidr': '112.18.1.1/24', + 'gateway': '112.18.1.1', + 'cluster_id': '1', + 'vlan_id': None, + 'deleted': False, + 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', + 'network_type': 'PUBLICAPI', + 'type': 'default'} + cluster_meta = {'id': '1', 'deleted': False, } + networks_detail = [{'cluster_id': '1', + 'gateway': '112.18.1.1', + 'vlan_id': None, + 'id': 'cf531581-a283-41dd-9e4e-4b98454d54e7', + 'ip_ranges': [ + { + 'end': '112.18.1.16', + 'start': '112.18.1.17'}], + 'name': 'physnet1', + 'network_type': 'PUBLICAPI', + 'type': 'default'}] + + get_network_meta.return_value = orig_network_meta + get_cluster_meta.return_value = cluster_meta + get_networks_detail.return_value = networks_detail + fake_update_network.return_value = network_meta + fake_is_dataplane_in_use.return_value = False + self.assertRaises(exc.HTTPForbidden, self.controller.update_network, + req, network_id, network_meta) diff --git a/code/daisy/daisy/tests/api/test_template.py b/code/daisy/daisy/tests/api/test_template.py index b2a8906e..46df8456 100755 --- a/code/daisy/daisy/tests/api/test_template.py +++ b/code/daisy/daisy/tests/api/test_template.py @@ -11,273 +11,273 @@ # 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 mock -import webob -from daisy.context import RequestContext -import daisy.registry.client.v1.api as registry -from daisy import test -from daisy.api.v1 import template -from webob.exc import HTTPForbidden -from webob.exc import HTTPBadRequest - - -cluster = {'vlan_end': None, - 'updated_at': '2016-07-19T02:16:05.000000', - 'owner': None, - 'networking_parameters': { - 'vni_range': [None, None], - 'public_vip': '192.168.1.4', - 'net_l23_provider': None, - 'base_mac': '', - 'gre_id_range': [None, - None], - 'vlan_range': [None, None], - 'segmentation_type': None}, - 'gre_id_start': None, - 'deleted_at': None, - 'networks': [ - 'd3d60abf-c8d1-49ec-9731-d500b1ef4acb', - 'bc99206e-0ac2-4b6e-9cd3-d4cdd11c208e', - '8518a8a5-e5fb-41ba-877f-eef386e3376f', - '8048a7d7-7b85-4621-837c-adea08acdbbd', - '6aacb625-99f2-4a95-b98f-ec0af256eb55', - '4ad601b0-19e2-4feb-b41a-6e3af5153e2a'], - 'id': '4d3156ba-a4a5-4f41-914c-7a148170f281', - 'base_mac': '', - 'auto_scale': 0, - 'target_systems': 'os+tecs', - 'vni_end': None, - 'gre_id_end': None, - 'nodes': [ - '6e3a0ab9-fff6-459b-8bf1-9b6681efbfb0', - 'd25666c1-651a-4cd7-875a-41a52fddaf6b', - 'd04cfa48-c3ad-477c-b2ac-95bee7582181', - '4b6970c5-ef1d-4599-a1d7-70175a888e6d'], - 'description': '', - 'deleted': False, - 'routers': [], - 'logic_networks': [], - 'net_l23_provider': None, - 'vlan_start': None, - 'name': 'test', - 'created_at': '2016-07-18T02:34:52.000000', - 'public_vip': '192.168.1.4', - 'use_dns': 1, - 'vni_start': None, - 'segmentation_type': None} - - -return_template = [{'name': 'test', - 'hosts': None, - 'content': '{"cluster":{"description": "",' - '"routers": [],' - '"logic_networks": [],' - '"auto_scale": 0,' - '"use_dns": 1,' - '"target_systems": "os+tecs",' - '"networking_parameters":' - '{"public_vip": "192.168.2.10",' - '"base_mac": ""},' - '"tecs_version_id": "d48fbec7-8764-4d44-' - 'b27a-fba7bbcc57d9"},' - '"networks":[{"ip_ranges": [],' - '"cidr": "10.43.178.1/24",' - '"network_type": "DATAPLANE",' - '"name": "physnet1"},' - '{"ip_ranges": [],' - '"cidr": "192.168.1.1/24",' - '"network_type": "MANAGEMENT",' - '"name": "MANAGEMENT"},' - '{"ip_ranges": [],' - '"cidr": "192.168.2.1/24",' - '"network_type": "PUBLICAPI",' - '"name": "PUBLICAPI"}],' - '"roles":[{"name": "CONTROLLER_HA", ' - '"config_set_id": "1"},' - '{"name": "CONTROLLER_LB",' - '"config_set_id": "2"},' - '{"name": "COMPUTER",' - '"config_set_id": "3"}],' - '"cinder_volumes":[],' - '"services_disk":[]}', - 'type': 'tecs'}] - - -networks = [{"name": "physnet1", - 'id': '1'}, - {"name": "MANAGEMENT", - 'id': '2'}, - {"name": "PUBLICAPI", - 'id': '3'}] - -roles = [{"name": "CONTROLLER_HA", - 'id': '1'}, - {"name": "CONTROLLER_LB", - 'id': '2'}, - {"name": "COMPUTER", - 'id': '3'}] - - -class TestTemplate(test.TestCase): - - def setUp(self): - super(TestTemplate, self).setUp() - self.controller = template.Controller() - - def test_del_cluster_params(self): - self.controller._del_cluster_params(cluster) - self.assertEqual(None, cluster.get('base_mac', None)) - self.assertEqual(None, cluster.get('name', None)) - self.assertEqual(None, cluster.get('networks', None)) - self.assertEqual(None, cluster.get('vlan_start', None)) - self.assertEqual(None, cluster.get('vlan_end', None)) - self.assertEqual(None, cluster.get('vni_start', None)) - self.assertEqual(None, cluster.get('vni_end', None)) - self.assertEqual(None, cluster.get('gre_id_start', None)) - self.assertEqual(None, cluster.get('gre_id_end', None)) - - def test_get_template_detail(self): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - template_id = "123" - registry.template_detail_metadata = mock.Mock( - return_value={"template_name": "test"}) - template_meta = self.controller.get_template_detail(req, template_id) - self.assertEqual("test", template_meta['template']['template_name']) - - def test_update_template(self): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - template_id = "123" - template = {} - registry.update_template_metadata = mock.Mock( - return_value={"template_name": "test"}) - template_meta = self.controller.update_template( - req, template_id, template) - self.assertEqual("test", template_meta['template']['template_name']) - - def test_add_template(self): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - template = {"template_name": "test"} - registry.add_template_metadata = mock.Mock( - return_value={"template_name": "test"}) - template_meta = self.controller.add_template(req, template) - self.assertEqual("test", template_meta['template']['template_name']) - - def test_get_template_lists(self): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - self.controller._get_query_params = mock.Mock( - return_value={'filter': {}}) - template = {"template_name": "test"} - registry.template_lists_metadata = mock.Mock(return_value=[]) - templates = self.controller.get_template_lists(req) - self.assertEqual([], templates['template']) - - def test_get_services_disk(self): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - role = {'id': '1', 'name': 'COMPUTER'} - registry.list_service_disk_metadata = mock.Mock(return_value=[]) - service_disk = self.controller._get_services_disk(req, role) - self.assertEqual([], service_disk) - - def test_delete_template(self): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - template_id = "123" - registry.delete_template_metadata = mock.Mock(return_value={""}) - template = self.controller.delete_template(req, template_id) - self.assertEqual(200, template.status_code) - - def test_export_db_to_json(self): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - template = {'cluster_name': 'cluster1', 'description': 'desc'} - registry.get_clusters_detail = mock.Mock(return_value={}) - self.assertRaises( - HTTPForbidden, self.controller.export_db_to_json, req, template) - - @mock.patch('daisy.registry.client.v1.api.' - 'list_optical_switch_metadata') - def test_get_optical_switchs(self, mock_list_optical_switch): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - role = {'id': '1', - 'name': 'CONTROLLER_HA'} - optical_switchs = [{'role_id': '1', - 'created_at': '12:23', - 'updated_at': '12:23', - 'deleted': '12:23', - 'deleted_at': '12:23', - 'id': '1234'}] - mock_list_optical_switch.return_value = optical_switchs - optical_switchs_return = self.controller._get_optical_switchs(req, - role) - self.assertEqual('CONTROLLER_HA', optical_switchs_return[0]['role_id']) - - def test_import_optical_switchs_to_db(self): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - optical_switchs = [{'role_id': 'CONTROLLER_HA'}] - roles = [{'id': '2', - 'name': 'CONTROLLER_LB'}] - self.assertRaises(HTTPBadRequest, - self.controller._import_optical_switchs_to_db, - req, optical_switchs, roles) - - @mock.patch('daisy.registry.client.v1.api.add_service_disk_metadata') - @mock.patch('daisy.registry.client.v1.api.add_optical_switch_metadata') - @mock.patch('daisy.registry.client.v1.api.add_cinder_volume_metadata') - @mock.patch('daisy.registry.client.v1.api.update_role_metadata') - @mock.patch('daisy.registry.client.v1.api.get_roles_detail') - @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.add_cluster_metadata') - @mock.patch('daisy.registry.client.v1.api.get_clusters_detail') - @mock.patch('daisy.registry.client.v1.api.template_lists_metadata') - def test_import_template_to_db_without_optical_switchs( - self, mock_get_template, mock_get_cluster, mock_add_cluster, - mock_get_networks, mock_update_network, mock_get_roles, - mock_update_role, mock_add_cinder_volume, mock_add_optical_switch, - mock_add_service_disk): - req = webob.Request.blank('/') - req.context = RequestContext(is_admin=True, - user='fake user', - tenant='fake tenant') - template = {'cluster': 'test', 'template_name': 'test'} - mock_get_template.return_value = return_template - mock_get_cluster.return_value = [] - mock_add_cluster.return_value = cluster - mock_get_networks.return_value = networks - mock_update_network.return_value = [] - mock_get_roles.return_value = roles - mock_update_role.return_value = [] - mock_add_cinder_volume.return_value = [] - mock_add_optical_switch.return_value = [] - mock_add_service_disk.return_value = [] - self.assertEqual('4d3156ba-a4a5-4f41-914c-7a148170f281', - self.controller. - import_template_to_db(req, template) - ['template']['id']) +# under the License. + +import mock +import webob +from daisy.context import RequestContext +import daisy.registry.client.v1.api as registry +from daisy import test +from daisy.api.v1 import template +from webob.exc import HTTPForbidden +from webob.exc import HTTPBadRequest + + +cluster = {'vlan_end': None, + 'updated_at': '2016-07-19T02:16:05.000000', + 'owner': None, + 'networking_parameters': { + 'vni_range': [None, None], + 'public_vip': '192.168.1.4', + 'net_l23_provider': None, + 'base_mac': '', + 'gre_id_range': [None, + None], + 'vlan_range': [None, None], + 'segmentation_type': None}, + 'gre_id_start': None, + 'deleted_at': None, + 'networks': [ + 'd3d60abf-c8d1-49ec-9731-d500b1ef4acb', + 'bc99206e-0ac2-4b6e-9cd3-d4cdd11c208e', + '8518a8a5-e5fb-41ba-877f-eef386e3376f', + '8048a7d7-7b85-4621-837c-adea08acdbbd', + '6aacb625-99f2-4a95-b98f-ec0af256eb55', + '4ad601b0-19e2-4feb-b41a-6e3af5153e2a'], + 'id': '4d3156ba-a4a5-4f41-914c-7a148170f281', + 'base_mac': '', + 'auto_scale': 0, + 'target_systems': 'os+tecs', + 'vni_end': None, + 'gre_id_end': None, + 'nodes': [ + '6e3a0ab9-fff6-459b-8bf1-9b6681efbfb0', + 'd25666c1-651a-4cd7-875a-41a52fddaf6b', + 'd04cfa48-c3ad-477c-b2ac-95bee7582181', + '4b6970c5-ef1d-4599-a1d7-70175a888e6d'], + 'description': '', + 'deleted': False, + 'routers': [], + 'logic_networks': [], + 'net_l23_provider': None, + 'vlan_start': None, + 'name': 'test', + 'created_at': '2016-07-18T02:34:52.000000', + 'public_vip': '192.168.1.4', + 'use_dns': 1, + 'vni_start': None, + 'segmentation_type': None} + + +return_template = [{'name': 'test', + 'hosts': None, + 'content': '{"cluster":{"description": "",' + '"routers": [],' + '"logic_networks": [],' + '"auto_scale": 0,' + '"use_dns": 1,' + '"target_systems": "os+tecs",' + '"networking_parameters":' + '{"public_vip": "192.168.2.10",' + '"base_mac": ""},' + '"tecs_version_id": "d48fbec7-8764-4d44-' + 'b27a-fba7bbcc57d9"},' + '"networks":[{"ip_ranges": [],' + '"cidr": "10.43.178.1/24",' + '"network_type": "DATAPLANE",' + '"name": "physnet1"},' + '{"ip_ranges": [],' + '"cidr": "192.168.1.1/24",' + '"network_type": "MANAGEMENT",' + '"name": "MANAGEMENT"},' + '{"ip_ranges": [],' + '"cidr": "192.168.2.1/24",' + '"network_type": "PUBLICAPI",' + '"name": "PUBLICAPI"}],' + '"roles":[{"name": "CONTROLLER_HA", ' + '"config_set_id": "1"},' + '{"name": "CONTROLLER_LB",' + '"config_set_id": "2"},' + '{"name": "COMPUTER",' + '"config_set_id": "3"}],' + '"cinder_volumes":[],' + '"services_disk":[]}', + 'type': 'tecs'}] + + +networks = [{"name": "physnet1", + 'id': '1'}, + {"name": "MANAGEMENT", + 'id': '2'}, + {"name": "PUBLICAPI", + 'id': '3'}] + +roles = [{"name": "CONTROLLER_HA", + 'id': '1'}, + {"name": "CONTROLLER_LB", + 'id': '2'}, + {"name": "COMPUTER", + 'id': '3'}] + + +class TestTemplate(test.TestCase): + + def setUp(self): + super(TestTemplate, self).setUp() + self.controller = template.Controller() + + def test_del_cluster_params(self): + self.controller._del_cluster_params(cluster) + self.assertEqual(None, cluster.get('base_mac', None)) + self.assertEqual(None, cluster.get('name', None)) + self.assertEqual(None, cluster.get('networks', None)) + self.assertEqual(None, cluster.get('vlan_start', None)) + self.assertEqual(None, cluster.get('vlan_end', None)) + self.assertEqual(None, cluster.get('vni_start', None)) + self.assertEqual(None, cluster.get('vni_end', None)) + self.assertEqual(None, cluster.get('gre_id_start', None)) + self.assertEqual(None, cluster.get('gre_id_end', None)) + + def test_get_template_detail(self): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + template_id = "123" + registry.template_detail_metadata = mock.Mock( + return_value={"template_name": "test"}) + template_meta = self.controller.get_template_detail(req, template_id) + self.assertEqual("test", template_meta['template']['template_name']) + + def test_update_template(self): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + template_id = "123" + template = {} + registry.update_template_metadata = mock.Mock( + return_value={"template_name": "test"}) + template_meta = self.controller.update_template( + req, template_id, template) + self.assertEqual("test", template_meta['template']['template_name']) + + def test_add_template(self): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + template = {"template_name": "test"} + registry.add_template_metadata = mock.Mock( + return_value={"template_name": "test"}) + template_meta = self.controller.add_template(req, template) + self.assertEqual("test", template_meta['template']['template_name']) + + def test_get_template_lists(self): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + self.controller._get_query_params = mock.Mock( + return_value={'filter': {}}) + template = {"template_name": "test"} + registry.template_lists_metadata = mock.Mock(return_value=[]) + templates = self.controller.get_template_lists(req) + self.assertEqual([], templates['template']) + + def test_get_services_disk(self): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + role = {'id': '1', 'name': 'COMPUTER'} + registry.list_service_disk_metadata = mock.Mock(return_value=[]) + service_disk = self.controller._get_services_disk(req, role) + self.assertEqual([], service_disk) + + def test_delete_template(self): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + template_id = "123" + registry.delete_template_metadata = mock.Mock(return_value={""}) + template = self.controller.delete_template(req, template_id) + self.assertEqual(200, template.status_code) + + def test_export_db_to_json(self): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + template = {'cluster_name': 'cluster1', 'description': 'desc'} + registry.get_clusters_detail = mock.Mock(return_value={}) + self.assertRaises( + HTTPForbidden, self.controller.export_db_to_json, req, template) + + @mock.patch('daisy.registry.client.v1.api.' + 'list_optical_switch_metadata') + def test_get_optical_switchs(self, mock_list_optical_switch): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + role = {'id': '1', + 'name': 'CONTROLLER_HA'} + optical_switchs = [{'role_id': '1', + 'created_at': '12:23', + 'updated_at': '12:23', + 'deleted': '12:23', + 'deleted_at': '12:23', + 'id': '1234'}] + mock_list_optical_switch.return_value = optical_switchs + optical_switchs_return = self.controller._get_optical_switchs(req, + role) + self.assertEqual('CONTROLLER_HA', optical_switchs_return[0]['role_id']) + + def test_import_optical_switchs_to_db(self): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + optical_switchs = [{'role_id': 'CONTROLLER_HA'}] + roles = [{'id': '2', + 'name': 'CONTROLLER_LB'}] + self.assertRaises(HTTPBadRequest, + self.controller._import_optical_switchs_to_db, + req, optical_switchs, roles) + + @mock.patch('daisy.registry.client.v1.api.add_service_disk_metadata') + @mock.patch('daisy.registry.client.v1.api.add_optical_switch_metadata') + @mock.patch('daisy.registry.client.v1.api.add_cinder_volume_metadata') + @mock.patch('daisy.registry.client.v1.api.update_role_metadata') + @mock.patch('daisy.registry.client.v1.api.get_roles_detail') + @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.add_cluster_metadata') + @mock.patch('daisy.registry.client.v1.api.get_clusters_detail') + @mock.patch('daisy.registry.client.v1.api.template_lists_metadata') + def test_import_template_to_db_without_optical_switchs( + self, mock_get_template, mock_get_cluster, mock_add_cluster, + mock_get_networks, mock_update_network, mock_get_roles, + mock_update_role, mock_add_cinder_volume, mock_add_optical_switch, + mock_add_service_disk): + req = webob.Request.blank('/') + req.context = RequestContext(is_admin=True, + user='fake user', + tenant='fake tenant') + template = {'cluster': 'test', 'template_name': 'test'} + mock_get_template.return_value = return_template + mock_get_cluster.return_value = [] + mock_add_cluster.return_value = cluster + mock_get_networks.return_value = networks + mock_update_network.return_value = [] + mock_get_roles.return_value = roles + mock_update_role.return_value = [] + mock_add_cinder_volume.return_value = [] + mock_add_optical_switch.return_value = [] + mock_add_service_disk.return_value = [] + self.assertEqual('4d3156ba-a4a5-4f41-914c-7a148170f281', + self.controller. + import_template_to_db(req, template) + ['template']['id'])