summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--newton/newton/registration/tests/test_registration.py502
-rw-r--r--newton/newton/registration/tests/test_registration.py.bak350
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)