# 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 import json from six.moves import urllib from rest_framework import status from newton_base.tests import mock_info from newton_base.tests import test_base from newton_base.tests.test_base import AbstractTestResource from newton_base.openoapi.image import imageThread from newton_base.util import VimDriverUtils class TestImageNewton(unittest.TestCase, AbstractTestResource): def setUp(self): AbstractTestResource.__init__(self) self.url += "images" self.MOCK_GET_RESOURCES_RESPONSE = { "images": [ {"id": "uuid_1", "name": "image_1"}, {"id": "uuid_2", "name": "image_2"} ] } self.MOCK_GET_RESOURCE_RESPONSE = { "image": { "id": "uuid_1", "name": "image_1" } } self.MOCK_GET_RESOURCE_RESPONSE_NOT_FOUND = {} self.MOCK_POST_RESOURCE_REQUEST = { "id": "uuid_3", "name": "image_3", "imagePath": "test.com/image_3" } self.MOCK_POST_RESOURCE_REQUEST_EXISTING = { "id": "uuid_1", "name": "image_1", "imagePath": "test.com/image_1" } self.MOCK_POST_RESOURCE_RESPONSE = { "id": "uuid_3", "name": "image_3" } self.assert_keys = "images" self.assert_key = "image" self.HTTP_not_found = status.HTTP_404_NOT_FOUND @mock.patch.object(imageThread, 'run') @mock.patch.object(urllib, 'request') @mock.patch.object(VimDriverUtils, 'get_session') @mock.patch.object(VimDriverUtils, 'get_vim_info') def test_post_image(self, mock_get_vim_info, mock_get_session, mock_request, mock_run): mock_get_session.side_effect = [ test_base.get_mock_session( ["get"], {"get": { "content": self.MOCK_GET_RESOURCES_RESPONSE}}), test_base.get_mock_session( ["post"], {"post": {"content": self.MOCK_POST_RESOURCE_RESPONSE, "status_code": 201}}), ] mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO mock_request.urlopen.return_value = "image" response = self.client.post( "/api/%s/v0/windriver-hudson-dc_RegionOne/" "fcca3cc49d5e42caae15459e27103efc/" "images" % test_base.MULTIVIM_VERSION, data=json.dumps(self.MOCK_POST_RESOURCE_REQUEST), content_type='application/json', HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID) context = response.json() self.assertEquals(status.HTTP_201_CREATED, response.status_code) self.assertIsNotNone(context['id']) self.assertEqual(1, context['returnCode']) # Overridden method from test base to not make it run for current test case. def test_post_resource(self): pass