diff options
author | Shashank Kumar Shankar <shashank.kumar.shankar@intel.com> | 2017-10-16 15:59:22 -0700 |
---|---|---|
committer | Shashank Kumar Shankar <shashank.kumar.shankar@intel.com> | 2017-10-18 13:45:23 -0700 |
commit | 2264c0f8d0644770c747c99e23fd0af064a05b03 (patch) | |
tree | 87a0158916a2e5447a06d0484d855b14360d3f41 /newton/newton/requests/tests/test_base.py | |
parent | ba97c6ef5f6cda54d9b187770e57777f6ae22abc (diff) |
Add Unit Test Abstract Base in test_base
This patch adds an Abstract Test class so that all common
type of test functions are in this class and they can be resused
without having to be repeated in each test case.
This patch also updates test_image to make use of the abstracted
test_base
Issue-Id: MULTICLOUD-83
Change-Id: If11ce71627f018a614e04e90d3353a4fc2fb3cfe
Signed-off-by: Shashank Kumar Shankar <shashank.kumar.shankar@intel.com>
Diffstat (limited to 'newton/newton/requests/tests/test_base.py')
-rw-r--r-- | newton/newton/requests/tests/test_base.py | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/newton/newton/requests/tests/test_base.py b/newton/newton/requests/tests/test_base.py index 06f610cb..2ba05cb0 100644 --- a/newton/newton/requests/tests/test_base.py +++ b/newton/newton/requests/tests/test_base.py @@ -16,8 +16,12 @@ import mock from rest_framework import status import unittest +from abc import ABCMeta from django.test import Client +from newton.requests.tests import mock_info +from newton.requests.views.util import VimDriverUtils + class MockResponse(object): status_code = status.HTTP_200_OK @@ -53,3 +57,179 @@ class TestRequest(unittest.TestCase): def setUp(self): self.client = Client() + + +class AbstractTestResource(object): + __metaclass__ = ABCMeta + + def __init__(self): + self.openstack_version = "" + self.region = "" + self.resource_name = "" + + self.MOCK_GET_RESOURCES_RESPONSE = {} + self.MOCK_GET_RESOURCE_RESPONSE = {} + + self.MOCK_POST_RESOURCE_REQUEST = {} + self.MOCK_POST_RESOURCE_REQUEST_EXISTING = {} + + self.MOCK_POST_RESOURCE_RESPONSE = {} + + self.assert_keys = "" + self.assert_key = "" + + self.HTTP_not_found = status.HTTP_404_NOT_FOUND + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_get_resources_list(self, mock_get_vim_info, mock_get_session): + mock_get_session.side_effect = [ + get_mock_session( + ["get"], {"get": {"content": self.MOCK_GET_RESOURCES_RESPONSE}}), + ] + + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + + url = "/api/multicloud-{}/v0/{}/fcca3cc49d5e42caae15459e27103efc/{}".format( + self.openstack_version, self.region, self.resource_name + ) + + response = self.client.get(url, {}, 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.assert_keys]) + self.assertEqual( + self.MOCK_GET_RESOURCES_RESPONSE[self.assert_keys], context[self.assert_keys]) + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_get_resource_info(self, mock_get_vim_info, mock_get_session): + mock_get_session.side_effect = [ + get_mock_session( + ["get"], {"get": {"content": self.MOCK_GET_RESOURCE_RESPONSE}}), + ] + + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + + url = "/api/multicloud-{}/v0/{}/fcca3cc49d5e42caae15459e27103efc/{}".format( + self.openstack_version, self.region, self.resource_name + ) + + response = self.client.get(url + "/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( + self.MOCK_GET_RESOURCE_RESPONSE[self.assert_key], context[self.assert_key]) + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_get_resource_not_found(self, mock_get_vim_info, mock_get_session): + mock_get_session.side_effect = [ + get_mock_session( + ["get"], {"get": {"content": {}, + "status_code": 404}}), + ] + + url = "/api/multicloud-{}/v0/{}/fcca3cc49d5e42caae15459e27103efc/{}".format( + self.openstack_version, self.region, self.resource_name + ) + + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + + response = self.client.get(url + "/uuid_3", {}, HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + self.assertEquals(self.HTTP_not_found, response.status_code) + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_post_resource(self, mock_get_vim_info, mock_get_session): + mock_get_session.side_effect = [ + get_mock_session( + ["get"], {"get": {"content": self.MOCK_GET_RESOURCE_RESPONSE}}), + get_mock_session( + ["post"], {"post": {"content": self.MOCK_POST_RESOURCE_RESPONSE, + "status_code": 202}}), + ] + + url = "/api/multicloud-{}/v0/{}/fcca3cc49d5e42caae15459e27103efc/{}".format( + self.openstack_version, self.region, self.resource_name + ) + + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + + response = self.client.post(url, self.MOCK_POST_RESOURCE_REQUEST, HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + context = response.json() + self.assertEquals(status.HTTP_202_ACCEPTED, response.status_code) + self.assertIsNotNone(context['id']) + self.assertEqual(1, context['returnCode']) + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_post_resource_existing(self, mock_get_vim_info, mock_get_session): + mock_get_session.side_effect = [ + get_mock_session( + ["get"], {"get": {"content": self.MOCK_GET_RESOURCES_RESPONSE}}), + get_mock_session( + ["post"], {"post": {"content": self.MOCK_POST_RESOURCE_RESPONSE, + "status_code": 201}}), + ] + + url = "/api/multicloud-{}/v0/{}/fcca3cc49d5e42caae15459e27103efc/{}".format( + self.openstack_version, self.region, self.resource_name + ) + + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + + response = self.client.post(url, self.MOCK_POST_RESOURCE_REQUEST_EXISTING, HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + context = response.json() + self.assertEquals(status.HTTP_200_OK, response.status_code) + self.assertIsNotNone(context['returnCode']) + self.assertEqual(0, context['returnCode']) + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_post_resource_empty(self, mock_get_vim_info, mock_get_session): + mock_get_session.side_effect = [ + get_mock_session( + ["get"], {"get": {"content": self.MOCK_GET_RESOURCE_RESPONSE}}), + get_mock_session( + ["post"], {"post": {"content": self.MOCK_POST_RESOURCE_RESPONSE, + "status_code": 202}}), + ] + + url = "/api/multicloud-{}/v0/{}/fcca3cc49d5e42caae15459e27103efc/{}".format( + self.openstack_version, self.region, self.resource_name + ) + + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + + response = self.client.post(url, {}, 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) + + @mock.patch.object(VimDriverUtils, 'get_session') + @mock.patch.object(VimDriverUtils, 'get_vim_info') + def test_delete_resource(self, mock_get_vim_info, mock_get_session): + + mock_get_session.side_effect = [ + get_mock_session( + ["delete"], {"delete": {"content": {}, + "status_code": 204}}) + ] + + url = "/api/multicloud-{}/v0/{}/fcca3cc49d5e42caae15459e27103efc/{}".format( + self.openstack_version, self.region, self.resource_name + ) + + mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO + + response = self.client.delete(url + "/uuid_1", HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) + + self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code) + self.assertIsNone(response.data) |