Files
deb-python-tempest-lib/tempest_lib/tests/services/compute/test_images_client.py
ghanshyam 8e73ab78fa Support service client unit tests for headers also.
Some APIs like create image, returns only headers with empty response body.
We should have unit tests for those API also which required to add header
support in base service client test class.

This commit support header testing for service client and implement
create image unit tests which only return info in headers.

Change-Id: I9a79f862288e5fa827414ce1f26d80bcca4db687
2015-10-13 15:07:55 +09:00

266 lines
9.7 KiB
Python

# Copyright 2015 NEC Corporation. All rights reserved.
#
# 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
from oslotest import mockpatch
from tempest_lib import exceptions as lib_exc
from tempest_lib.services.compute import images_client
from tempest_lib.tests import fake_auth_provider
from tempest_lib.tests.services.compute import base
class TestImagesClient(base.BaseComputeServiceTest):
# Data Dictionaries used for testing #
FAKE_IMAGE_METADATA = {
"list":
{"metadata": {
"auto_disk_config": "True",
"Label": "Changed"
}},
"set_item":
{"meta": {
"auto_disk_config": "True"
}},
"show_item":
{"meta": {
"kernel_id": "nokernel",
}},
"update":
{"metadata": {
"kernel_id": "False",
"Label": "UpdatedImage"
}},
"set":
{"metadata": {
"Label": "Changed",
"auto_disk_config": "True"
}},
"delete_item": {}
}
FAKE_IMAGE_DATA = {
"list":
{"images": [
{"id": "70a599e0-31e7-49b7-b260-868f441e862b",
"links": [
{"href": "http://openstack.example.com/v2/openstack" +
"/images/70a599e0-31e7-49b7-b260-868f441e862b",
"rel": "self"
}
],
"name": "fakeimage7"
}]},
"show": {"image": {
"created": "2011-01-01T01:02:03Z",
"id": "70a599e0-31e7-49b7-b260-868f441e862b",
"links": [
{
"href": "http://openstack.example.com/v2/openstack" +
"/images/70a599e0-31e7-49b7-b260-868f441e862b",
"rel": "self"
},
],
"metadata": {
"architecture": "x86_64",
"auto_disk_config": "True",
"kernel_id": "nokernel",
"ramdisk_id": "nokernel"
},
"minDisk": 0,
"minRam": 0,
"name": "fakeimage7",
"progress": 100,
"status": "ACTIVE",
"updated": "2011-01-01T01:02:03Z"}},
"create": {},
"delete": {}
}
func2mock = {
'get': 'tempest_lib.common.rest_client.RestClient.get',
'post': 'tempest_lib.common.rest_client.RestClient.post',
'put': 'tempest_lib.common.rest_client.RestClient.put',
'delete': 'tempest_lib.common.rest_client.RestClient.delete'}
# Variable definition
FAKE_IMAGE_ID = FAKE_IMAGE_DATA['show']['image']['id']
FAKE_SERVER_ID = "80a599e0-31e7-49b7-b260-868f441e343f"
FAKE_CREATE_INFO = {'location': 'None'}
FAKE_METADATA = FAKE_IMAGE_METADATA['show_item']['meta']
def setUp(self):
super(TestImagesClient, self).setUp()
fake_auth = fake_auth_provider.FakeAuthProvider()
self.client = images_client.ImagesClient(fake_auth,
"compute", "regionOne")
def _test_image_operation(self, operation="delete", bytes_body=False):
response_code = 200
mock_operation = self.func2mock['get']
expected_op = self.FAKE_IMAGE_DATA[operation]
params = {"image_id": self.FAKE_IMAGE_ID}
headers = None
if operation == 'list':
function = self.client.list_images
elif operation == 'show':
function = self.client.show_image
elif operation == 'create':
function = self.client.create_image
mock_operation = self.func2mock['post']
params = {"server_id": self.FAKE_SERVER_ID}
response_code = 202
headers = {
'connection': 'keep-alive',
'content-length': '0',
'content-type': 'application/json',
'status': '202',
'x-compute-request-id': 'req-fake',
'vary': 'accept-encoding',
'x-openstack-nova-api-version': 'v2.1',
'date': '13 Oct 2015 05:55:36 GMT',
'location': 'http://fake.com/images/fake'
}
else:
function = self.client.delete_image
mock_operation = self.func2mock['delete']
response_code = 204
self.check_service_client_function(
function, mock_operation, expected_op,
bytes_body, response_code, headers, **params)
def _test_image_metadata(self, operation="set_item", bytes_body=False):
response_code = 200
expected_op = self.FAKE_IMAGE_METADATA[operation]
if operation == 'list':
function = self.client.list_image_metadata
mock_operation = self.func2mock['get']
params = {"image_id": self.FAKE_IMAGE_ID}
elif operation == 'set':
function = self.client.set_image_metadata
mock_operation = self.func2mock['put']
params = {"image_id": "_dummy_data",
"meta": self.FAKE_METADATA}
elif operation == 'update':
function = self.client.update_image_metadata
mock_operation = self.func2mock['post']
params = {"image_id": self.FAKE_IMAGE_ID,
"meta": self.FAKE_METADATA}
elif operation == 'show_item':
mock_operation = self.func2mock['get']
function = self.client.show_image_metadata_item
params = {"image_id": self.FAKE_IMAGE_ID,
"key": "123"}
elif operation == 'delete_item':
function = self.client.delete_image_metadata_item
mock_operation = self.func2mock['delete']
response_code = 204
params = {"image_id": self.FAKE_IMAGE_ID,
"key": "123"}
else:
function = self.client.set_image_metadata_item
mock_operation = self.func2mock['put']
params = {"image_id": self.FAKE_IMAGE_ID,
"key": "123",
"meta": self.FAKE_METADATA}
self.check_service_client_function(
function, mock_operation, expected_op,
bytes_body, response_code, **params)
def _test_resource_deleted(self, bytes_body=False):
params = {"id": self.FAKE_IMAGE_ID}
expected_op = self.FAKE_IMAGE_DATA['show']['image']
self.useFixture(mockpatch.Patch('tempest_lib.services.compute'
'.images_client.ImagesClient.show_image',
side_effect=lib_exc.NotFound))
self.assertEqual(True, self.client.is_resource_deleted(**params))
tempdata = copy.deepcopy(self.FAKE_IMAGE_DATA['show'])
tempdata['image']['id'] = None
self.useFixture(mockpatch.Patch('tempest_lib.services.compute'
'.images_client.ImagesClient.show_image',
return_value=expected_op))
self.assertEqual(False, self.client.is_resource_deleted(**params))
def test_list_images_with_str_body(self):
self._test_image_operation('list')
def test_list_images_with_bytes_body(self):
self._test_image_operation('list', True)
def test_show_image_with_str_body(self):
self._test_image_operation('show')
def test_show_image_with_bytes_body(self):
self._test_image_operation('show', True)
def test_create_image_with_str_body(self):
self._test_image_operation('create')
def test_create_image_with_bytes_body(self):
self._test_image_operation('create', True)
def test_delete_image_with_str_body(self):
self._test_image_operation('delete')
def test_delete_image_with_bytes_body(self):
self._test_image_operation('delete', True)
def test_list_image_metadata_with_str_body(self):
self._test_image_metadata('list')
def test_list_image_metadata_with_bytes_body(self):
self._test_image_metadata('list', True)
def test_set_image_metadata_with_str_body(self):
self._test_image_metadata('set')
def test_set_image_metadata_with_bytes_body(self):
self._test_image_metadata('set', True)
def test_update_image_metadata_with_str_body(self):
self._test_image_metadata('update')
def test_update_image_metadata_with_bytes_body(self):
self._test_image_metadata('update', True)
def test_set_image_metadata_item_with_str_body(self):
self._test_image_metadata()
def test_set_image_metadata_item_with_bytes_body(self):
self._test_image_metadata(bytes_body=True)
def test_show_image_metadata_item_with_str_body(self):
self._test_image_metadata('show_item')
def test_show_image_metadata_item_with_bytes_body(self):
self._test_image_metadata('show_item', True)
def test_delete_image_metadata_item_with_str_body(self):
self._test_image_metadata('delete_item')
def test_delete_image_metadata_item_with_bytes_body(self):
self._test_image_metadata('delete_item', True)
def test_resource_delete_with_str_body(self):
self._test_resource_deleted()
def test_resource_delete_with_bytes_body(self):
self._test_resource_deleted(True)