142 lines
5.7 KiB
Python
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'])
|