Files
gce-api/gceapi/tests/functional/api/test_images.py
alexey-mr e73b3b2508 Added tests of routes api.
Change-Id: I926552a32085b3c8db775f88a77f22f7ac7b28cb
2015-11-19 18:21:31 +03:00

142 lines
5.7 KiB
Python

# Copyright 2015 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# 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.
from gceapi.tests.functional.api import test_disks
class TestImages(test_disks.TestDiskBase):
def _list_images(self, filter=None, project=None):
project_id = project if project else self.cfg.project_id
self.trace('List images: project_id={}'.format(project_id))
request = self.images.list(project=project_id, filter=filter)
result = request.execute()
self.trace('Images: {}'.format(result))
self.api.validate_schema(value=result, schema_name='ImageList')
return result
def _prepare_disk(self):
name = self._rand_name('testdisk')
options = {
'name': name
}
self._create_disk(options)
return self._ensure_disk_created(options)
def test_get_default_image(self):
relative_image_url = self.cfg.image
name, project = self._parse_image_url(relative_image_url)
default_options = {
'name': name,
'selfLink': self.api.get_global_url(relative_image_url)
}
expected_image = self._get_expected_image(default_options)
image = self._get_image(name, project)
self.assertObject(expected_image, image)
def test_list_default_images(self):
relative_image_url = self.cfg.image
name, project = self._parse_image_url(relative_image_url)
default_options = {
'name': name,
'selfLink': self.api.get_global_url(relative_image_url)
}
expected_image = self._get_expected_image(default_options)
result = self._list_images(project=project)
image = self.assertFind(name, result)
self.assertObject(expected_image, image)
def test_list_default_images_by_filter_name(self):
relative_image_url = self.cfg.image
name, project = self._parse_image_url(relative_image_url)
default_options = {
'name': name,
'selfLink': self.api.get_global_url(relative_image_url)
}
result = self._list_images(
project=project,
filter='name eq unexisting_image')
self.assertNotFind(name, result)
result = self._list_images(
project=project,
filter='name eq {}'.format(name))
image = self.assertFind(name, result)
expected_image = self._get_expected_image(default_options)
self.assertObject(expected_image, image)
def test_create_delete_image_from_disk(self):
# TODO(alexey-mr): OS GCE does not support image creation from disk'
if not self.full_compatibility:
self.skipTest('OS GCE does not support image creation from disk')
return
# prepare disk for further image creation
disk = self._prepare_disk()
disk_name = disk['name']
# do image creation
name = self._rand_name('testimage')
source_disk = 'zones/{}/disks/{}'.format(self.cfg.zone, disk_name)
options = {
'name': name,
'sourceDisk': source_disk
}
self._create_image(options)
# verify created image
options['sourceDisk'] = disk['selfLink'] # full expected source url
options['sourceDiskId'] = disk['id'] # add expected source id
# TODO(alexey-mr): image diskSizeGb is not supported by OS GCE
# options['diskSizeGb'] = disk['sizeGb'] # add expected size to check
self._ensure_image_created(options)
# delete resource
self._delete_image(name)
self._delete_disk(disk_name)
def test_list_images(self):
# TODO(alexey-mr): OS GCE does not support image creation from disk'
if not self.full_compatibility:
self.skipTest('OS GCE does not support image creation from disk')
return
# prepare resources
disk = self._prepare_disk()
image = self._create_image_from_disk(disk)
image_name = image['name']
# list and find object from server and check properties
result = self._list_images()
result = self.assertFind(image_name, result)
self.assertObject(image, result)
# remove resources
self._delete_image(image_name)
self._delete_disk(disk['name'])
def test_list_images_by_filter_name(self):
# TODO(alexey-mr): OS GCE does not support image creation from disk'
if not self.full_compatibility:
self.skipTest('OS GCE does not support image creation from disk')
return
# prepare resources
disk = self._prepare_disk()
images = list()
for i in range(0, 3):
images.append(self._create_image_from_disk(disk))
# list images with filter by name
for image in images:
filter = 'name eq {}'.format(image['name'])
result = self._list_images(filter=filter)
self.assertEqual(1, len(result['items']))
self.assertObject(image, result['items'][0])
# clean resources
for image in images:
self._delete_image(image['name'])
self._delete_disk(disk['name'])