diff options
-rw-r--r-- | newton/newton/proxy/views/identityV3.py | 4 | ||||
-rw-r--r-- | ocata/ocata/extensions/tests/__init__.py | 0 | ||||
-rw-r--r-- | ocata/ocata/extensions/tests/test_epacaps.py | 67 | ||||
-rw-r--r-- | ocata/ocata/extensions/tests/test_extensions.py | 45 | ||||
-rw-r--r-- | ocata/ocata/proxy/tests/__init__.py | 13 | ||||
-rw-r--r-- | ocata/ocata/proxy/tests/test_identity_proxy.py | 533 | ||||
-rw-r--r-- | ocata/ocata/proxy/tests/test_service_proxy.py | 855 | ||||
-rw-r--r-- | windriver/titanium_cloud/extensions/tests/__init__.py | 0 | ||||
-rw-r--r-- | windriver/titanium_cloud/extensions/tests/test_epacaps.py | 67 | ||||
-rw-r--r-- | windriver/titanium_cloud/extensions/tests/test_extensions.py | 45 | ||||
-rw-r--r-- | windriver/titanium_cloud/proxy/tests/__init__.py | 13 | ||||
-rw-r--r-- | windriver/titanium_cloud/proxy/tests/test_identity_proxy.py | 533 | ||||
-rw-r--r-- | windriver/titanium_cloud/proxy/tests/test_service_proxy.py | 855 |
13 files changed, 3030 insertions, 0 deletions
diff --git a/newton/newton/proxy/views/identityV3.py b/newton/newton/proxy/views/identityV3.py index 36f488a2..bf63ad6a 100644 --- a/newton/newton/proxy/views/identityV3.py +++ b/newton/newton/proxy/views/identityV3.py @@ -51,6 +51,10 @@ class Tokens(APIView): try: tenant_name = request.data.get("tenant_name") + #backward support for keystone v2.0 API + if not tenant_name and request.data.get("auth"): + tenant_name = request.data["auth"].get("tenant_name") + # prepare request resource to vim instance vim = VimDriverUtils.get_vim_info(vimid) sess = VimDriverUtils.get_session(vim, tenantname = tenant_name) diff --git a/ocata/ocata/extensions/tests/__init__.py b/ocata/ocata/extensions/tests/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/ocata/ocata/extensions/tests/__init__.py diff --git a/ocata/ocata/extensions/tests/test_epacaps.py b/ocata/ocata/extensions/tests/test_epacaps.py new file mode 100644 index 00000000..a78e4c25 --- /dev/null +++ b/ocata/ocata/extensions/tests/test_epacaps.py @@ -0,0 +1,67 @@ +# Copyright (c) 2017 Intel Corporation. +# +# 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 json + +import mock +from django.test import Client +from rest_framework import status +import unittest + +from newton.requests.views.util import VimDriverUtils + +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": "ocata", + "vimId": "windriver-hudson-dc_RegionOne", + 'cloud_owner':'windriver-hudson-dc', + 'cloud_region_id':'RegionOne', + 'cloud_extra_info':'', + 'cloud_epa_caps':'{"huge_page":"true","cpu_pinning":"true",\ + "cpu_thread_policy":"true","numa_aware":"true","sriov":"true",\ + "dpdk_vswitch":"true","rdt":"false","numa_locality_pci":"true"}', + 'insecure':'True', +} + + +class TestEpaCaps(unittest.TestCase): + def setUp(self): + self.client = Client() + + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_get_epa_caps_info(self, mock_get_vim_info): + mock_get_vim_info.return_value = MOCK_VIM_INFO + cloud_owner = "windriver-hudson-dc" + cloud_region_id = "RegionOne" + vimid = cloud_owner + "_" + cloud_region_id + + response = self.client.get( + "/api/multicloud-ocata/v0/" + vimid + "/extensions/epa-caps") + json_content = response.json() + + self.assertEquals(status.HTTP_200_OK, response.status_code) + self.assertEquals(4, len(json_content.keys())) + self.assertEquals(cloud_owner, json_content["cloud-owner"]) + self.assertEquals(cloud_region_id, json_content["cloud-region-id"]) + self.assertEquals(vimid, json_content["vimid"]) + self.assertEquals(json.loads(MOCK_VIM_INFO['cloud_epa_caps']), + json_content["cloud-epa-caps"])
\ No newline at end of file diff --git a/ocata/ocata/extensions/tests/test_extensions.py b/ocata/ocata/extensions/tests/test_extensions.py new file mode 100644 index 00000000..16bcf47a --- /dev/null +++ b/ocata/ocata/extensions/tests/test_extensions.py @@ -0,0 +1,45 @@ +# Copyright (c) 2017 Intel Corporation. +# +# 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. + +from django.test import Client +from rest_framework import status +import unittest + + +class TestExtensions(unittest.TestCase): + def setUp(self): + self.client = Client() + + def test_get_extensions_info(self): + cloud_owner = "windriver-hudson-dc" + cloud_region_id = "RegionOne" + vimid = cloud_owner + "_" + cloud_region_id + + response = self.client.get( + "/api/multicloud-ocata/v0/" + vimid + "/extensions/") + json_content = response.json() + + self.assertEquals(status.HTTP_200_OK, response.status_code) + self.assertEquals(4, len(json_content.keys())) + + self.assertEquals(cloud_owner, json_content["cloud-owner"]) + self.assertEquals(cloud_region_id, json_content["cloud-region-id"]) + self.assertEquals(vimid, json_content["vimid"]) + + self.assertEquals("epa-caps", json_content["extensions"][0]["alias"]) + self.assertEquals("Multiple network support", json_content["extensions"][0]["description"]) + self.assertEquals("EPACapsQuery", json_content["extensions"][0]["name"]) + self.assertEquals("http://127.0.0.1:80/api/multicloud-ocata/v0/%s/extensions/epa-caps" % vimid, + json_content["extensions"][0]["url"]) + self.assertEquals("", json_content["extensions"][0]["spec"])
\ No newline at end of file diff --git a/ocata/ocata/proxy/tests/__init__.py b/ocata/ocata/proxy/tests/__init__.py new file mode 100644 index 00000000..48b6e44b --- /dev/null +++ b/ocata/ocata/proxy/tests/__init__.py @@ -0,0 +1,13 @@ +# Copyright (c) 2017 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. +# 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. diff --git a/ocata/ocata/proxy/tests/test_identity_proxy.py b/ocata/ocata/proxy/tests/test_identity_proxy.py new file mode 100644 index 00000000..a77592f8 --- /dev/null +++ b/ocata/ocata/proxy/tests/test_identity_proxy.py @@ -0,0 +1,533 @@ +# Copyright (c) 2017 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. +# 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 json + +import mock +import unittest + +from django.test import Client +from rest_framework import status + +from keystoneauth1 import session +from keystoneauth1.exceptions import HttpError + +from newton.requests.views.util import VimDriverUtils +from ocata.proxy.views.identityV3 import Tokens + +mock_viminfo = { + "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": "ocata", + "vimId": "windriver-hudson-dc_RegionOne", + 'cloud_owner':'windriver-hudson-dc', + 'cloud_region_id':'RegionOne', + 'cloud_extra_info':'', + 'cloud_epa_caps':'{"huge_page":"true","cpu_pinning":"true",\ + "cpu_thread_policy":"true","numa_aware":"true","sriov":"true",\ + "dpdk_vswitch":"true","rdt":"false","numa_locality_pci":"true"}', + 'insecure':'True', +} + +mock_token_id="1a62b3971d774404a504c5d9a3e506e3" + +mock_catalog_response = { + "catalog" : [ + { + "id" : "99aefcc82a9246f98f8c281e61ffc754", + "endpoints" : [ + { + "region" : "RegionOne", + "url" : "http://128.224.180.14:9696", + "id" : "39583c1508ad4b71b380570a745ee10a", + "interface" : "public", + "region_id" : "RegionOne" + }, + { + "url" : "http://192.168.204.2:9696", + "region" : "RegionOne", + "id" : "37e8d07ba24e4b8f93490c9daaba06e2", + "interface" : "internal", + "region_id" : "RegionOne" + }, + { + "interface" : "admin", + "id" : "7eee4ca98d444b1abb00a50d4b89373f", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://192.168.204.2:9696" + } + ], + "name" : "neutron", + "type" : "network" + }, + { + "endpoints" : [ + { + "interface" : "public", + "id" : "10496738fa374295a4a88a63b81a1589", + "region_id" : "RegionOne", + "url" : "http://128.224.180.14:8777", + "region" : "RegionOne" + }, + { + "id" : "02dcb8c0bd464c4489fa0a0c9f28571f", + "region_id" : "RegionOne", + "interface" : "internal", + "url" : "http://192.168.204.2:8777", + "region" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "8a73b0d3743b4e78b87614690f6e97fe", + "interface" : "admin", + "url" : "http://192.168.204.2:8777", + "region" : "RegionOne" + } + ], + "id" : "d131054da83f4c93833799747a0f4709", + "name" : "ceilometer", + "type" : "metering" + }, + { + "type" : "volumev2", + "name" : "cinderv2", + "endpoints" : [ + { + "id" : "35a67ad36f0447d19c9662babf7cf609", + "interface" : "public", + "region_id" : "RegionOne", + "url" : "http://128.224.180.14:8776/v2/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v2/fcca3cc49d5e42caae15459e27103efc", + "id" : "c6ea42052268420fa2c8d351ee68c922", + "interface" : "internal", + "region_id" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "91cb24853dc3450d847b0c286a2e44ea", + "interface" : "admin", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v2/fcca3cc49d5e42caae15459e27103efc" + } + ], + "id" : "40440057102440739c30be10a66bc5d1" + }, + { + "name" : "heat", + "type" : "orchestration", + "id" : "35300cce88db4bd4bb5a72ffe3b88b00", + "endpoints" : [ + { + "id" : "58999d7b4a94439089ecfb2aca2d7f6c", + "region_id" : "RegionOne", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:8004/v1/fcca3cc49d5e42caae15459e27103efc" + }, + { + "url" : "http://192.168.204.2:8004/v1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "interface" : "internal", + "id" : "1e0ee1a2aef84802b921d422372a567e", + "region_id" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8004/v1/fcca3cc49d5e42caae15459e27103efc", + "id" : "17661bf4859741b8a43a461dedad1871", + "region_id" : "RegionOne", + "interface" : "admin" + } + ] + }, + { + "id" : "08dc6912aea64c01925012c8a6df250a", + "endpoints" : [ + { + "id" : "02792c4eed77486083f9b2e52d7b94b0", + "region_id" : "RegionOne", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:5000/v3" + }, + { + "id" : "b6d5cad394b94309ae40d8de88059c5f", + "region_id" : "RegionOne", + "interface" : "internal", + "url" : "http://192.168.204.2:5000/v3", + "region" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:35357/v3", + "region_id" : "RegionOne", + "id" : "1f18e2b7c6a34493b86853b65917888e", + "interface" : "admin" + } + ], + "type" : "identity", + "name" : "keystone" + }, + { + "name" : "vim", + "type" : "nfv", + "endpoints" : [ + { + "url" : "http://128.224.180.14:4545", + "region" : "RegionOne", + "id" : "b33e317345e4480ab0786e4960995ec9", + "interface" : "public", + "region_id" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:4545", + "interface" : "internal", + "id" : "03c85828d5bf432ab04831aa65ac9c52", + "region_id" : "RegionOne" + }, + { + "id" : "067983abb061476cb53a9e23a740d98f", + "region_id" : "RegionOne", + "interface" : "admin", + "url" : "http://192.168.204.2:4545", + "region" : "RegionOne" + } + ], + "id" : "01636c856fc84988b38b9117eb4a8021" + }, + { + "name" : "aodh", + "type" : "alarming", + "id" : "eb269151d0e44744a5b5449657bdc61c", + "endpoints" : [ + { + "id" : "5bfc6c056e0244c493642eb82f6aaa11", + "region_id" : "RegionOne", + "interface" : "public", + "url" : "http://128.224.180.14:8042", + "region" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8042", + "region_id" : "RegionOne", + "id" : "ad69c7f76dce4089a195b9221ddbfb44", + "interface" : "internal" + }, + { + "interface" : "admin", + "id" : "3e8fcdfa7bcb40b0ae33c282adfcc9ff", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8042" + } + ] + }, + { + "name" : "sysinv", + "type" : "platform", + "endpoints" : [ + { + "region" : "RegionOne", + "url" : "http://128.224.180.14:6385/v1", + "interface" : "public", + "id" : "ba4ba8104590421b84672306c7e0e1f1", + "region_id" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:6385/v1", + "interface" : "internal", + "id" : "a1cba34b163f496ab1acd6e9b51e39a2", + "region_id" : "RegionOne" + }, + { + "url" : "http://192.168.204.2:6385/v1", + "region" : "RegionOne", + "id" : "7c171210a2c841a6a52a5713e316d6fc", + "interface" : "admin", + "region_id" : "RegionOne" + } + ], + "id" : "256bbad671f946fea543e6bd71f98875" + }, + { + "id" : "e84665dcce814c05b4c5084964547534", + "endpoints" : [ + { + "url" : "http://128.224.180.14:8000/v1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "region_id" : "RegionOne", + "id" : "b2ed1a23dc6944bea129c20861e0286a", + "interface" : "public" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8000/v1/fcca3cc49d5e42caae15459e27103efc", + "interface" : "internal", + "id" : "c4df7c6bc15646848eff35caf6ffea8e", + "region_id" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "61b3dabb761443a89ab549f437c05ab0", + "interface" : "admin", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8000/v1/fcca3cc49d5e42caae15459e27103efc" + } + ], + "name" : "heat-cfn", + "type" : "cloudformation" + }, + { + "id" : "823024424a014981a3721229491c0b1a", + "endpoints" : [ + { + "region" : "RegionOne", + "url" : "http://128.224.180.14:8776/v1/fcca3cc49d5e42caae15459e27103efc", + "region_id" : "RegionOne", + "id" : "4a52e4e54ff440789f9a797919c4a0f2", + "interface" : "public" + }, + { + "url" : "http://192.168.204.2:8776/v1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "id" : "d4f9a84476524a39844f0fce63f1022e", + "region_id" : "RegionOne", + "interface" : "internal" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v1/fcca3cc49d5e42caae15459e27103efc", + "interface" : "admin", + "id" : "81bf3810a8cc4697b68c6e93b5b8fe1f", + "region_id" : "RegionOne" + } + ], + "type" : "volume", + "name" : "cinder" + }, + { + "name" : "glance", + "type" : "image", + "endpoints" : [ + { + "id" : "bd930aba961946cfb1401bada56d55e3", + "region_id" : "RegionOne", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:9292" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:9292", + "id" : "c11da585f0b141b99d1e18bb9a607beb", + "region_id" : "RegionOne", + "interface" : "internal" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:9292", + "id" : "31b26c625a6a4fc7910dc5935155996e", + "interface" : "admin", + "region_id" : "RegionOne" + } + ], + "id" : "3b78cf039bc54d1bbb99ab3a4be15ef1" + }, + { + "id" : "b8701374bf254de1beee8a2c9ecc6b33", + "endpoints" : [ + { + "region_id" : "RegionOne", + "id" : "f7407f330c8b4577b1d377d3fab9c2f8", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:15491" + }, + { + "url" : "http://192.168.204.2:5491", + "region" : "RegionOne", + "interface" : "internal", + "id" : "0b37ce31a32f4b6fa5e1aa0d6c20680f", + "region_id" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "7b87ea72adf245e1991e9e0df29b7ea9", + "interface" : "admin", + "region" : "RegionOne", + "url" : "http://192.168.204.2:5491" + } + ], + "type" : "patching", + "name" : "patching" + }, + { + "id" : "0ec0923a58f04ffeb6fced3bbc5c0947", + "endpoints" : [ + { + "url" : "http://128.224.180.14:8774/v2.1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "id" : "13168b12da17451fb39630de67db168f", + "region_id" : "RegionOne", + "interface" : "public" + }, + { + "id" : "22dd6a44209f42d986b82e3aa6535f82", + "interface" : "internal", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8774/v2.1/fcca3cc49d5e42caae15459e27103efc" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8774/v2.1/fcca3cc49d5e42caae15459e27103efc", + "id" : "552a991ae501492f841c1b6e2ff38fc5", + "region_id" : "RegionOne", + "interface" : "admin" + } + ], + "type" : "compute", + "name" : "nova" + }, + { + "id" : "50b219650f1049b097b3f14e8c70cdf8", + "endpoints" : [ + { + "interface" : "public", + "id" : "5a4276cd6e4d43e883cf8640d4e13f7d", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://128.224.180.14:8776/v3/fcca3cc49d5e42caae15459e27103efc" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v3/fcca3cc49d5e42caae15459e27103efc", + "region_id" : "RegionOne", + "id" : "c796df3ca5a84fc18db5b43a55283953", + "interface" : "internal" + }, + { + "region_id" : "RegionOne", + "id" : "cf55c2b34d0049ba835a2e48b9ad0e2e", + "interface" : "admin", + "url" : "http://192.168.204.2:8776/v3/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne" + } + ], + "type" : "volumev3", + "name" : "cinderv3" + } + ], +} + +mock_auth_state = { + "body" : { + "token" : { + "is_domain" : "false", + "expires_at" : "2017-08-27T14:19:15.000000Z", + "issued_at" : "2017-08-27T13:19:15.000000Z", + "roles" : [ + { + "id" : "9fe2ff9ee4384b1894a90878d3e92bab", + "name" : "_member_" + }, + { + "id" : "b86a7e02935844b899d3d326f83c1b1f", + "name" : "admin" + }, + { + "name" : "heat_stack_owner", + "id" : "7de502236e954c8282de32e773fc052e" + } + ], + "methods" : [ + "password" + ], + "catalog" : mock_catalog_response['catalog'], + "project" : { + "name" : "admin", + "id" : "fcca3cc49d5e42caae15459e27103efc", + "domain" : { + "id" : "default", + "name" : "Default" + } + }, + "user" : { + "name" : "admin", + "id" : "9efb043c7629497a8028d7325ca1afb0", + "domain" : { + "id" : "default", + "name" : "Default" + } + }, + "audit_ids" : [ + "_ZWT10DtSZKRXIvIcxun7w" + ] + } + }, + "auth_token" : mock_token_id +} + + +class TestIdentityService(unittest.TestCase): + def setUp(self): + self.client = Client() + + @mock.patch.object(VimDriverUtils, 'get_vim_info') + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_auth_state') + @mock.patch.object(VimDriverUtils, 'update_token_cache') + def test_token(self, mock_update_token_cache, mock_get_auth_state, mock_get_session, mock_get_vim_info): + ''' + test API: get token + :param mock_update_token_cache: + :param mock_get_auth_state: + :param mock_get_session: + :param mock_get_vim_info: + :return: + ''' + + #mock VimDriverUtils APIs + mock_session_specs = ["get"] + mock_session_get_response = {'status':200} + mock_session = mock.Mock(name='mock_session', spec=mock_session_specs) + mock_session.get.return_value = mock_session_get_response + + mock_get_vim_info.return_value = mock_viminfo + mock_get_session.return_value = mock_session + mock_get_auth_state.return_value = json.dumps(mock_auth_state) + mock_update_token_cache.return_value = mock_token_id + + #simulate client to make the request + data ={} + response = self.client.post("/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/identity/v3/auth/tokens", data=data, format='json') + self.failUnlessEqual(status.HTTP_201_CREATED, response.status_code) + context = response.json() + + self.assertTrue(response['X-Subject-Token'] == mock_token_id) + self.assertTrue(context['token']['catalog'] != None) diff --git a/ocata/ocata/proxy/tests/test_service_proxy.py b/ocata/ocata/proxy/tests/test_service_proxy.py new file mode 100644 index 00000000..f916e33e --- /dev/null +++ b/ocata/ocata/proxy/tests/test_service_proxy.py @@ -0,0 +1,855 @@ +# Copyright (c) 2017 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. +# 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 copy +import json + +from django.test import Client +import mock +from rest_framework import status +import unittest + + +from newton.requests.views.util import VimDriverUtils + +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": "ocata", + "vimId": "windriver-hudson-dc_RegionOne", + 'cloud_owner':'windriver-hudson-dc', + 'cloud_region_id':'RegionOne', + 'cloud_extra_info':'', + 'cloud_epa_caps':'{"huge_page":"true","cpu_pinning":"true",\ + "cpu_thread_policy":"true","numa_aware":"true","sriov":"true",\ + "dpdk_vswitch":"true","rdt":"false","numa_locality_pci":"true"}', + 'insecure':'True', +} + +MOCK_TOKEN_ID="1a62b3971d774404a504c5d9a3e506e3" + +MOCK_CATALOG_RESPONSE = { + "catalog" : [ + { + "id" : "99aefcc82a9246f98f8c281e61ffc754", + "endpoints" : [ + { + "region" : "RegionOne", + "url" : "http://128.224.180.14:9696", + "id" : "39583c1508ad4b71b380570a745ee10a", + "interface" : "public", + "region_id" : "RegionOne" + }, + { + "url" : "http://192.168.204.2:9696", + "region" : "RegionOne", + "id" : "37e8d07ba24e4b8f93490c9daaba06e2", + "interface" : "internal", + "region_id" : "RegionOne" + }, + { + "interface" : "admin", + "id" : "7eee4ca98d444b1abb00a50d4b89373f", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://192.168.204.2:9696" + } + ], + "name" : "neutron", + "type" : "network" + }, + { + "endpoints" : [ + { + "interface" : "public", + "id" : "10496738fa374295a4a88a63b81a1589", + "region_id" : "RegionOne", + "url" : "http://128.224.180.14:8777", + "region" : "RegionOne" + }, + { + "id" : "02dcb8c0bd464c4489fa0a0c9f28571f", + "region_id" : "RegionOne", + "interface" : "internal", + "url" : "http://192.168.204.2:8777", + "region" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "8a73b0d3743b4e78b87614690f6e97fe", + "interface" : "admin", + "url" : "http://192.168.204.2:8777", + "region" : "RegionOne" + } + ], + "id" : "d131054da83f4c93833799747a0f4709", + "name" : "ceilometer", + "type" : "metering" + }, + { + "type" : "volumev2", + "name" : "cinderv2", + "endpoints" : [ + { + "id" : "35a67ad36f0447d19c9662babf7cf609", + "interface" : "public", + "region_id" : "RegionOne", + "url" : "http://128.224.180.14:8776/v2/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v2/fcca3cc49d5e42caae15459e27103efc", + "id" : "c6ea42052268420fa2c8d351ee68c922", + "interface" : "internal", + "region_id" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "91cb24853dc3450d847b0c286a2e44ea", + "interface" : "admin", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v2/fcca3cc49d5e42caae15459e27103efc" + } + ], + "id" : "40440057102440739c30be10a66bc5d1" + }, + { + "name" : "heat", + "type" : "orchestration", + "id" : "35300cce88db4bd4bb5a72ffe3b88b00", + "endpoints" : [ + { + "id" : "58999d7b4a94439089ecfb2aca2d7f6c", + "region_id" : "RegionOne", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:8004/v1/fcca3cc49d5e42caae15459e27103efc" + }, + { + "url" : "http://192.168.204.2:8004/v1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "interface" : "internal", + "id" : "1e0ee1a2aef84802b921d422372a567e", + "region_id" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8004/v1/fcca3cc49d5e42caae15459e27103efc", + "id" : "17661bf4859741b8a43a461dedad1871", + "region_id" : "RegionOne", + "interface" : "admin" + } + ] + }, + { + "id" : "08dc6912aea64c01925012c8a6df250a", + "endpoints" : [ + { + "id" : "02792c4eed77486083f9b2e52d7b94b0", + "region_id" : "RegionOne", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:5000/v3" + }, + { + "id" : "b6d5cad394b94309ae40d8de88059c5f", + "region_id" : "RegionOne", + "interface" : "internal", + "url" : "http://192.168.204.2:5000/v3", + "region" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:35357/v3", + "region_id" : "RegionOne", + "id" : "1f18e2b7c6a34493b86853b65917888e", + "interface" : "admin" + } + ], + "type" : "identity", + "name" : "keystone" + }, + { + "name" : "vim", + "type" : "nfv", + "endpoints" : [ + { + "url" : "http://128.224.180.14:4545", + "region" : "RegionOne", + "id" : "b33e317345e4480ab0786e4960995ec9", + "interface" : "public", + "region_id" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:4545", + "interface" : "internal", + "id" : "03c85828d5bf432ab04831aa65ac9c52", + "region_id" : "RegionOne" + }, + { + "id" : "067983abb061476cb53a9e23a740d98f", + "region_id" : "RegionOne", + "interface" : "admin", + "url" : "http://192.168.204.2:4545", + "region" : "RegionOne" + } + ], + "id" : "01636c856fc84988b38b9117eb4a8021" + }, + { + "name" : "aodh", + "type" : "alarming", + "id" : "eb269151d0e44744a5b5449657bdc61c", + "endpoints" : [ + { + "id" : "5bfc6c056e0244c493642eb82f6aaa11", + "region_id" : "RegionOne", + "interface" : "public", + "url" : "http://128.224.180.14:8042", + "region" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8042", + "region_id" : "RegionOne", + "id" : "ad69c7f76dce4089a195b9221ddbfb44", + "interface" : "internal" + }, + { + "interface" : "admin", + "id" : "3e8fcdfa7bcb40b0ae33c282adfcc9ff", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8042" + } + ] + }, + { + "name" : "sysinv", + "type" : "platform", + "endpoints" : [ + { + "region" : "RegionOne", + "url" : "http://128.224.180.14:6385/v1", + "interface" : "public", + "id" : "ba4ba8104590421b84672306c7e0e1f1", + "region_id" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:6385/v1", + "interface" : "internal", + "id" : "a1cba34b163f496ab1acd6e9b51e39a2", + "region_id" : "RegionOne" + }, + { + "url" : "http://192.168.204.2:6385/v1", + "region" : "RegionOne", + "id" : "7c171210a2c841a6a52a5713e316d6fc", + "interface" : "admin", + "region_id" : "RegionOne" + } + ], + "id" : "256bbad671f946fea543e6bd71f98875" + }, + { + "id" : "e84665dcce814c05b4c5084964547534", + "endpoints" : [ + { + "url" : "http://128.224.180.14:8000/v1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "region_id" : "RegionOne", + "id" : "b2ed1a23dc6944bea129c20861e0286a", + "interface" : "public" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8000/v1/fcca3cc49d5e42caae15459e27103efc", + "interface" : "internal", + "id" : "c4df7c6bc15646848eff35caf6ffea8e", + "region_id" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "61b3dabb761443a89ab549f437c05ab0", + "interface" : "admin", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8000/v1/fcca3cc49d5e42caae15459e27103efc" + } + ], + "name" : "heat-cfn", + "type" : "cloudformation" + }, + { + "id" : "823024424a014981a3721229491c0b1a", + "endpoints" : [ + { + "region" : "RegionOne", + "url" : "http://128.224.180.14:8776/v1/fcca3cc49d5e42caae15459e27103efc", + "region_id" : "RegionOne", + "id" : "4a52e4e54ff440789f9a797919c4a0f2", + "interface" : "public" + }, + { + "url" : "http://192.168.204.2:8776/v1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "id" : "d4f9a84476524a39844f0fce63f1022e", + "region_id" : "RegionOne", + "interface" : "internal" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v1/fcca3cc49d5e42caae15459e27103efc", + "interface" : "admin", + "id" : "81bf3810a8cc4697b68c6e93b5b8fe1f", + "region_id" : "RegionOne" + } + ], + "type" : "volume", + "name" : "cinder" + }, + { + "name" : "glance", + "type" : "image", + "endpoints" : [ + { + "id" : "bd930aba961946cfb1401bada56d55e3", + "region_id" : "RegionOne", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:9292" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:9292", + "id" : "c11da585f0b141b99d1e18bb9a607beb", + "region_id" : "RegionOne", + "interface" : "internal" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:9292", + "id" : "31b26c625a6a4fc7910dc5935155996e", + "interface" : "admin", + "region_id" : "RegionOne" + } + ], + "id" : "3b78cf039bc54d1bbb99ab3a4be15ef1" + }, + { + "id" : "b8701374bf254de1beee8a2c9ecc6b33", + "endpoints" : [ + { + "region_id" : "RegionOne", + "id" : "f7407f330c8b4577b1d377d3fab9c2f8", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:15491" + }, + { + "url" : "http://192.168.204.2:5491", + "region" : "RegionOne", + "interface" : "internal", + "id" : "0b37ce31a32f4b6fa5e1aa0d6c20680f", + "region_id" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "7b87ea72adf245e1991e9e0df29b7ea9", + "interface" : "admin", + "region" : "RegionOne", + "url" : "http://192.168.204.2:5491" + } + ], + "type" : "patching", + "name" : "patching" + }, + { + "id" : "0ec0923a58f04ffeb6fced3bbc5c0947", + "endpoints" : [ + { + "url" : "http://128.224.180.14:8774/v2.1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "id" : "13168b12da17451fb39630de67db168f", + "region_id" : "RegionOne", + "interface" : "public" + }, + { + "id" : "22dd6a44209f42d986b82e3aa6535f82", + "interface" : "internal", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8774/v2.1/fcca3cc49d5e42caae15459e27103efc" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8774/v2.1/fcca3cc49d5e42caae15459e27103efc", + "id" : "552a991ae501492f841c1b6e2ff38fc5", + "region_id" : "RegionOne", + "interface" : "admin" + } + ], + "type" : "compute", + "name" : "nova" + }, + { + "id" : "50b219650f1049b097b3f14e8c70cdf8", + "endpoints" : [ + { + "interface" : "public", + "id" : "5a4276cd6e4d43e883cf8640d4e13f7d", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://128.224.180.14:8776/v3/fcca3cc49d5e42caae15459e27103efc" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v3/fcca3cc49d5e42caae15459e27103efc", + "region_id" : "RegionOne", + "id" : "c796df3ca5a84fc18db5b43a55283953", + "interface" : "internal" + }, + { + "region_id" : "RegionOne", + "id" : "cf55c2b34d0049ba835a2e48b9ad0e2e", + "interface" : "admin", + "url" : "http://192.168.204.2:8776/v3/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne" + } + ], + "type" : "volumev3", + "name" : "cinderv3" + } + ] +} + +MOCK_AUTH_STATE = { + "body" : { + "token" : { + "is_domain" : "false", + "expires_at" : "2017-08-27T14:19:15.000000Z", + "issued_at" : "2017-08-27T13:19:15.000000Z", + "roles" : [ + { + "id" : "9fe2ff9ee4384b1894a90878d3e92bab", + "name" : "_member_" + }, + { + "id" : "b86a7e02935844b899d3d326f83c1b1f", + "name" : "admin" + }, + { + "name" : "heat_stack_owner", + "id" : "7de502236e954c8282de32e773fc052e" + } + ], + "methods" : [ + "password" + ], + "catalog" : MOCK_CATALOG_RESPONSE['catalog'], + "project" : { + "name" : "admin", + "id" : "fcca3cc49d5e42caae15459e27103efc", + "domain" : { + "id" : "default", + "name" : "Default" + } + }, + "user" : { + "name" : "admin", + "id" : "9efb043c7629497a8028d7325ca1afb0", + "domain" : { + "id" : "default", + "name" : "Default" + } + }, + "audit_ids" : [ + "_ZWT10DtSZKRXIvIcxun7w" + ] + } + }, + "auth_token" : MOCK_TOKEN_ID +} + +MOCK_INTERNAL_METADATA_CATALOG = { + "identity" : { + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/identity", + "prefix" : "http://128.224.180.14:5000", + "suffix" : "v3" + }, + "patching" : { + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/patching", + "suffix" : "", + "prefix" : "http://128.224.180.14:15491" + }, + "orchestration" : { + "suffix" : "v1/fcca3cc49d5e42caae15459e27103efc", + "prefix" : "http://128.224.180.14:8004", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/orchestration" + }, + "volume" : { + "prefix" : "http://128.224.180.14:8776", + "suffix" : "v1/fcca3cc49d5e42caae15459e27103efc", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/volume" + }, + "metering" : { + "suffix" : "", + "prefix" : "http://128.224.180.14:8777", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/metering" + }, + "volumev3" : { + "prefix" : "http://128.224.180.14:8776", + "suffix" : "v3/fcca3cc49d5e42caae15459e27103efc", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/volumev3" + }, + "compute" : { + "suffix" : "v2.1/fcca3cc49d5e42caae15459e27103efc", + "prefix" : "http://128.224.180.14:8774", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/compute" + }, + "platform" : { + "prefix" : "http://128.224.180.14:6385", + "suffix" : "v1", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/platform" + }, + "nfv" : { + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/nfv", + "prefix" : "http://128.224.180.14:4545", + "suffix" : "" + }, + "volumev2" : { + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/volumev2", + "suffix" : "v2/fcca3cc49d5e42caae15459e27103efc", + "prefix" : "http://128.224.180.14:8776" + }, + "image" : { + "suffix" : "", + "prefix" : "http://128.224.180.14:9292", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/image" + }, + "network" : { + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/network", + "prefix" : "http://128.224.180.14:9696", + "suffix" : "" + }, + "alarming" : { + "suffix" : "", + "prefix" : "http://128.224.180.14:8042", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/alarming" + }, + "cloudformation" : { + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/cloudformation", + "prefix" : "http://128.224.180.14:8000", + "suffix" : "v1/fcca3cc49d5e42caae15459e27103efc" + } +} + + +MOCK_GET_SERVERS_RESPONSE = { + "servers" : [ + { + "links" : [ + { + "href" : "http://128.224.180.14:8774/v2.1/fcca3cc49d5e42caae15459e27103efc/servers/b2581b5c-7c56-4564-819d-fe7a2ce9c261", + "rel" : "self" + }, + { + "href" : "http://128.224.180.14:8774/fcca3cc49d5e42caae15459e27103efc/servers/b2581b5c-7c56-4564-819d-fe7a2ce9c261", + "rel" : "bookmark" + } + ], + "id" : "b2581b5c-7c56-4564-819d-fe7a2ce9c261", + "name" : "t1" + }, + { + "id" : "ff7b51ca-a272-45f4-b54c-e40b8099e67d", + "name" : "t2", + "links" : [ + { + "rel" : "self", + "href" : "http://128.224.180.14:8774/v2.1/fcca3cc49d5e42caae15459e27103efc/servers/ff7b51ca-a272-45f4-b54c-e40b8099e67d" + }, + { + "rel" : "bookmark", + "href" : "http://128.224.180.14:8774/fcca3cc49d5e42caae15459e27103efc/servers/ff7b51ca-a272-45f4-b54c-e40b8099e67d" + } + ] + } + ] +} + +MOCK_POST_SERVER_REQUEST = { + "server" : { + "accessIPv4": "1.2.3.4", + "accessIPv6": "80fe::", + "name" : "new-server-test", + "imageRef" : "70a599e0-31e7-49b7-b260-868f441e862b", + "flavorRef" : "1", + "availability_zone": "nova", + "OS-DCF:diskConfig": "AUTO", + "metadata" : { + "My Server Name" : "Apache1" + }, + "personality": [ + { + "path": "/etc/banner.txt", + "contents": "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBp dCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5k IGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVs c2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4g QnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRo ZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlv dSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vy c2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6 b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + } + ], + "security_groups": [ + { + "name": "default" + } + ], + "user_data" : "IyEvYmluL2Jhc2gKL2Jpbi9zdQplY2hvICJJIGFtIGluIHlvdSEiCg==" + }, + "OS-SCH-HNT:scheduler_hints": { + "same_host": "48e6a9f6-30af-47e0-bc04-acaed113bb4e" + } +} + +MOCK_POST_SERVER_RESPONSE = { + "server": { + "OS-DCF:diskConfig": "AUTO", + "adminPass": "6NpUwoz2QDRN", + "id": "f5dc173b-6804-445a-a6d8-c705dad5b5eb", + "links": [ + { + "href": "http://openstack.example.com/v2/6f70656e737461636b20342065766572/servers/f5dc173b-6804-445a-a6d8-c705dad5b5eb", + "rel": "self" + }, + { + "href": "http://openstack.example.com/6f70656e737461636b20342065766572/servers/f5dc173b-6804-445a-a6d8-c705dad5b5eb", + "rel": "bookmark" + } + ], + "security_groups": [ + { + "name": "default" + } + ] + } +} + + +MOCK_PATCH_IMAGE_REQUEST = [ + { + "op": "replace", + "path": "/name", + "value": "Fedora 17" + }, + { + "op": "replace", + "path": "/tags", + "value": [ + "fedora", + "beefy" + ] + } +] + +MOCK_PATCH_IMAGE_RESPONSE = { + "checksum": "710544e7f0c828b42f51207342622d33", + "container_format": "ovf", + "created_at": "2016-06-29T16:13:07Z", + "disk_format": "vhd", + "file": "/v2/images/2b61ed2b-f800-4da0-99ff-396b742b8646/file", + "id": "2b61ed2b-f800-4da0-99ff-396b742b8646", + "min_disk": 20, + "min_ram": 512, + "name": "Fedora 17", + "owner": "02a7fb2dd4ef434c8a628c511dcbbeb6", + "protected": "false", + "schema": "/v2/schemas/image", + "self": "/v2/images/2b61ed2b-f800-4da0-99ff-396b742b8646", + "size": 21909, + "status": "active", + "tags": [ + "beefy", + "fedora" + ], + "updated_at": "2016-07-25T14:48:18Z", + "virtual_size": "", + "visibility": "private" +} + + +class MockResponse(object): + status_code = 200 + content = '' + + def json(self): + pass + + +class TestServiceProxy(unittest.TestCase): + def setUp(self): + self.client = Client() + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_token_cache') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_get_token(self, mock_get_vim_info, mock_get_token_cache, mock_get_session): + mock_session_specs = ["head"] + mock_session = mock.Mock(name='mock_session', spec=mock_session_specs) + mock_get_servers_response_obj = mock.Mock(spec=MockResponse) + mock_get_servers_response_obj.status_code=200 + mock_get_servers_response_obj.content = MOCK_GET_SERVERS_RESPONSE + mock_get_servers_response_obj.json.return_value=MOCK_GET_SERVERS_RESPONSE + mock_session.head.return_value = mock_get_servers_response_obj + + mock_get_vim_info.return_value = MOCK_VIM_INFO + mock_get_session.return_value = mock_session + mock_get_token_cache.return_value = (json.dumps(MOCK_AUTH_STATE),json.dumps(MOCK_INTERNAL_METADATA_CATALOG)) + response = self.client.head( + "/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers", + {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_200_OK, response.status_code) + + def test_unauthorized_access(self): + response = self.client.get( + "/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers") + self.assertEquals(status.HTTP_403_FORBIDDEN, response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_expired_auth_token(self, mock_get_vim_info): + mock_get_vim_info.return_value = MOCK_VIM_INFO + + response = self.client.get( + "/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers", + {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_403_FORBIDDEN, response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_token_cache') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_request_without_servicetype(self, mock_get_vim_info, mock_get_token_cache): + mock_get_vim_info.return_value = MOCK_VIM_INFO + mock_get_token_cache.return_value = (json.dumps(MOCK_AUTH_STATE), {}) + servicetype = "compute" + url = ("/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/" + servicetype + + "/v2.1/fcca3cc49d5e42caae15459e27103efc/servers") + response = self.client.get(url, {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code) + + metadata_catalog = copy.deepcopy(MOCK_INTERNAL_METADATA_CATALOG) + metadata_catalog[servicetype] = None + mock_get_token_cache.return_value = (json.dumps(MOCK_AUTH_STATE), json.dumps(metadata_catalog)) + + response = self.client.get(url, {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code) + + metadata_catalog = copy.deepcopy(MOCK_INTERNAL_METADATA_CATALOG) + metadata_catalog[servicetype]['prefix'] = None + metadata_catalog[servicetype]['proxy_prefix'] = None + mock_get_token_cache.return_value = (json.dumps(MOCK_AUTH_STATE), json.dumps(metadata_catalog)) + + response = self.client.get(url, {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_vim_info') + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_auth_state') + @mock.patch.object(VimDriverUtils, 'update_token_cache') + @mock.patch.object(VimDriverUtils, 'get_token_cache') + def test_crud_resources(self, mock_get_token_cache, mock_update_token_cache, mock_get_auth_state, mock_get_session, mock_get_vim_info): + ''' + Test service proxy API: GET + + :param mock_get_token_cache: + :param mock_update_token_cache: + :param mock_get_auth_state: + :param mock_get_session: + :param mock_get_vim_info: + :return: + ''' + + #mock VimDriverUtils APIs + mock_session_specs = ["get", "post", "put", "patch", "delete"] + + mock_get_servers_response_obj = mock.Mock(spec=MockResponse) + mock_get_servers_response_obj.status_code=200 + mock_get_servers_response_obj.content = MOCK_GET_SERVERS_RESPONSE + mock_get_servers_response_obj.json.return_value=MOCK_GET_SERVERS_RESPONSE + + mock_post_server_response_obj = mock.Mock(spec=MockResponse) + mock_post_server_response_obj.status_code=202 + mock_post_server_response_obj.content = MOCK_POST_SERVER_RESPONSE + mock_post_server_response_obj.json.return_value=MOCK_POST_SERVER_RESPONSE + + mock_patch_server_response_obj = mock.Mock(spec=MockResponse) + mock_patch_server_response_obj.status_code=202 + mock_patch_server_response_obj.content = MOCK_PATCH_IMAGE_REQUEST + mock_patch_server_response_obj.json.return_value=MOCK_PATCH_IMAGE_REQUEST + + mock_delete_server_response_obj = mock.Mock(spec=MockResponse) + mock_delete_server_response_obj.status_code=204 + + mock_session = mock.Mock(name='mock_session', spec=mock_session_specs) + mock_session.get.return_value = mock_get_servers_response_obj + mock_session.post.return_value = mock_post_server_response_obj + mock_session.patch.return_value = mock_patch_server_response_obj + mock_session.delete.return_value = mock_delete_server_response_obj + + mock_get_vim_info.return_value = MOCK_VIM_INFO + mock_get_session.return_value = mock_session + mock_get_auth_state.return_value = json.dumps(MOCK_AUTH_STATE) + mock_update_token_cache.return_value = MOCK_TOKEN_ID + mock_get_token_cache.return_value = (json.dumps(MOCK_AUTH_STATE),json.dumps(MOCK_INTERNAL_METADATA_CATALOG)) + + # Create resource + response = self.client.post( + "/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers", + MOCK_POST_SERVER_REQUEST, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_202_ACCEPTED, response.status_code) + context = response.json() + self.assertEquals(MOCK_TOKEN_ID, response['X-Subject-Token']) + self.assertIsNotNone(context['server']) + + # Retrieve resource + response = self.client.get( + "/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers", + {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_200_OK, response.status_code) + context = response.json() + + self.assertEquals(MOCK_TOKEN_ID, response['X-Subject-Token']) + self.assertIsNotNone(context['servers']) + + # Update resource + response = self.client.get( + "/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers", + {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_200_OK, response.status_code) + context = response.json() + + self.assertEquals(MOCK_TOKEN_ID, response['X-Subject-Token']) + self.assertIsNotNone(context['servers']) + + #simulate client to make the request + response = self.client.delete( + "/api/multicloud-ocata/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers/324dfb7d-f4a9-419a-9a19-237df04b443b", + HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_204_NO_CONTENT, response.status_code) + self.assertEquals(MOCK_TOKEN_ID, response['X-Subject-Token']) diff --git a/windriver/titanium_cloud/extensions/tests/__init__.py b/windriver/titanium_cloud/extensions/tests/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/windriver/titanium_cloud/extensions/tests/__init__.py diff --git a/windriver/titanium_cloud/extensions/tests/test_epacaps.py b/windriver/titanium_cloud/extensions/tests/test_epacaps.py new file mode 100644 index 00000000..544b8ef7 --- /dev/null +++ b/windriver/titanium_cloud/extensions/tests/test_epacaps.py @@ -0,0 +1,67 @@ +# Copyright (c) 2017 Intel Corporation. +# +# 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 json + +import mock +from django.test import Client +from rest_framework import status +import unittest + +from newton.requests.views.util import VimDriverUtils + +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": "titanium_cloud", + "vimId": "windriver-hudson-dc_RegionOne", + 'cloud_owner':'windriver-hudson-dc', + 'cloud_region_id':'RegionOne', + 'cloud_extra_info':'', + 'cloud_epa_caps':'{"huge_page":"true","cpu_pinning":"true",\ + "cpu_thread_policy":"true","numa_aware":"true","sriov":"true",\ + "dpdk_vswitch":"true","rdt":"false","numa_locality_pci":"true"}', + 'insecure':'True', +} + + +class TestEpaCaps(unittest.TestCase): + def setUp(self): + self.client = Client() + + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_get_epa_caps_info(self, mock_get_vim_info): + mock_get_vim_info.return_value = MOCK_VIM_INFO + cloud_owner = "windriver-hudson-dc" + cloud_region_id = "RegionOne" + vimid = cloud_owner + "_" + cloud_region_id + + response = self.client.get( + "/api/multicloud-titanium_cloud/v0/" + vimid + "/extensions/epa-caps") + json_content = response.json() + + self.assertEquals(status.HTTP_200_OK, response.status_code) + self.assertEquals(4, len(json_content.keys())) + self.assertEquals(cloud_owner, json_content["cloud-owner"]) + self.assertEquals(cloud_region_id, json_content["cloud-region-id"]) + self.assertEquals(vimid, json_content["vimid"]) + self.assertEquals(json.loads(MOCK_VIM_INFO['cloud_epa_caps']), + json_content["cloud-epa-caps"])
\ No newline at end of file diff --git a/windriver/titanium_cloud/extensions/tests/test_extensions.py b/windriver/titanium_cloud/extensions/tests/test_extensions.py new file mode 100644 index 00000000..93d990bb --- /dev/null +++ b/windriver/titanium_cloud/extensions/tests/test_extensions.py @@ -0,0 +1,45 @@ +# Copyright (c) 2017 Intel Corporation. +# +# 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. + +from django.test import Client +from rest_framework import status +import unittest + + +class TestExtensions(unittest.TestCase): + def setUp(self): + self.client = Client() + + def test_get_extensions_info(self): + cloud_owner = "windriver-hudson-dc" + cloud_region_id = "RegionOne" + vimid = cloud_owner + "_" + cloud_region_id + + response = self.client.get( + "/api/multicloud-titanium_cloud/v0/" + vimid + "/extensions/") + json_content = response.json() + + self.assertEquals(status.HTTP_200_OK, response.status_code) + self.assertEquals(4, len(json_content.keys())) + + self.assertEquals(cloud_owner, json_content["cloud-owner"]) + self.assertEquals(cloud_region_id, json_content["cloud-region-id"]) + self.assertEquals(vimid, json_content["vimid"]) + + self.assertEquals("epa-caps", json_content["extensions"][0]["alias"]) + self.assertEquals("Multiple network support", json_content["extensions"][0]["description"]) + self.assertEquals("EPACapsQuery", json_content["extensions"][0]["name"]) + self.assertEquals("http://127.0.0.1:80/api/multicloud-titanium_cloud/v0/%s/extensions/epa-caps" % vimid, + json_content["extensions"][0]["url"]) + self.assertEquals("", json_content["extensions"][0]["spec"])
\ No newline at end of file diff --git a/windriver/titanium_cloud/proxy/tests/__init__.py b/windriver/titanium_cloud/proxy/tests/__init__.py new file mode 100644 index 00000000..48b6e44b --- /dev/null +++ b/windriver/titanium_cloud/proxy/tests/__init__.py @@ -0,0 +1,13 @@ +# Copyright (c) 2017 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. +# 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. diff --git a/windriver/titanium_cloud/proxy/tests/test_identity_proxy.py b/windriver/titanium_cloud/proxy/tests/test_identity_proxy.py new file mode 100644 index 00000000..72ffd45f --- /dev/null +++ b/windriver/titanium_cloud/proxy/tests/test_identity_proxy.py @@ -0,0 +1,533 @@ +# Copyright (c) 2017 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. +# 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 json + +import mock +import unittest + +from django.test import Client +from rest_framework import status + +from keystoneauth1 import session +from keystoneauth1.exceptions import HttpError + +from newton.requests.views.util import VimDriverUtils +from titanium_cloud.proxy.views.identityV3 import Tokens + +mock_viminfo = { + "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": "titanium_cloud", + "vimId": "windriver-hudson-dc_RegionOne", + 'cloud_owner':'windriver-hudson-dc', + 'cloud_region_id':'RegionOne', + 'cloud_extra_info':'', + 'cloud_epa_caps':'{"huge_page":"true","cpu_pinning":"true",\ + "cpu_thread_policy":"true","numa_aware":"true","sriov":"true",\ + "dpdk_vswitch":"true","rdt":"false","numa_locality_pci":"true"}', + 'insecure':'True', +} + +mock_token_id="1a62b3971d774404a504c5d9a3e506e3" + +mock_catalog_response = { + "catalog" : [ + { + "id" : "99aefcc82a9246f98f8c281e61ffc754", + "endpoints" : [ + { + "region" : "RegionOne", + "url" : "http://128.224.180.14:9696", + "id" : "39583c1508ad4b71b380570a745ee10a", + "interface" : "public", + "region_id" : "RegionOne" + }, + { + "url" : "http://192.168.204.2:9696", + "region" : "RegionOne", + "id" : "37e8d07ba24e4b8f93490c9daaba06e2", + "interface" : "internal", + "region_id" : "RegionOne" + }, + { + "interface" : "admin", + "id" : "7eee4ca98d444b1abb00a50d4b89373f", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://192.168.204.2:9696" + } + ], + "name" : "neutron", + "type" : "network" + }, + { + "endpoints" : [ + { + "interface" : "public", + "id" : "10496738fa374295a4a88a63b81a1589", + "region_id" : "RegionOne", + "url" : "http://128.224.180.14:8777", + "region" : "RegionOne" + }, + { + "id" : "02dcb8c0bd464c4489fa0a0c9f28571f", + "region_id" : "RegionOne", + "interface" : "internal", + "url" : "http://192.168.204.2:8777", + "region" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "8a73b0d3743b4e78b87614690f6e97fe", + "interface" : "admin", + "url" : "http://192.168.204.2:8777", + "region" : "RegionOne" + } + ], + "id" : "d131054da83f4c93833799747a0f4709", + "name" : "ceilometer", + "type" : "metering" + }, + { + "type" : "volumev2", + "name" : "cinderv2", + "endpoints" : [ + { + "id" : "35a67ad36f0447d19c9662babf7cf609", + "interface" : "public", + "region_id" : "RegionOne", + "url" : "http://128.224.180.14:8776/v2/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v2/fcca3cc49d5e42caae15459e27103efc", + "id" : "c6ea42052268420fa2c8d351ee68c922", + "interface" : "internal", + "region_id" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "91cb24853dc3450d847b0c286a2e44ea", + "interface" : "admin", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v2/fcca3cc49d5e42caae15459e27103efc" + } + ], + "id" : "40440057102440739c30be10a66bc5d1" + }, + { + "name" : "heat", + "type" : "orchestration", + "id" : "35300cce88db4bd4bb5a72ffe3b88b00", + "endpoints" : [ + { + "id" : "58999d7b4a94439089ecfb2aca2d7f6c", + "region_id" : "RegionOne", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:8004/v1/fcca3cc49d5e42caae15459e27103efc" + }, + { + "url" : "http://192.168.204.2:8004/v1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "interface" : "internal", + "id" : "1e0ee1a2aef84802b921d422372a567e", + "region_id" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8004/v1/fcca3cc49d5e42caae15459e27103efc", + "id" : "17661bf4859741b8a43a461dedad1871", + "region_id" : "RegionOne", + "interface" : "admin" + } + ] + }, + { + "id" : "08dc6912aea64c01925012c8a6df250a", + "endpoints" : [ + { + "id" : "02792c4eed77486083f9b2e52d7b94b0", + "region_id" : "RegionOne", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:5000/v3" + }, + { + "id" : "b6d5cad394b94309ae40d8de88059c5f", + "region_id" : "RegionOne", + "interface" : "internal", + "url" : "http://192.168.204.2:5000/v3", + "region" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:35357/v3", + "region_id" : "RegionOne", + "id" : "1f18e2b7c6a34493b86853b65917888e", + "interface" : "admin" + } + ], + "type" : "identity", + "name" : "keystone" + }, + { + "name" : "vim", + "type" : "nfv", + "endpoints" : [ + { + "url" : "http://128.224.180.14:4545", + "region" : "RegionOne", + "id" : "b33e317345e4480ab0786e4960995ec9", + "interface" : "public", + "region_id" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:4545", + "interface" : "internal", + "id" : "03c85828d5bf432ab04831aa65ac9c52", + "region_id" : "RegionOne" + }, + { + "id" : "067983abb061476cb53a9e23a740d98f", + "region_id" : "RegionOne", + "interface" : "admin", + "url" : "http://192.168.204.2:4545", + "region" : "RegionOne" + } + ], + "id" : "01636c856fc84988b38b9117eb4a8021" + }, + { + "name" : "aodh", + "type" : "alarming", + "id" : "eb269151d0e44744a5b5449657bdc61c", + "endpoints" : [ + { + "id" : "5bfc6c056e0244c493642eb82f6aaa11", + "region_id" : "RegionOne", + "interface" : "public", + "url" : "http://128.224.180.14:8042", + "region" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8042", + "region_id" : "RegionOne", + "id" : "ad69c7f76dce4089a195b9221ddbfb44", + "interface" : "internal" + }, + { + "interface" : "admin", + "id" : "3e8fcdfa7bcb40b0ae33c282adfcc9ff", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8042" + } + ] + }, + { + "name" : "sysinv", + "type" : "platform", + "endpoints" : [ + { + "region" : "RegionOne", + "url" : "http://128.224.180.14:6385/v1", + "interface" : "public", + "id" : "ba4ba8104590421b84672306c7e0e1f1", + "region_id" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:6385/v1", + "interface" : "internal", + "id" : "a1cba34b163f496ab1acd6e9b51e39a2", + "region_id" : "RegionOne" + }, + { + "url" : "http://192.168.204.2:6385/v1", + "region" : "RegionOne", + "id" : "7c171210a2c841a6a52a5713e316d6fc", + "interface" : "admin", + "region_id" : "RegionOne" + } + ], + "id" : "256bbad671f946fea543e6bd71f98875" + }, + { + "id" : "e84665dcce814c05b4c5084964547534", + "endpoints" : [ + { + "url" : "http://128.224.180.14:8000/v1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "region_id" : "RegionOne", + "id" : "b2ed1a23dc6944bea129c20861e0286a", + "interface" : "public" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8000/v1/fcca3cc49d5e42caae15459e27103efc", + "interface" : "internal", + "id" : "c4df7c6bc15646848eff35caf6ffea8e", + "region_id" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "61b3dabb761443a89ab549f437c05ab0", + "interface" : "admin", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8000/v1/fcca3cc49d5e42caae15459e27103efc" + } + ], + "name" : "heat-cfn", + "type" : "cloudformation" + }, + { + "id" : "823024424a014981a3721229491c0b1a", + "endpoints" : [ + { + "region" : "RegionOne", + "url" : "http://128.224.180.14:8776/v1/fcca3cc49d5e42caae15459e27103efc", + "region_id" : "RegionOne", + "id" : "4a52e4e54ff440789f9a797919c4a0f2", + "interface" : "public" + }, + { + "url" : "http://192.168.204.2:8776/v1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "id" : "d4f9a84476524a39844f0fce63f1022e", + "region_id" : "RegionOne", + "interface" : "internal" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v1/fcca3cc49d5e42caae15459e27103efc", + "interface" : "admin", + "id" : "81bf3810a8cc4697b68c6e93b5b8fe1f", + "region_id" : "RegionOne" + } + ], + "type" : "volume", + "name" : "cinder" + }, + { + "name" : "glance", + "type" : "image", + "endpoints" : [ + { + "id" : "bd930aba961946cfb1401bada56d55e3", + "region_id" : "RegionOne", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:9292" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:9292", + "id" : "c11da585f0b141b99d1e18bb9a607beb", + "region_id" : "RegionOne", + "interface" : "internal" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:9292", + "id" : "31b26c625a6a4fc7910dc5935155996e", + "interface" : "admin", + "region_id" : "RegionOne" + } + ], + "id" : "3b78cf039bc54d1bbb99ab3a4be15ef1" + }, + { + "id" : "b8701374bf254de1beee8a2c9ecc6b33", + "endpoints" : [ + { + "region_id" : "RegionOne", + "id" : "f7407f330c8b4577b1d377d3fab9c2f8", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:15491" + }, + { + "url" : "http://192.168.204.2:5491", + "region" : "RegionOne", + "interface" : "internal", + "id" : "0b37ce31a32f4b6fa5e1aa0d6c20680f", + "region_id" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "7b87ea72adf245e1991e9e0df29b7ea9", + "interface" : "admin", + "region" : "RegionOne", + "url" : "http://192.168.204.2:5491" + } + ], + "type" : "patching", + "name" : "patching" + }, + { + "id" : "0ec0923a58f04ffeb6fced3bbc5c0947", + "endpoints" : [ + { + "url" : "http://128.224.180.14:8774/v2.1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "id" : "13168b12da17451fb39630de67db168f", + "region_id" : "RegionOne", + "interface" : "public" + }, + { + "id" : "22dd6a44209f42d986b82e3aa6535f82", + "interface" : "internal", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8774/v2.1/fcca3cc49d5e42caae15459e27103efc" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8774/v2.1/fcca3cc49d5e42caae15459e27103efc", + "id" : "552a991ae501492f841c1b6e2ff38fc5", + "region_id" : "RegionOne", + "interface" : "admin" + } + ], + "type" : "compute", + "name" : "nova" + }, + { + "id" : "50b219650f1049b097b3f14e8c70cdf8", + "endpoints" : [ + { + "interface" : "public", + "id" : "5a4276cd6e4d43e883cf8640d4e13f7d", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://128.224.180.14:8776/v3/fcca3cc49d5e42caae15459e27103efc" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v3/fcca3cc49d5e42caae15459e27103efc", + "region_id" : "RegionOne", + "id" : "c796df3ca5a84fc18db5b43a55283953", + "interface" : "internal" + }, + { + "region_id" : "RegionOne", + "id" : "cf55c2b34d0049ba835a2e48b9ad0e2e", + "interface" : "admin", + "url" : "http://192.168.204.2:8776/v3/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne" + } + ], + "type" : "volumev3", + "name" : "cinderv3" + } + ], +} + +mock_auth_state = { + "body" : { + "token" : { + "is_domain" : "false", + "expires_at" : "2017-08-27T14:19:15.000000Z", + "issued_at" : "2017-08-27T13:19:15.000000Z", + "roles" : [ + { + "id" : "9fe2ff9ee4384b1894a90878d3e92bab", + "name" : "_member_" + }, + { + "id" : "b86a7e02935844b899d3d326f83c1b1f", + "name" : "admin" + }, + { + "name" : "heat_stack_owner", + "id" : "7de502236e954c8282de32e773fc052e" + } + ], + "methods" : [ + "password" + ], + "catalog" : mock_catalog_response['catalog'], + "project" : { + "name" : "admin", + "id" : "fcca3cc49d5e42caae15459e27103efc", + "domain" : { + "id" : "default", + "name" : "Default" + } + }, + "user" : { + "name" : "admin", + "id" : "9efb043c7629497a8028d7325ca1afb0", + "domain" : { + "id" : "default", + "name" : "Default" + } + }, + "audit_ids" : [ + "_ZWT10DtSZKRXIvIcxun7w" + ] + } + }, + "auth_token" : mock_token_id +} + + +class TestIdentityService(unittest.TestCase): + def setUp(self): + self.client = Client() + + @mock.patch.object(VimDriverUtils, 'get_vim_info') + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_auth_state') + @mock.patch.object(VimDriverUtils, 'update_token_cache') + def test_token(self, mock_update_token_cache, mock_get_auth_state, mock_get_session, mock_get_vim_info): + ''' + test API: get token + :param mock_update_token_cache: + :param mock_get_auth_state: + :param mock_get_session: + :param mock_get_vim_info: + :return: + ''' + + #mock VimDriverUtils APIs + mock_session_specs = ["get"] + mock_session_get_response = {'status':200} + mock_session = mock.Mock(name='mock_session', spec=mock_session_specs) + mock_session.get.return_value = mock_session_get_response + + mock_get_vim_info.return_value = mock_viminfo + mock_get_session.return_value = mock_session + mock_get_auth_state.return_value = json.dumps(mock_auth_state) + mock_update_token_cache.return_value = mock_token_id + + #simulate client to make the request + data ={} + response = self.client.post("/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/identity/v3/auth/tokens", data=data, format='json') + self.failUnlessEqual(status.HTTP_201_CREATED, response.status_code) + context = response.json() + + self.assertTrue(response['X-Subject-Token'] == mock_token_id) + self.assertTrue(context['token']['catalog'] != None) diff --git a/windriver/titanium_cloud/proxy/tests/test_service_proxy.py b/windriver/titanium_cloud/proxy/tests/test_service_proxy.py new file mode 100644 index 00000000..6f43f258 --- /dev/null +++ b/windriver/titanium_cloud/proxy/tests/test_service_proxy.py @@ -0,0 +1,855 @@ +# Copyright (c) 2017 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. +# 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 copy +import json + +from django.test import Client +import mock +from rest_framework import status +import unittest + + +from newton.requests.views.util import VimDriverUtils + +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": "titanium_cloud", + "vimId": "windriver-hudson-dc_RegionOne", + 'cloud_owner':'windriver-hudson-dc', + 'cloud_region_id':'RegionOne', + 'cloud_extra_info':'', + 'cloud_epa_caps':'{"huge_page":"true","cpu_pinning":"true",\ + "cpu_thread_policy":"true","numa_aware":"true","sriov":"true",\ + "dpdk_vswitch":"true","rdt":"false","numa_locality_pci":"true"}', + 'insecure':'True', +} + +MOCK_TOKEN_ID="1a62b3971d774404a504c5d9a3e506e3" + +MOCK_CATALOG_RESPONSE = { + "catalog" : [ + { + "id" : "99aefcc82a9246f98f8c281e61ffc754", + "endpoints" : [ + { + "region" : "RegionOne", + "url" : "http://128.224.180.14:9696", + "id" : "39583c1508ad4b71b380570a745ee10a", + "interface" : "public", + "region_id" : "RegionOne" + }, + { + "url" : "http://192.168.204.2:9696", + "region" : "RegionOne", + "id" : "37e8d07ba24e4b8f93490c9daaba06e2", + "interface" : "internal", + "region_id" : "RegionOne" + }, + { + "interface" : "admin", + "id" : "7eee4ca98d444b1abb00a50d4b89373f", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://192.168.204.2:9696" + } + ], + "name" : "neutron", + "type" : "network" + }, + { + "endpoints" : [ + { + "interface" : "public", + "id" : "10496738fa374295a4a88a63b81a1589", + "region_id" : "RegionOne", + "url" : "http://128.224.180.14:8777", + "region" : "RegionOne" + }, + { + "id" : "02dcb8c0bd464c4489fa0a0c9f28571f", + "region_id" : "RegionOne", + "interface" : "internal", + "url" : "http://192.168.204.2:8777", + "region" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "8a73b0d3743b4e78b87614690f6e97fe", + "interface" : "admin", + "url" : "http://192.168.204.2:8777", + "region" : "RegionOne" + } + ], + "id" : "d131054da83f4c93833799747a0f4709", + "name" : "ceilometer", + "type" : "metering" + }, + { + "type" : "volumev2", + "name" : "cinderv2", + "endpoints" : [ + { + "id" : "35a67ad36f0447d19c9662babf7cf609", + "interface" : "public", + "region_id" : "RegionOne", + "url" : "http://128.224.180.14:8776/v2/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v2/fcca3cc49d5e42caae15459e27103efc", + "id" : "c6ea42052268420fa2c8d351ee68c922", + "interface" : "internal", + "region_id" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "91cb24853dc3450d847b0c286a2e44ea", + "interface" : "admin", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v2/fcca3cc49d5e42caae15459e27103efc" + } + ], + "id" : "40440057102440739c30be10a66bc5d1" + }, + { + "name" : "heat", + "type" : "orchestration", + "id" : "35300cce88db4bd4bb5a72ffe3b88b00", + "endpoints" : [ + { + "id" : "58999d7b4a94439089ecfb2aca2d7f6c", + "region_id" : "RegionOne", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:8004/v1/fcca3cc49d5e42caae15459e27103efc" + }, + { + "url" : "http://192.168.204.2:8004/v1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "interface" : "internal", + "id" : "1e0ee1a2aef84802b921d422372a567e", + "region_id" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8004/v1/fcca3cc49d5e42caae15459e27103efc", + "id" : "17661bf4859741b8a43a461dedad1871", + "region_id" : "RegionOne", + "interface" : "admin" + } + ] + }, + { + "id" : "08dc6912aea64c01925012c8a6df250a", + "endpoints" : [ + { + "id" : "02792c4eed77486083f9b2e52d7b94b0", + "region_id" : "RegionOne", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:5000/v3" + }, + { + "id" : "b6d5cad394b94309ae40d8de88059c5f", + "region_id" : "RegionOne", + "interface" : "internal", + "url" : "http://192.168.204.2:5000/v3", + "region" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:35357/v3", + "region_id" : "RegionOne", + "id" : "1f18e2b7c6a34493b86853b65917888e", + "interface" : "admin" + } + ], + "type" : "identity", + "name" : "keystone" + }, + { + "name" : "vim", + "type" : "nfv", + "endpoints" : [ + { + "url" : "http://128.224.180.14:4545", + "region" : "RegionOne", + "id" : "b33e317345e4480ab0786e4960995ec9", + "interface" : "public", + "region_id" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:4545", + "interface" : "internal", + "id" : "03c85828d5bf432ab04831aa65ac9c52", + "region_id" : "RegionOne" + }, + { + "id" : "067983abb061476cb53a9e23a740d98f", + "region_id" : "RegionOne", + "interface" : "admin", + "url" : "http://192.168.204.2:4545", + "region" : "RegionOne" + } + ], + "id" : "01636c856fc84988b38b9117eb4a8021" + }, + { + "name" : "aodh", + "type" : "alarming", + "id" : "eb269151d0e44744a5b5449657bdc61c", + "endpoints" : [ + { + "id" : "5bfc6c056e0244c493642eb82f6aaa11", + "region_id" : "RegionOne", + "interface" : "public", + "url" : "http://128.224.180.14:8042", + "region" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8042", + "region_id" : "RegionOne", + "id" : "ad69c7f76dce4089a195b9221ddbfb44", + "interface" : "internal" + }, + { + "interface" : "admin", + "id" : "3e8fcdfa7bcb40b0ae33c282adfcc9ff", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8042" + } + ] + }, + { + "name" : "sysinv", + "type" : "platform", + "endpoints" : [ + { + "region" : "RegionOne", + "url" : "http://128.224.180.14:6385/v1", + "interface" : "public", + "id" : "ba4ba8104590421b84672306c7e0e1f1", + "region_id" : "RegionOne" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:6385/v1", + "interface" : "internal", + "id" : "a1cba34b163f496ab1acd6e9b51e39a2", + "region_id" : "RegionOne" + }, + { + "url" : "http://192.168.204.2:6385/v1", + "region" : "RegionOne", + "id" : "7c171210a2c841a6a52a5713e316d6fc", + "interface" : "admin", + "region_id" : "RegionOne" + } + ], + "id" : "256bbad671f946fea543e6bd71f98875" + }, + { + "id" : "e84665dcce814c05b4c5084964547534", + "endpoints" : [ + { + "url" : "http://128.224.180.14:8000/v1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "region_id" : "RegionOne", + "id" : "b2ed1a23dc6944bea129c20861e0286a", + "interface" : "public" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8000/v1/fcca3cc49d5e42caae15459e27103efc", + "interface" : "internal", + "id" : "c4df7c6bc15646848eff35caf6ffea8e", + "region_id" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "61b3dabb761443a89ab549f437c05ab0", + "interface" : "admin", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8000/v1/fcca3cc49d5e42caae15459e27103efc" + } + ], + "name" : "heat-cfn", + "type" : "cloudformation" + }, + { + "id" : "823024424a014981a3721229491c0b1a", + "endpoints" : [ + { + "region" : "RegionOne", + "url" : "http://128.224.180.14:8776/v1/fcca3cc49d5e42caae15459e27103efc", + "region_id" : "RegionOne", + "id" : "4a52e4e54ff440789f9a797919c4a0f2", + "interface" : "public" + }, + { + "url" : "http://192.168.204.2:8776/v1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "id" : "d4f9a84476524a39844f0fce63f1022e", + "region_id" : "RegionOne", + "interface" : "internal" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v1/fcca3cc49d5e42caae15459e27103efc", + "interface" : "admin", + "id" : "81bf3810a8cc4697b68c6e93b5b8fe1f", + "region_id" : "RegionOne" + } + ], + "type" : "volume", + "name" : "cinder" + }, + { + "name" : "glance", + "type" : "image", + "endpoints" : [ + { + "id" : "bd930aba961946cfb1401bada56d55e3", + "region_id" : "RegionOne", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:9292" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:9292", + "id" : "c11da585f0b141b99d1e18bb9a607beb", + "region_id" : "RegionOne", + "interface" : "internal" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:9292", + "id" : "31b26c625a6a4fc7910dc5935155996e", + "interface" : "admin", + "region_id" : "RegionOne" + } + ], + "id" : "3b78cf039bc54d1bbb99ab3a4be15ef1" + }, + { + "id" : "b8701374bf254de1beee8a2c9ecc6b33", + "endpoints" : [ + { + "region_id" : "RegionOne", + "id" : "f7407f330c8b4577b1d377d3fab9c2f8", + "interface" : "public", + "region" : "RegionOne", + "url" : "http://128.224.180.14:15491" + }, + { + "url" : "http://192.168.204.2:5491", + "region" : "RegionOne", + "interface" : "internal", + "id" : "0b37ce31a32f4b6fa5e1aa0d6c20680f", + "region_id" : "RegionOne" + }, + { + "region_id" : "RegionOne", + "id" : "7b87ea72adf245e1991e9e0df29b7ea9", + "interface" : "admin", + "region" : "RegionOne", + "url" : "http://192.168.204.2:5491" + } + ], + "type" : "patching", + "name" : "patching" + }, + { + "id" : "0ec0923a58f04ffeb6fced3bbc5c0947", + "endpoints" : [ + { + "url" : "http://128.224.180.14:8774/v2.1/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne", + "id" : "13168b12da17451fb39630de67db168f", + "region_id" : "RegionOne", + "interface" : "public" + }, + { + "id" : "22dd6a44209f42d986b82e3aa6535f82", + "interface" : "internal", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://192.168.204.2:8774/v2.1/fcca3cc49d5e42caae15459e27103efc" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8774/v2.1/fcca3cc49d5e42caae15459e27103efc", + "id" : "552a991ae501492f841c1b6e2ff38fc5", + "region_id" : "RegionOne", + "interface" : "admin" + } + ], + "type" : "compute", + "name" : "nova" + }, + { + "id" : "50b219650f1049b097b3f14e8c70cdf8", + "endpoints" : [ + { + "interface" : "public", + "id" : "5a4276cd6e4d43e883cf8640d4e13f7d", + "region_id" : "RegionOne", + "region" : "RegionOne", + "url" : "http://128.224.180.14:8776/v3/fcca3cc49d5e42caae15459e27103efc" + }, + { + "region" : "RegionOne", + "url" : "http://192.168.204.2:8776/v3/fcca3cc49d5e42caae15459e27103efc", + "region_id" : "RegionOne", + "id" : "c796df3ca5a84fc18db5b43a55283953", + "interface" : "internal" + }, + { + "region_id" : "RegionOne", + "id" : "cf55c2b34d0049ba835a2e48b9ad0e2e", + "interface" : "admin", + "url" : "http://192.168.204.2:8776/v3/fcca3cc49d5e42caae15459e27103efc", + "region" : "RegionOne" + } + ], + "type" : "volumev3", + "name" : "cinderv3" + } + ] +} + +MOCK_AUTH_STATE = { + "body" : { + "token" : { + "is_domain" : "false", + "expires_at" : "2017-08-27T14:19:15.000000Z", + "issued_at" : "2017-08-27T13:19:15.000000Z", + "roles" : [ + { + "id" : "9fe2ff9ee4384b1894a90878d3e92bab", + "name" : "_member_" + }, + { + "id" : "b86a7e02935844b899d3d326f83c1b1f", + "name" : "admin" + }, + { + "name" : "heat_stack_owner", + "id" : "7de502236e954c8282de32e773fc052e" + } + ], + "methods" : [ + "password" + ], + "catalog" : MOCK_CATALOG_RESPONSE['catalog'], + "project" : { + "name" : "admin", + "id" : "fcca3cc49d5e42caae15459e27103efc", + "domain" : { + "id" : "default", + "name" : "Default" + } + }, + "user" : { + "name" : "admin", + "id" : "9efb043c7629497a8028d7325ca1afb0", + "domain" : { + "id" : "default", + "name" : "Default" + } + }, + "audit_ids" : [ + "_ZWT10DtSZKRXIvIcxun7w" + ] + } + }, + "auth_token" : MOCK_TOKEN_ID +} + +MOCK_INTERNAL_METADATA_CATALOG = { + "identity" : { + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/identity", + "prefix" : "http://128.224.180.14:5000", + "suffix" : "v3" + }, + "patching" : { + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/patching", + "suffix" : "", + "prefix" : "http://128.224.180.14:15491" + }, + "orchestration" : { + "suffix" : "v1/fcca3cc49d5e42caae15459e27103efc", + "prefix" : "http://128.224.180.14:8004", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/orchestration" + }, + "volume" : { + "prefix" : "http://128.224.180.14:8776", + "suffix" : "v1/fcca3cc49d5e42caae15459e27103efc", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/volume" + }, + "metering" : { + "suffix" : "", + "prefix" : "http://128.224.180.14:8777", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/metering" + }, + "volumev3" : { + "prefix" : "http://128.224.180.14:8776", + "suffix" : "v3/fcca3cc49d5e42caae15459e27103efc", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/volumev3" + }, + "compute" : { + "suffix" : "v2.1/fcca3cc49d5e42caae15459e27103efc", + "prefix" : "http://128.224.180.14:8774", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/compute" + }, + "platform" : { + "prefix" : "http://128.224.180.14:6385", + "suffix" : "v1", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/platform" + }, + "nfv" : { + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/nfv", + "prefix" : "http://128.224.180.14:4545", + "suffix" : "" + }, + "volumev2" : { + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/volumev2", + "suffix" : "v2/fcca3cc49d5e42caae15459e27103efc", + "prefix" : "http://128.224.180.14:8776" + }, + "image" : { + "suffix" : "", + "prefix" : "http://128.224.180.14:9292", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/image" + }, + "network" : { + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/network", + "prefix" : "http://128.224.180.14:9696", + "suffix" : "" + }, + "alarming" : { + "suffix" : "", + "prefix" : "http://128.224.180.14:8042", + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/alarming" + }, + "cloudformation" : { + "proxy_prefix" : "http://172.16.77.20:9003/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/cloudformation", + "prefix" : "http://128.224.180.14:8000", + "suffix" : "v1/fcca3cc49d5e42caae15459e27103efc" + } +} + + +MOCK_GET_SERVERS_RESPONSE = { + "servers" : [ + { + "links" : [ + { + "href" : "http://128.224.180.14:8774/v2.1/fcca3cc49d5e42caae15459e27103efc/servers/b2581b5c-7c56-4564-819d-fe7a2ce9c261", + "rel" : "self" + }, + { + "href" : "http://128.224.180.14:8774/fcca3cc49d5e42caae15459e27103efc/servers/b2581b5c-7c56-4564-819d-fe7a2ce9c261", + "rel" : "bookmark" + } + ], + "id" : "b2581b5c-7c56-4564-819d-fe7a2ce9c261", + "name" : "t1" + }, + { + "id" : "ff7b51ca-a272-45f4-b54c-e40b8099e67d", + "name" : "t2", + "links" : [ + { + "rel" : "self", + "href" : "http://128.224.180.14:8774/v2.1/fcca3cc49d5e42caae15459e27103efc/servers/ff7b51ca-a272-45f4-b54c-e40b8099e67d" + }, + { + "rel" : "bookmark", + "href" : "http://128.224.180.14:8774/fcca3cc49d5e42caae15459e27103efc/servers/ff7b51ca-a272-45f4-b54c-e40b8099e67d" + } + ] + } + ] +} + +MOCK_POST_SERVER_REQUEST = { + "server" : { + "accessIPv4": "1.2.3.4", + "accessIPv6": "80fe::", + "name" : "new-server-test", + "imageRef" : "70a599e0-31e7-49b7-b260-868f441e862b", + "flavorRef" : "1", + "availability_zone": "nova", + "OS-DCF:diskConfig": "AUTO", + "metadata" : { + "My Server Name" : "Apache1" + }, + "personality": [ + { + "path": "/etc/banner.txt", + "contents": "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBp dCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5k IGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVs c2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4g QnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRo ZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlv dSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vy c2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6 b25zLiINCg0KLVJpY2hhcmQgQmFjaA==" + } + ], + "security_groups": [ + { + "name": "default" + } + ], + "user_data" : "IyEvYmluL2Jhc2gKL2Jpbi9zdQplY2hvICJJIGFtIGluIHlvdSEiCg==" + }, + "OS-SCH-HNT:scheduler_hints": { + "same_host": "48e6a9f6-30af-47e0-bc04-acaed113bb4e" + } +} + +MOCK_POST_SERVER_RESPONSE = { + "server": { + "OS-DCF:diskConfig": "AUTO", + "adminPass": "6NpUwoz2QDRN", + "id": "f5dc173b-6804-445a-a6d8-c705dad5b5eb", + "links": [ + { + "href": "http://openstack.example.com/v2/6f70656e737461636b20342065766572/servers/f5dc173b-6804-445a-a6d8-c705dad5b5eb", + "rel": "self" + }, + { + "href": "http://openstack.example.com/6f70656e737461636b20342065766572/servers/f5dc173b-6804-445a-a6d8-c705dad5b5eb", + "rel": "bookmark" + } + ], + "security_groups": [ + { + "name": "default" + } + ] + } +} + + +MOCK_PATCH_IMAGE_REQUEST = [ + { + "op": "replace", + "path": "/name", + "value": "Fedora 17" + }, + { + "op": "replace", + "path": "/tags", + "value": [ + "fedora", + "beefy" + ] + } +] + +MOCK_PATCH_IMAGE_RESPONSE = { + "checksum": "710544e7f0c828b42f51207342622d33", + "container_format": "ovf", + "created_at": "2016-06-29T16:13:07Z", + "disk_format": "vhd", + "file": "/v2/images/2b61ed2b-f800-4da0-99ff-396b742b8646/file", + "id": "2b61ed2b-f800-4da0-99ff-396b742b8646", + "min_disk": 20, + "min_ram": 512, + "name": "Fedora 17", + "owner": "02a7fb2dd4ef434c8a628c511dcbbeb6", + "protected": "false", + "schema": "/v2/schemas/image", + "self": "/v2/images/2b61ed2b-f800-4da0-99ff-396b742b8646", + "size": 21909, + "status": "active", + "tags": [ + "beefy", + "fedora" + ], + "updated_at": "2016-07-25T14:48:18Z", + "virtual_size": "", + "visibility": "private" +} + + +class MockResponse(object): + status_code = 200 + content = '' + + def json(self): + pass + + +class TestServiceProxy(unittest.TestCase): + def setUp(self): + self.client = Client() + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_token_cache') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_get_token(self, mock_get_vim_info, mock_get_token_cache, mock_get_session): + mock_session_specs = ["head"] + mock_session = mock.Mock(name='mock_session', spec=mock_session_specs) + mock_get_servers_response_obj = mock.Mock(spec=MockResponse) + mock_get_servers_response_obj.status_code=200 + mock_get_servers_response_obj.content = MOCK_GET_SERVERS_RESPONSE + mock_get_servers_response_obj.json.return_value=MOCK_GET_SERVERS_RESPONSE + mock_session.head.return_value = mock_get_servers_response_obj + + mock_get_vim_info.return_value = MOCK_VIM_INFO + mock_get_session.return_value = mock_session + mock_get_token_cache.return_value = (json.dumps(MOCK_AUTH_STATE),json.dumps(MOCK_INTERNAL_METADATA_CATALOG)) + response = self.client.head( + "/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers", + {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_200_OK, response.status_code) + + def test_unauthorized_access(self): + response = self.client.get( + "/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers") + self.assertEquals(status.HTTP_403_FORBIDDEN, response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_expired_auth_token(self, mock_get_vim_info): + mock_get_vim_info.return_value = MOCK_VIM_INFO + + response = self.client.get( + "/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers", + {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_403_FORBIDDEN, response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_token_cache') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_request_without_servicetype(self, mock_get_vim_info, mock_get_token_cache): + mock_get_vim_info.return_value = MOCK_VIM_INFO + mock_get_token_cache.return_value = (json.dumps(MOCK_AUTH_STATE), {}) + servicetype = "compute" + url = ("/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/" + servicetype + + "/v2.1/fcca3cc49d5e42caae15459e27103efc/servers") + response = self.client.get(url, {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code) + + metadata_catalog = copy.deepcopy(MOCK_INTERNAL_METADATA_CATALOG) + metadata_catalog[servicetype] = None + mock_get_token_cache.return_value = (json.dumps(MOCK_AUTH_STATE), json.dumps(metadata_catalog)) + + response = self.client.get(url, {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code) + + metadata_catalog = copy.deepcopy(MOCK_INTERNAL_METADATA_CATALOG) + metadata_catalog[servicetype]['prefix'] = None + metadata_catalog[servicetype]['proxy_prefix'] = None + mock_get_token_cache.return_value = (json.dumps(MOCK_AUTH_STATE), json.dumps(metadata_catalog)) + + response = self.client.get(url, {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_vim_info') + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_auth_state') + @mock.patch.object(VimDriverUtils, 'update_token_cache') + @mock.patch.object(VimDriverUtils, 'get_token_cache') + def test_crud_resources(self, mock_get_token_cache, mock_update_token_cache, mock_get_auth_state, mock_get_session, mock_get_vim_info): + ''' + Test service proxy API: GET + + :param mock_get_token_cache: + :param mock_update_token_cache: + :param mock_get_auth_state: + :param mock_get_session: + :param mock_get_vim_info: + :return: + ''' + + #mock VimDriverUtils APIs + mock_session_specs = ["get", "post", "put", "patch", "delete"] + + mock_get_servers_response_obj = mock.Mock(spec=MockResponse) + mock_get_servers_response_obj.status_code=200 + mock_get_servers_response_obj.content = MOCK_GET_SERVERS_RESPONSE + mock_get_servers_response_obj.json.return_value=MOCK_GET_SERVERS_RESPONSE + + mock_post_server_response_obj = mock.Mock(spec=MockResponse) + mock_post_server_response_obj.status_code=202 + mock_post_server_response_obj.content = MOCK_POST_SERVER_RESPONSE + mock_post_server_response_obj.json.return_value=MOCK_POST_SERVER_RESPONSE + + mock_patch_server_response_obj = mock.Mock(spec=MockResponse) + mock_patch_server_response_obj.status_code=202 + mock_patch_server_response_obj.content = MOCK_PATCH_IMAGE_REQUEST + mock_patch_server_response_obj.json.return_value=MOCK_PATCH_IMAGE_REQUEST + + mock_delete_server_response_obj = mock.Mock(spec=MockResponse) + mock_delete_server_response_obj.status_code=204 + + mock_session = mock.Mock(name='mock_session', spec=mock_session_specs) + mock_session.get.return_value = mock_get_servers_response_obj + mock_session.post.return_value = mock_post_server_response_obj + mock_session.patch.return_value = mock_patch_server_response_obj + mock_session.delete.return_value = mock_delete_server_response_obj + + mock_get_vim_info.return_value = MOCK_VIM_INFO + mock_get_session.return_value = mock_session + mock_get_auth_state.return_value = json.dumps(MOCK_AUTH_STATE) + mock_update_token_cache.return_value = MOCK_TOKEN_ID + mock_get_token_cache.return_value = (json.dumps(MOCK_AUTH_STATE),json.dumps(MOCK_INTERNAL_METADATA_CATALOG)) + + # Create resource + response = self.client.post( + "/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers", + MOCK_POST_SERVER_REQUEST, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_202_ACCEPTED, response.status_code) + context = response.json() + self.assertEquals(MOCK_TOKEN_ID, response['X-Subject-Token']) + self.assertIsNotNone(context['server']) + + # Retrieve resource + response = self.client.get( + "/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers", + {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_200_OK, response.status_code) + context = response.json() + + self.assertEquals(MOCK_TOKEN_ID, response['X-Subject-Token']) + self.assertIsNotNone(context['servers']) + + # Update resource + response = self.client.get( + "/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers", + {}, HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + self.assertEquals(status.HTTP_200_OK, response.status_code) + context = response.json() + + self.assertEquals(MOCK_TOKEN_ID, response['X-Subject-Token']) + self.assertIsNotNone(context['servers']) + + #simulate client to make the request + response = self.client.delete( + "/api/multicloud-titanium_cloud/v0/windriver-hudson-dc_RegionOne/compute/v2.1/fcca3cc49d5e42caae15459e27103efc/servers/324dfb7d-f4a9-419a-9a19-237df04b443b", + HTTP_X_AUTH_TOKEN=MOCK_TOKEN_ID) + + self.assertEquals(status.HTTP_204_NO_CONTENT, response.status_code) + self.assertEquals(MOCK_TOKEN_ID, response['X-Subject-Token']) |