diff options
-rw-r--r-- | newton/newton/registration/tests/test_registration.py | 502 | ||||
-rw-r--r-- | newton/newton/registration/tests/test_registration.py.bak | 350 |
2 files changed, 664 insertions, 188 deletions
diff --git a/newton/newton/registration/tests/test_registration.py b/newton/newton/registration/tests/test_registration.py index d5be81de..bbd55f1b 100644 --- a/newton/newton/registration/tests/test_registration.py +++ b/newton/newton/registration/tests/test_registration.py @@ -1,4 +1,4 @@ -# Copyright (c) 2017 Intel Corporation, Inc. +# Copyright (c) 2017-2018 Wind River Systems, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,17 +14,41 @@ import mock -from django.conf import settings from rest_framework import status from common.utils import restcall -from newton_base.openoapi.flavor import Flavors from newton_base.tests import mock_info from newton_base.tests import test_base from newton_base.util import VimDriverUtils +OCATA_MOCK_VIM_INFO = { + "createTime": "2017-04-01 02:22:27", + "domain": "Default", + "name": "TiS_R4", + "password": "admin", + "tenant": "admin", + "type": "openstack", + "url": "http://128.224.180.14:5000/v3", + "userName": "admin", + "vendor": "WindRiver", + "version": "newton", + "vimId": "windriver-hudson-dc_RegionOne", + 'cloud_owner': 'windriver-hudson-dc', + 'cloud_region_id': 'RegionOne', + 'cloud_extra_info': + { + "ovsDpdk":{ + "version": "v1", + "arch": "Intel64", + "libname":"dataProcessingAccelerationLibrary", + "libvalue":"v12.1", + } + }, + 'insecure': 'True' +} + MOCK_GET_TENANT_RESPONSE = { - "projects": [ + "projects":[ {"id": "1", "name": "project"}, {"id": "2", "name": "project2"}, ] @@ -36,10 +60,10 @@ MOCK_GET_FLAVOR_RESPONSE = { "id": "1", "name": "micro", "vcpus": 1, "ram": "1MB", "disk": "1G", "OS-FLV-EXT-DATA:ephemeral": False, "swap": True, "os-flavor-access:is_public": True, - "OS-FLV-DISABLED:disabled": True, "link": [{"href": 1}] - }, + "OS-FLV-DISABLED:disabled": True, "link": [{"href":1}] + }, { - "id": "2", "name": "mini", "vcpus": 2, "ram": "2MB", + "id": "2", "name": "mini", "vcpus": 2, "ram": "2", "disk": "2G", "OS-FLV-EXT-DATA:ephemeral": True, "swap": False, "os-flavor-access:is_public": True, "OS-FLV-DISABLED:disabled": True @@ -47,150 +71,6 @@ MOCK_GET_FLAVOR_RESPONSE = { ] } -MOCK_GET_EXTRA_SPECS_RESPONSE = { - "extra_specs": { - "hw:cpu_sockets": 4, - "hw:cpu_cores": 4, - "hw:cpu_policy": "dedicated", - "hw:numa_nodes": 3, - "hw:numa_cpus.1": [0, 1], - "hw:numa_mem.1": 2, - "pci_passthrough:alias": "mycrypto-8086-0443:4", - "aggregate_instance_extra_spec:sriov-device-intel-1832-9475": "true", - "hw:mem_page_size": "1GB" - } -} - -MOCK_HPA_RESPONSE = """{ - "basicCapabilities": { - "info": { - "hpa-feature": "basicCapabilities", - "hpa-version": "v1", - "architecture": "generic" - }, - "hpa-attributes": { - "vcpus": { - "key": "numVirtualCpu", - "unit": null - }, - "ram": { - "key": "virtualMemSize", - "unit": "GB" - } - } - }, - "localStorage": { - "info": { - "hpa-feature": "localStorage", - "hpa-version": "v1", - "architecture": "generic" - }, - "hpa-attributes": { - "disk": { - "key": "diskSize", - "unit": "GB" - }, - "swap": { - "key": "swapMemSize", - "unit": "MB" - } - } - }, - "cpuTopology": { - "info": { - "hpa-feature": "cpuTopology", - "hpa-version": "v1", - "architecture": "generic" - }, - "hpa-attributes": { - "hw:cpu_sockets": { - "key": "numCpuSockets", - "unit": null - }, - "hw:cpu_cores": { - "key": "numCpuCores", - "unit": null - }, - "hw:cpu_threads": { - "key": "numCpuThreads", - "unit": null - } - } - }, - "cpuPinning": { - "info": { - "hpa-feature": "cpuPinning", - "hpa-version": "v1", - "architecture": "generic" - }, - "hpa-attributes": { - "hw:cpu_thread_policy": { - "key": "logicalCpuThreadPinningPolicy", - "unit": null - }, - "hw:cpu_policy": { - "key": "logicalCpuPinningPolicy", - "unit": null - } - } - }, - "numa": { - "info": { - "hpa-feature": "numa", - "hpa-version": "v1", - "architecture": "generic" - }, - "hpa-attributes": { - "hw:numa_nodes": { - "key": "numaNodes", - "unit": null - }, - "hw:numa_cpus": { - "key": "numaCpu", - "unit": null - }, - "hw:numa_mem": { - "key": "numaMem", - "unit": "GB" - } - } - }, - "hugePages": { - "info": { - "hpa-feature": "hugePages", - "hpa-version": "v1", - "architecture": "generic" - }, - "hpa-attributes": { - "hw:mem_page_size": { - "key": "memoryPageSize", - "unit": null - } - } - }, - "pciePassthrough": { - "info": { - "hpa-feature": "pciePassthrough", - "hpa-version": "v1", - "architecture": "generic" - }, - "hpa-attributes": { - "pci_count": { - "key": "pciCount", - "unit": null - }, - "pci_vendor_id": { - "key": "pciVendorId", - "unit": null - }, - "pci_device_id": { - "key": "pciDeviceId", - "unit": null - } - } - } -}""" - MOCK_GET_IMAGE_RESPONSE = { "images": [ { @@ -215,7 +95,7 @@ MOCK_GET_AZ_RESPONSE = { { "zoneName": "production", "zoneState": {"available": True}, - "hosts": {"hypervisor": "kvm"} + "hosts": { "hypervisor": "kvm" } }, { "zoneName": "testing", @@ -234,9 +114,9 @@ MOCK_GET_SNAPSHOT_RESPONSE = { { "id": 1, "name": "test", "metadata": { - "architecture": "x86", "os-distro": "clearlinux", - "os-version": "276", "vendor": "intel", "version": 3, - "selflink": "test", "prev-snapshot-id": "test-id" + "architecture": "x86", "os-distro": "clearlinux", + "os-version": "276", "vendor": "intel", "version": 3, + "selflink": "test", "prev-snapshot-id": "test-id" } }, {"id": 2, "name": "test2"} @@ -249,9 +129,7 @@ MOCK_GET_HYPERVISOR_RESPONSE = { "hypervisor_hostname": "testing", "state": "ACTIVE", "id": 1, "local_gb": 256, "memory_mb": 1024, "hypervisor_links": "link", "host_ip": "127.0.0.1", - "cpu_info": - u'{"topology": {"cores": 8, "threads": 16,' - u'"sockets": 4}}' + "cpu_info": u'{"topology": {"cores": 8, "threads": 16, "sockets": 4}}' }, { "hypervisor_hostname": "testing2", "state": "XXX", @@ -266,13 +144,93 @@ TEST_REGISTER_ENDPOINT_REQUEST = { } -class TestFlavors(test_base.TestRequest): +# HPA UT1: CPU-PINNING +MOCK_GET_HPA_FLAVOR_LIST1_RESPONSE= { + "flavors": [ + { + "id": "1", "name": "micro", "vcpus": 1, "ram": "1024", + "disk": "1G", "OS-FLV-EXT-DATA:ephemeral": False, + "swap": True, "os-flavor-access:is_public": True, + "OS-FLV-DISABLED:disabled": True, "link": [{"href": 1}] + }, + { + "id": "2", "name": "onap.mini", "vcpus": 2, "ram": "2048", + "disk": "2G", "OS-FLV-EXT-DATA:ephemeral": True, + "swap": False, "os-flavor-access:is_public": True, + "OS-FLV-DISABLED:disabled": True + }, + ] +} + +# HPA UT2: CPU-Topology +MOCK_GET_HPA_FLAVOR_onap_mini_EXTRA_SPECS2_RESPONSE = { + "extra_specs": { + "aggregate_instance_extra_specs:storage": "local_image", + "capabilities:cpu_info:model": "Haswell", + "hw:cpu_sockets": "2", + "hw:cpu_cores": "4", + "hw:cpu_threads": "16" + } +} + +# HPA UT3: mem_page_size +MOCK_GET_HPA_FLAVOR_onap_mini_EXTRA_SPECS3_RESPONSE = { + "extra_specs": { + "aggregate_instance_extra_specs:storage": "local_image", + "capabilities:cpu_info:model": "Haswell", + "hw:mem_page_size": "large" + } +} + +# HPA UT4: numa_nodes +MOCK_GET_HPA_FLAVOR_onap_mini_EXTRA_SPECS4_RESPONSE = { + "extra_specs": { + "aggregate_instance_extra_specs:storage": "local_image", + "capabilities:cpu_info:model": "Haswell", + "hw:numa_nodes": "2", + "hw:numa_cpus.0": "0,1", + "hw:numa_cpus.1": "2,3,4,5", + "hw:numa_mem.0": "2048", + "hw:numa_mem.1": "2048" + } +} + +# HPA UT5: instruction set +MOCK_GET_HPA_FLAVOR_onap_mini_EXTRA_SPECS5_RESPONSE = { + "extra_specs": { + "aggregate_instance_extra_specs:storage": "local_image", + "capabilities:cpu_info:model": "Haswell", + "hw:capabilities:cpu_info:features": "avx,acpi" + } +} + +# HPA UT6: pci passthrough +MOCK_GET_HPA_FLAVOR_onap_mini_EXTRA_SPECS6_RESPONSE = { + "extra_specs": { + "aggregate_instance_extra_specs:storage": "local_image", + "capabilities:cpu_info:model": "Haswell", + "pci_passthrough:alias": "sriov-vf-intel-8086-15b3:4" + } +} + +MOCK_GET_HPA_FLAVOR_onap_mini_EXTRA_SPECS_RESPONSE = { + "extra_specs": { + "aggregate_instance_extra_specs:storage": "local_image", + "capabilities:cpu_info:model": "Haswell", + "hw:cpu_policy": "dedicated", + "hw:cpu_thread_policy": "prefer" + } +} + + +class TestRegistration(test_base.TestRequest): + def setUp(self): - super(TestFlavors, self).setUp() + super(TestRegistration, self).setUp() self.req_to_aai_backup = restcall.req_to_aai def tearDown(self): - super(TestFlavors, self).tearDown() + super(TestRegistration, self).tearDown() restcall.req_to_aai = self.req_to_aai_backup def _get_mock_response(self, return_value=None): @@ -281,16 +239,13 @@ class TestFlavors(test_base.TestRequest): mock_response.json.return_value = return_value return mock_response - @mock.patch.object(Flavors, '_get_flavor_extra_specs') @mock.patch.object(VimDriverUtils, 'get_session') @mock.patch.object(VimDriverUtils, 'get_vim_info') def test_register_endpoint_successfully( - self, mock_get_vim_info, mock_get_session, - mock_get_extra_specs): - settings.AAI_SCHEMA_VERSION = "v13" + self, mock_get_vim_info, mock_get_session): restcall.req_to_aai = mock.Mock() restcall.req_to_aai.return_value = (0, {}, status.HTTP_200_OK) - mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + mock_get_vim_info.return_value = OCATA_MOCK_VIM_INFO mock_get_session.return_value = test_base.get_mock_session( ["get"], { "side_effect": [ @@ -300,26 +255,18 @@ class TestFlavors(test_base.TestRequest): self._get_mock_response(), self._get_mock_response(MOCK_GET_AZ_RESPONSE), self._get_mock_response(MOCK_HYPERVISOR_RESPONSE), - self._get_mock_response( - MOCK_GET_SNAPSHOT_RESPONSE), - self._get_mock_response( - MOCK_GET_HYPERVISOR_RESPONSE) + self._get_mock_response(MOCK_GET_SNAPSHOT_RESPONSE), + self._get_mock_response(MOCK_GET_HYPERVISOR_RESPONSE) ] }) - mock_extra_specs_response = mock.Mock(spec=test_base.MockResponse) - mock_extra_specs_response.status_code = status.HTTP_200_OK - mock_extra_specs_response.json.return_value = MOCK_GET_EXTRA_SPECS_RESPONSE - mock_get_extra_specs.return_value = mock_extra_specs_response - with mock.patch('__builtin__.open', mock.mock_open(read_data=MOCK_HPA_RESPONSE)) as mock_file: - response = self.client.post(( - "/api/%s/v0/windriver-hudson-dc_RegionOne/" - "registry" % test_base.MULTIVIM_VERSION), - TEST_REGISTER_ENDPOINT_REQUEST, - HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + response = self.client.post(( + "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/" + "registry"), TEST_REGISTER_ENDPOINT_REQUEST, + HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) - self.assertEquals(status.HTTP_202_ACCEPTED, - response.status_code) + self.assertEquals(status.HTTP_202_ACCEPTED, + response.status_code) @mock.patch.object(VimDriverUtils, 'delete_vim_info') def test_unregister_endpoint_successfully( @@ -327,9 +274,8 @@ class TestFlavors(test_base.TestRequest): mock_delete_vim_info.return_value = 0 response = self.client.delete(( - "/api/%s/v0/windriver-hudson-dc_RegionOne/" - "registry" % test_base.MULTIVIM_VERSION), - "{}", content_type="application/json", + "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/" + "registry"), "{}", content_type="application/json", HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) self.assertEquals(status.HTTP_202_ACCEPTED, @@ -341,10 +287,190 @@ class TestFlavors(test_base.TestRequest): mock_delete_vim_info.return_value = 1 response = self.client.delete(( - "/api/%s/v0/windriver-hudson-dc_RegionOne/" - "registry" % test_base.MULTIVIM_VERSION), - "{}", content_type="application/json", + "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/" + "registry"), "{}", content_type="application/json", HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) self.assertEquals(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_register_hpa_cpupinning_successfully( + self, mock_get_vim_info, mock_get_session): + restcall.req_to_aai = mock.Mock() + restcall.req_to_aai.return_value = (0, {}, status.HTTP_200_OK) + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + mock_get_session.return_value = test_base.get_mock_session( + ["get"], { + "side_effect": [ + self._get_mock_response(MOCK_GET_TENANT_RESPONSE), + self._get_mock_response(MOCK_GET_HPA_FLAVOR_LIST1_RESPONSE), + self._get_mock_response(MOCK_GET_HPA_FLAVOR_onap_mini_EXTRA_SPECS_RESPONSE), + self._get_mock_response(MOCK_GET_IMAGE_RESPONSE), + self._get_mock_response(), + self._get_mock_response(MOCK_GET_AZ_RESPONSE), + self._get_mock_response(MOCK_HYPERVISOR_RESPONSE), + self._get_mock_response(MOCK_GET_SNAPSHOT_RESPONSE), + self._get_mock_response(MOCK_GET_HYPERVISOR_RESPONSE) + ] + }) + + response = self.client.post(( + "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/" + "registry"), TEST_REGISTER_ENDPOINT_REQUEST, + HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_202_ACCEPTED, + response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_register_hpa_cputopology_successfully( + self, mock_get_vim_info, mock_get_session): + restcall.req_to_aai = mock.Mock() + restcall.req_to_aai.return_value = (0, {}, status.HTTP_200_OK) + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + mock_get_session.return_value = test_base.get_mock_session( + ["get"], { + "side_effect": [ + self._get_mock_response(MOCK_GET_TENANT_RESPONSE), + self._get_mock_response(MOCK_GET_HPA_FLAVOR_LIST1_RESPONSE), + self._get_mock_response(MOCK_GET_HPA_FLAVOR_onap_mini_EXTRA_SPECS2_RESPONSE), + self._get_mock_response(MOCK_GET_IMAGE_RESPONSE), + self._get_mock_response(), + self._get_mock_response(MOCK_GET_AZ_RESPONSE), + self._get_mock_response(MOCK_HYPERVISOR_RESPONSE), + self._get_mock_response(MOCK_GET_SNAPSHOT_RESPONSE), + self._get_mock_response(MOCK_GET_HYPERVISOR_RESPONSE) + ] + }) + + response = self.client.post(( + "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/" + "registry"), TEST_REGISTER_ENDPOINT_REQUEST, + HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_202_ACCEPTED, + response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_register_hpa_hugepage_successfully( + self, mock_get_vim_info, mock_get_session): + restcall.req_to_aai = mock.Mock() + restcall.req_to_aai.return_value = (0, {}, status.HTTP_200_OK) + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + mock_get_session.return_value = test_base.get_mock_session( + ["get"], { + "side_effect": [ + self._get_mock_response(MOCK_GET_TENANT_RESPONSE), + self._get_mock_response(MOCK_GET_HPA_FLAVOR_LIST1_RESPONSE), + self._get_mock_response(MOCK_GET_HPA_FLAVOR_onap_mini_EXTRA_SPECS3_RESPONSE), + self._get_mock_response(MOCK_GET_IMAGE_RESPONSE), + self._get_mock_response(), + self._get_mock_response(MOCK_GET_AZ_RESPONSE), + self._get_mock_response(MOCK_HYPERVISOR_RESPONSE), + self._get_mock_response(MOCK_GET_SNAPSHOT_RESPONSE), + self._get_mock_response(MOCK_GET_HYPERVISOR_RESPONSE) + ] + }) + + response = self.client.post(( + "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/" + "registry"), TEST_REGISTER_ENDPOINT_REQUEST, + HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_202_ACCEPTED, + response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_register_hpa_numa_successfully( + self, mock_get_vim_info, mock_get_session): + restcall.req_to_aai = mock.Mock() + restcall.req_to_aai.return_value = (0, {}, status.HTTP_200_OK) + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + mock_get_session.return_value = test_base.get_mock_session( + ["get"], { + "side_effect": [ + self._get_mock_response(MOCK_GET_TENANT_RESPONSE), + self._get_mock_response(MOCK_GET_HPA_FLAVOR_LIST1_RESPONSE), + self._get_mock_response(MOCK_GET_HPA_FLAVOR_onap_mini_EXTRA_SPECS4_RESPONSE), + self._get_mock_response(MOCK_GET_IMAGE_RESPONSE), + self._get_mock_response(), + self._get_mock_response(MOCK_GET_AZ_RESPONSE), + self._get_mock_response(MOCK_HYPERVISOR_RESPONSE), + self._get_mock_response(MOCK_GET_SNAPSHOT_RESPONSE), + self._get_mock_response(MOCK_GET_HYPERVISOR_RESPONSE) + ] + }) + + response = self.client.post(( + "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/" + "registry"), TEST_REGISTER_ENDPOINT_REQUEST, + HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_202_ACCEPTED, + response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_register_hpa_instructionset_successfully( + self, mock_get_vim_info, mock_get_session): + restcall.req_to_aai = mock.Mock() + restcall.req_to_aai.return_value = (0, {}, status.HTTP_200_OK) + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + mock_get_session.return_value = test_base.get_mock_session( + ["get"], { + "side_effect": [ + self._get_mock_response(MOCK_GET_TENANT_RESPONSE), + self._get_mock_response(MOCK_GET_HPA_FLAVOR_LIST1_RESPONSE), + self._get_mock_response(MOCK_GET_HPA_FLAVOR_onap_mini_EXTRA_SPECS5_RESPONSE), + self._get_mock_response(MOCK_GET_IMAGE_RESPONSE), + self._get_mock_response(), + self._get_mock_response(MOCK_GET_AZ_RESPONSE), + self._get_mock_response(MOCK_HYPERVISOR_RESPONSE), + self._get_mock_response(MOCK_GET_SNAPSHOT_RESPONSE), + self._get_mock_response(MOCK_GET_HYPERVISOR_RESPONSE) + ] + }) + + response = self.client.post(( + "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/" + "registry"), TEST_REGISTER_ENDPOINT_REQUEST, + HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_202_ACCEPTED, + response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_register_hpa_pcipassthrough_successfully( + self, mock_get_vim_info, mock_get_session): + restcall.req_to_aai = mock.Mock() + restcall.req_to_aai.return_value = (0, {}, status.HTTP_200_OK) + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + mock_get_session.return_value = test_base.get_mock_session( + ["get"], { + "side_effect": [ + self._get_mock_response(MOCK_GET_TENANT_RESPONSE), + self._get_mock_response(MOCK_GET_HPA_FLAVOR_LIST1_RESPONSE), + self._get_mock_response(MOCK_GET_HPA_FLAVOR_onap_mini_EXTRA_SPECS6_RESPONSE), + self._get_mock_response(MOCK_GET_IMAGE_RESPONSE), + self._get_mock_response(), + self._get_mock_response(MOCK_GET_AZ_RESPONSE), + self._get_mock_response(MOCK_HYPERVISOR_RESPONSE), + self._get_mock_response(MOCK_GET_SNAPSHOT_RESPONSE), + self._get_mock_response(MOCK_GET_HYPERVISOR_RESPONSE) + ] + }) + + response = self.client.post(( + "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/" + "registry"), TEST_REGISTER_ENDPOINT_REQUEST, + HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_202_ACCEPTED, + response.status_code) + diff --git a/newton/newton/registration/tests/test_registration.py.bak b/newton/newton/registration/tests/test_registration.py.bak new file mode 100644 index 00000000..d5be81de --- /dev/null +++ b/newton/newton/registration/tests/test_registration.py.bak @@ -0,0 +1,350 @@ +# Copyright (c) 2017 Intel Corporation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import mock + +from django.conf import settings +from rest_framework import status + +from common.utils import restcall +from newton_base.openoapi.flavor import Flavors +from newton_base.tests import mock_info +from newton_base.tests import test_base +from newton_base.util import VimDriverUtils + +MOCK_GET_TENANT_RESPONSE = { + "projects": [ + {"id": "1", "name": "project"}, + {"id": "2", "name": "project2"}, + ] +} + +MOCK_GET_FLAVOR_RESPONSE = { + "flavors": [ + { + "id": "1", "name": "micro", "vcpus": 1, "ram": "1MB", + "disk": "1G", "OS-FLV-EXT-DATA:ephemeral": False, + "swap": True, "os-flavor-access:is_public": True, + "OS-FLV-DISABLED:disabled": True, "link": [{"href": 1}] + }, + { + "id": "2", "name": "mini", "vcpus": 2, "ram": "2MB", + "disk": "2G", "OS-FLV-EXT-DATA:ephemeral": True, + "swap": False, "os-flavor-access:is_public": True, + "OS-FLV-DISABLED:disabled": True + }, + ] +} + +MOCK_GET_EXTRA_SPECS_RESPONSE = { + "extra_specs": { + "hw:cpu_sockets": 4, + "hw:cpu_cores": 4, + "hw:cpu_policy": "dedicated", + "hw:numa_nodes": 3, + "hw:numa_cpus.1": [0, 1], + "hw:numa_mem.1": 2, + "pci_passthrough:alias": "mycrypto-8086-0443:4", + "aggregate_instance_extra_spec:sriov-device-intel-1832-9475": "true", + "hw:mem_page_size": "1GB" + } +} + +MOCK_HPA_RESPONSE = """{ + "basicCapabilities": { + "info": { + "hpa-feature": "basicCapabilities", + "hpa-version": "v1", + "architecture": "generic" + }, + "hpa-attributes": { + "vcpus": { + "key": "numVirtualCpu", + "unit": null + }, + "ram": { + "key": "virtualMemSize", + "unit": "GB" + } + } + }, + "localStorage": { + "info": { + "hpa-feature": "localStorage", + "hpa-version": "v1", + "architecture": "generic" + }, + "hpa-attributes": { + "disk": { + "key": "diskSize", + "unit": "GB" + }, + "swap": { + "key": "swapMemSize", + "unit": "MB" + } + } + }, + "cpuTopology": { + "info": { + "hpa-feature": "cpuTopology", + "hpa-version": "v1", + "architecture": "generic" + }, + "hpa-attributes": { + "hw:cpu_sockets": { + "key": "numCpuSockets", + "unit": null + }, + "hw:cpu_cores": { + "key": "numCpuCores", + "unit": null + }, + "hw:cpu_threads": { + "key": "numCpuThreads", + "unit": null + } + } + }, + "cpuPinning": { + "info": { + "hpa-feature": "cpuPinning", + "hpa-version": "v1", + "architecture": "generic" + }, + "hpa-attributes": { + "hw:cpu_thread_policy": { + "key": "logicalCpuThreadPinningPolicy", + "unit": null + }, + "hw:cpu_policy": { + "key": "logicalCpuPinningPolicy", + "unit": null + } + } + }, + "numa": { + "info": { + "hpa-feature": "numa", + "hpa-version": "v1", + "architecture": "generic" + }, + "hpa-attributes": { + "hw:numa_nodes": { + "key": "numaNodes", + "unit": null + }, + "hw:numa_cpus": { + "key": "numaCpu", + "unit": null + }, + "hw:numa_mem": { + "key": "numaMem", + "unit": "GB" + } + } + }, + "hugePages": { + "info": { + "hpa-feature": "hugePages", + "hpa-version": "v1", + "architecture": "generic" + }, + "hpa-attributes": { + "hw:mem_page_size": { + "key": "memoryPageSize", + "unit": null + } + } + }, + "pciePassthrough": { + "info": { + "hpa-feature": "pciePassthrough", + "hpa-version": "v1", + "architecture": "generic" + }, + "hpa-attributes": { + "pci_count": { + "key": "pciCount", + "unit": null + }, + "pci_vendor_id": { + "key": "pciVendorId", + "unit": null + }, + "pci_device_id": { + "key": "pciDeviceId", + "unit": null + } + } + } +}""" + +MOCK_GET_IMAGE_RESPONSE = { + "images": [ + { + "id": "1", "name": "cirros", "self": "test", + "os_distro": "CirrOS", "os_version": "0.3", + "application": "test", "application_vendor": "ONAP", + "application_version": 1, "architecture": "x86", + "schema": None + }, + { + "id": "2", "name": "cirros", "self": "test", + "os_distro": "CirrOS", "os_version": "0.3", + "application": "test", "application_vendor": "ONAP", + "application_version": 1, "architecture": "x86", + "schema": "req_resource" + }, + ] +} + +MOCK_GET_AZ_RESPONSE = { + "availabilityZoneInfo": [ + { + "zoneName": "production", + "zoneState": {"available": True}, + "hosts": {"hypervisor": "kvm"} + }, + { + "zoneName": "testing", + }, + ] +} + +MOCK_HYPERVISOR_RESPONSE = { + "hypervisors": [ + {"hypervisor_type": "kvm"} + ] +} + +MOCK_GET_SNAPSHOT_RESPONSE = { + "snapshots": [ + { + "id": 1, "name": "test", "metadata": + { + "architecture": "x86", "os-distro": "clearlinux", + "os-version": "276", "vendor": "intel", "version": 3, + "selflink": "test", "prev-snapshot-id": "test-id" + } + }, + {"id": 2, "name": "test2"} + ] +} + +MOCK_GET_HYPERVISOR_RESPONSE = { + "hypervisors": [ + { + "hypervisor_hostname": "testing", "state": "ACTIVE", + "id": 1, "local_gb": 256, "memory_mb": 1024, + "hypervisor_links": "link", "host_ip": "127.0.0.1", + "cpu_info": + u'{"topology": {"cores": 8, "threads": 16,' + u'"sockets": 4}}' + }, + { + "hypervisor_hostname": "testing2", "state": "XXX", + "id": 1, "local_gb": 256, "memory_mb": 1024, + "hypervisor_links": "link", "host_ip": "127.0.0.1", + } + ] +} + +TEST_REGISTER_ENDPOINT_REQUEST = { + "defaultTenant": "project1" +} + + +class TestFlavors(test_base.TestRequest): + def setUp(self): + super(TestFlavors, self).setUp() + self.req_to_aai_backup = restcall.req_to_aai + + def tearDown(self): + super(TestFlavors, self).tearDown() + restcall.req_to_aai = self.req_to_aai_backup + + def _get_mock_response(self, return_value=None): + mock_response = mock.Mock(spec=test_base.MockResponse) + mock_response.status_code = status.HTTP_200_OK + mock_response.json.return_value = return_value + return mock_response + + @mock.patch.object(Flavors, '_get_flavor_extra_specs') + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_register_endpoint_successfully( + self, mock_get_vim_info, mock_get_session, + mock_get_extra_specs): + settings.AAI_SCHEMA_VERSION = "v13" + restcall.req_to_aai = mock.Mock() + restcall.req_to_aai.return_value = (0, {}, status.HTTP_200_OK) + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + mock_get_session.return_value = test_base.get_mock_session( + ["get"], { + "side_effect": [ + self._get_mock_response(MOCK_GET_TENANT_RESPONSE), + self._get_mock_response(MOCK_GET_FLAVOR_RESPONSE), + self._get_mock_response(MOCK_GET_IMAGE_RESPONSE), + self._get_mock_response(), + self._get_mock_response(MOCK_GET_AZ_RESPONSE), + self._get_mock_response(MOCK_HYPERVISOR_RESPONSE), + self._get_mock_response( + MOCK_GET_SNAPSHOT_RESPONSE), + self._get_mock_response( + MOCK_GET_HYPERVISOR_RESPONSE) + ] + }) + mock_extra_specs_response = mock.Mock(spec=test_base.MockResponse) + mock_extra_specs_response.status_code = status.HTTP_200_OK + mock_extra_specs_response.json.return_value = MOCK_GET_EXTRA_SPECS_RESPONSE + mock_get_extra_specs.return_value = mock_extra_specs_response + + with mock.patch('__builtin__.open', mock.mock_open(read_data=MOCK_HPA_RESPONSE)) as mock_file: + response = self.client.post(( + "/api/%s/v0/windriver-hudson-dc_RegionOne/" + "registry" % test_base.MULTIVIM_VERSION), + TEST_REGISTER_ENDPOINT_REQUEST, + HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_202_ACCEPTED, + response.status_code) + + @mock.patch.object(VimDriverUtils, 'delete_vim_info') + def test_unregister_endpoint_successfully( + self, mock_delete_vim_info): + mock_delete_vim_info.return_value = 0 + + response = self.client.delete(( + "/api/%s/v0/windriver-hudson-dc_RegionOne/" + "registry" % test_base.MULTIVIM_VERSION), + "{}", content_type="application/json", + HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_202_ACCEPTED, + response.status_code) + + @mock.patch.object(VimDriverUtils, 'delete_vim_info') + def test_fail_unregister_endpoint( + self, mock_delete_vim_info): + mock_delete_vim_info.return_value = 1 + + response = self.client.delete(( + "/api/%s/v0/windriver-hudson-dc_RegionOne/" + "registry" % test_base.MULTIVIM_VERSION), + "{}", content_type="application/json", + HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_500_INTERNAL_SERVER_ERROR, + response.status_code) |