summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYun Huang <yun.huang@windriver.com>2018-03-19 23:26:34 +0800
committerYun Huang <yun.huang@windriver.com>2018-03-19 23:29:48 +0800
commit3d4e63ece641b06f5093473bc7f22013ecc9c97c (patch)
treee3cad1147feabd26addf2f22e610bff7f40499ab
parent020650684672fdbb992a9256695aaf36205fd4f3 (diff)
ADD UT for capacity check successfully
Change-Id: Ie9684d68991b401572a6712d9771ce9dd60d5778 Issue-ID: MULTICLOUD-168 Signed-off-by: Yun Huang <yun.huang@windriver.com>
-rw-r--r--windriver/titanium_cloud/resource/tests/__init__.py14
-rw-r--r--windriver/titanium_cloud/resource/tests/test_capacity.py92
-rw-r--r--windriver/titanium_cloud/resource/views/capacity.py8
3 files changed, 110 insertions, 4 deletions
diff --git a/windriver/titanium_cloud/resource/tests/__init__.py b/windriver/titanium_cloud/resource/tests/__init__.py
new file mode 100644
index 00000000..afa702d3
--- /dev/null
+++ b/windriver/titanium_cloud/resource/tests/__init__.py
@@ -0,0 +1,14 @@
+# Copyright (c) 2017-2018 Wind River Systems, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# 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/resource/tests/test_capacity.py b/windriver/titanium_cloud/resource/tests/test_capacity.py
new file mode 100644
index 00000000..605aed8b
--- /dev/null
+++ b/windriver/titanium_cloud/resource/tests/test_capacity.py
@@ -0,0 +1,92 @@
+# Copyright (c) 2017-2018 Wind River Systems, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import mock
+
+from rest_framework import status
+
+from common.utils import restcall
+from newton_base.tests import mock_info
+from newton_base.tests import test_base
+from newton_base.util import VimDriverUtils
+
+MOCK_GET_TENANT_LIMIT_RESPONSE = {
+ "limits" : {
+ "rate" : [],
+ "absolute" : {
+ "maxTotalRAMSize" : 128*1024,
+ "totalRAMUsed" : 8*1024,
+ "totalCoresUsed" : 4,
+ "maxTotalCores" : 20,
+ }
+ }
+}
+
+MOCK_GET_HYPER_STATATICS_RESPONSE = {
+ "hypervisor_statistics" : {
+ "vcpus_used" : 4,
+ "free_ram_mb" : 120*1024,
+ "vcpus" : 10,
+ "free_disk_gb" : 300
+ }
+}
+
+MOCK_GET_STORAGE_RESPONSE = {
+ "limits" : {
+ "rate" : [],
+ "absolute" : {
+ "totalGigabytesUsed" : 200,
+ "maxTotalVolumeGigabytes" : 500,
+ }
+ }
+}
+
+TEST_REQ_SUCCESS_SOURCE = {
+ "vCPU": "4",
+ "Memory": "4096",
+ "Storage": "200"
+}
+
+class TestCapacity(test_base.TestRequest):
+ def setUp(self):
+ super(TestCapacity, self).setUp()
+
+ def _get_mock_response(self, return_value=None):
+ mock_response = mock.Mock(spec=test_base.MockResponse)
+ mock_response.status_code = status.HTTP_200_OK
+ mock_response.json.return_value = return_value
+ return mock_response
+
+ @mock.patch.object(VimDriverUtils, 'get_session')
+ @mock.patch.object(VimDriverUtils, 'get_vim_info')
+ def test_capacity_check_success(self, mock_get_vim_info, mock_get_session):
+ mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO
+ mock_get_session.return_value = test_base.get_mock_session(
+ ["get"], {
+ "side_effect": [
+ self._get_mock_response(MOCK_GET_TENANT_LIMIT_RESPONSE),
+ self._get_mock_response(MOCK_GET_HYPER_STATATICS_RESPONSE),
+ self._get_mock_response(MOCK_GET_STORAGE_RESPONSE),
+ ]
+ })
+
+ response = self.client.post((
+ "/api/%s/v0/windriver-hudson-dc_RegionOne/"
+ "capacity_check" % test_base.MULTIVIM_VERSION),
+ TEST_REQ_SUCCESS_SOURCE,
+ HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID)
+
+ self.assertEquals(status.HTTP_200_OK, response.status_code)
+ self.assertEqual({"result": True}, response.data)
+
diff --git a/windriver/titanium_cloud/resource/views/capacity.py b/windriver/titanium_cloud/resource/views/capacity.py
index 6d20075c..d73cc0fb 100644
--- a/windriver/titanium_cloud/resource/views/capacity.py
+++ b/windriver/titanium_cloud/resource/views/capacity.py
@@ -43,7 +43,7 @@ class CapacityCheck(APIView):
hasEnoughResource = False
try :
- resource_demand = json.load(request.data)
+ resource_demand = request.data
#get token:
cloud_owner, regionid = extsys.decode_vim_id(vimid)
@@ -93,11 +93,11 @@ class CapacityCheck(APIView):
remainStorage = hypervisor_statistics['free_disk_gb']
# compare resource demanded with available
- if (resource_demand['vCPU'] >= remainVCPU):
+ if (int(resource_demand['vCPU']) >= remainVCPU):
hasEnoughResource = False
- elif (resource_demand['Memory'] >= remainMEM):
+ elif (int(resource_demand['Memory']) >= remainMEM):
hasEnoughResource = False
- elif (resource_demand['Storage'] >= remainStorage):
+ elif (int(resource_demand['Storage']) >= remainStorage):
hasEnoughResource = False
else:
hasEnoughResource = True