Add UTs for requests/hosts and limits 33/16533/1
authorShashank Kumar Shankar <shashank.kumar.shankar@intel.com>
Thu, 28 Sep 2017 23:00:33 +0000 (16:00 -0700)
committerShashank Kumar Shankar <shashank.kumar.shankar@intel.com>
Thu, 28 Sep 2017 23:00:33 +0000 (16:00 -0700)
This patch adds unit tests for requests/hosts and
requests/limits

Change-Id: I1d8d3009fd2ee70770f3e20cb4aa5a0adb38dbfa
Issue-Id: MULTICLOUD-83
Signed-off-by: Shashank Kumar Shankar <shashank.kumar.shankar@intel.com>
newton/newton/requests/tests/test_hosts.py [new file with mode: 0644]
newton/newton/requests/tests/test_limits.py [new file with mode: 0644]

diff --git a/newton/newton/requests/tests/test_hosts.py b/newton/newton/requests/tests/test_hosts.py
new file mode 100644 (file)
index 0000000..e78375b
--- /dev/null
@@ -0,0 +1,101 @@
+# Copyright (c) 2017 Intel Corporation, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import mock
+import unittest
+
+from django.test import Client
+from rest_framework import status
+
+from newton.requests.tests import mock_info
+from newton.requests.tests import test_base
+from newton.requests.views.util import VimDriverUtils
+
+
+MOCK_GET_HOSTS_RESPONSE = {
+    "hosts": [
+        {"id": "uuid_1", "name": "host_1"},
+        {"id": "uuid_2", "name": "host_2"}
+    ]
+}
+
+MOCK_GET_HOST_RESPONSE = {
+    "host": [
+        {"resource": {"id": "uuid_1", "name": "host_1"}}
+    ]
+}
+
+
+class TestHost(unittest.TestCase):
+    def setUp(self):
+        self.client = Client()
+    def tearDown(self):
+        pass
+
+    @mock.patch.object(VimDriverUtils, 'get_session')
+    @mock.patch.object(VimDriverUtils, 'get_vim_info')
+    def test_get_hosts_list(self, mock_get_vim_info, mock_get_session):
+        mock_get_session.side_effect = [
+            test_base.get_mock_session(
+                ["get"], {"get": {"content": MOCK_GET_HOSTS_RESPONSE}}),
+        ]
+
+        mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO
+
+        response = self.client.get(
+            "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/fcca3cc49d5e42caae15459e27103efc/hosts",
+            {}, HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID)
+
+        context = response.json()
+        self.assertEquals(status.HTTP_200_OK, response.status_code)
+        self.assertIsNotNone(context['hosts'])
+        self.assertEqual(MOCK_GET_HOSTS_RESPONSE["hosts"], context["hosts"])
+
+    @mock.patch.object(VimDriverUtils, 'get_session')
+    @mock.patch.object(VimDriverUtils, 'get_vim_info')
+    def test_get_host_info(self, mock_get_vim_info, mock_get_session):
+        mock_get_session.side_effect = [
+            test_base.get_mock_session(
+                ["get"], {"get": {"content": MOCK_GET_HOST_RESPONSE}}),
+        ]
+
+        mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO
+
+        response = self.client.get(
+            "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/fcca3cc49d5e42caae15459e27103efc/hosts"
+            "/uuid_1",
+            {}, HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID)
+
+        context = response.json()
+        self.assertEquals(status.HTTP_200_OK, response.status_code)
+        self.assertEquals(MOCK_GET_HOST_RESPONSE['host'], context['host'])
+
+    @mock.patch.object(VimDriverUtils, 'get_session')
+    @mock.patch.object(VimDriverUtils, 'get_vim_info')
+    def test_get_host_not_found(self, mock_get_vim_info, mock_get_session):
+        mock_get_session.side_effect = [
+            test_base.get_mock_session(
+                ["get"], {"get": {"content": {},
+                                  "status_code": 404}}),
+        ]
+
+        mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO
+
+        response = self.client.get(
+            "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/fcca3cc49d5e42caae15459e27103efc/hosts"
+            "/uuid_3",
+            {}, HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID)
+
+        self.assertEquals(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code)
+        self.assertIn('error', response.data)
diff --git a/newton/newton/requests/tests/test_limits.py b/newton/newton/requests/tests/test_limits.py
new file mode 100644 (file)
index 0000000..053a44a
--- /dev/null
@@ -0,0 +1,99 @@
+# Copyright (c) 2017 Intel Corporation, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import mock
+import unittest
+
+from django.test import Client
+from rest_framework import status
+
+from newton.requests.tests import mock_info
+from newton.requests.tests import test_base
+from newton.requests.views.util import VimDriverUtils
+
+
+MOCK_GET_LIMITS_RESPONSE = {
+    "limits": {
+        "absolute": {
+            "id": "uuid_1", "name": "limit_1"
+        }
+    }
+}
+
+MOCK_GET_QUOTAS_RESPONSE = {
+    "quota": {"limit": "1"}
+}
+
+
+class TestLimit(unittest.TestCase):
+    def setUp(self):
+        self.client = Client()
+
+    def tearDown(self):
+        pass
+
+    @staticmethod
+    def _get_mock_response(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_get_limits_list(self, mock_get_vim_info, mock_get_session):
+
+        mock_get_session.return_value = test_base.get_mock_session(
+            ["get"], {
+                "side_effect": [
+                    self._get_mock_response(MOCK_GET_LIMITS_RESPONSE),
+                    self._get_mock_response(MOCK_GET_QUOTAS_RESPONSE),
+                    self._get_mock_response(MOCK_GET_LIMITS_RESPONSE)
+                ]
+            })
+
+        mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO
+
+        response = self.client.get(
+            "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/fcca3cc49d5e42caae15459e27103efc/limits",
+            {}, HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID)
+
+        context = response.json()
+        self.assertEquals(status.HTTP_200_OK, response.status_code)
+        self.assertIsNotNone(context)
+        self.assertIn(
+            MOCK_GET_LIMITS_RESPONSE["limits"]["absolute"]['id'], context['id'])
+
+    @mock.patch.object(VimDriverUtils, 'get_session')
+    @mock.patch.object(VimDriverUtils, 'get_vim_info')
+    def test_get_limits_list_failure(self, mock_get_vim_info, mock_get_session):
+
+        mock_get_session.return_value = test_base.get_mock_session(
+            ["get"], {
+                "side_effect": [
+                    self._get_mock_response(MOCK_GET_LIMITS_RESPONSE),
+                    self._get_mock_response({}),
+                    self._get_mock_response(MOCK_GET_LIMITS_RESPONSE)
+                ]
+            })
+
+        mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO
+
+        response = self.client.get(
+            "/api/multicloud-newton/v0/windriver-hudson-dc_RegionOne/fcca3cc49d5e42caae15459e27103efc/limits",
+            {}, HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID)
+
+        context = response.json()
+        self.assertIn('error', context)
+        self.assertEquals(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code)