d2f4e9717d
Move all modules under the next structure: - rally_openstack.common - rally_openstack.enviromnet - rally_openstack.task - rally_openstack.verification Change-Id: I41702d017cd49b117da3b8e12b19c7327229ae32
243 lines
10 KiB
Python
243 lines
10 KiB
Python
# Copyright 2014: Mirantis Inc.
|
|
# 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 unittest import mock
|
|
|
|
from rally import exceptions
|
|
from rally_openstack.task.scenarios.glance import images
|
|
from tests.unit import fakes
|
|
from tests.unit import test
|
|
|
|
BASE = "rally_openstack.task.scenarios.glance.images"
|
|
GLANCE_V2_PATH = ("rally_openstack.common.services.image.glance_v2."
|
|
"GlanceV2Service")
|
|
|
|
|
|
class GlanceBasicTestCase(test.ScenarioTestCase):
|
|
|
|
def get_test_context(self):
|
|
context = super(GlanceBasicTestCase, self).get_test_context()
|
|
context.update({
|
|
"admin": {
|
|
"id": "fake_user_id",
|
|
"credential": mock.MagicMock()
|
|
},
|
|
"user": {
|
|
"id": "fake_user_id",
|
|
"credential": mock.MagicMock()
|
|
},
|
|
"tenant": {"id": "fake_tenant_id",
|
|
"name": "fake_tenant_name"}
|
|
})
|
|
return context
|
|
|
|
def setUp(self):
|
|
super(GlanceBasicTestCase, self).setUp()
|
|
patch = mock.patch(
|
|
"rally_openstack.common.services.image.image.Image")
|
|
self.addCleanup(patch.stop)
|
|
self.mock_image = patch.start()
|
|
|
|
def test_create_and_list_image(self):
|
|
image_service = self.mock_image.return_value
|
|
fake_image = mock.Mock(id=1, name="img_2")
|
|
image_service.create_image.return_value = fake_image
|
|
image_service.list_images.return_value = [
|
|
mock.Mock(id=0, name="img_1"),
|
|
fake_image,
|
|
mock.Mock(id=2, name="img_3")]
|
|
properties = {"fakeprop": "fake"}
|
|
call_args = {"container_format": "cf",
|
|
"image_location": "url",
|
|
"disk_format": "df",
|
|
"visibility": "vs",
|
|
"min_disk": 0,
|
|
"min_ram": 0,
|
|
"properties": properties}
|
|
# Positive case
|
|
images.CreateAndListImage(self.context).run(
|
|
"cf", "url", "df", "vs", 0, 0, properties)
|
|
image_service.create_image.assert_called_once_with(**call_args)
|
|
|
|
# Negative case: image isn't created
|
|
image_service.create_image.return_value = None
|
|
self.assertRaises(exceptions.RallyAssertionError,
|
|
images.CreateAndListImage(self.context).run,
|
|
"cf", "url", "df", "vs", 0, 0, properties)
|
|
image_service.create_image.assert_called_with(**call_args)
|
|
|
|
# Negative case: created image n ot in the list of available images
|
|
image_service.create_image.return_value = mock.Mock(
|
|
id=12, name="img_nameN")
|
|
self.assertRaises(exceptions.RallyAssertionError,
|
|
images.CreateAndListImage(self.context).run,
|
|
"cf", "url", "df", "vs", 0, 0, properties)
|
|
image_service.create_image.assert_called_with(**call_args)
|
|
image_service.list_images.assert_called_with()
|
|
|
|
def test_list_images(self):
|
|
image_service = self.mock_image.return_value
|
|
|
|
images.ListImages(self.context).run()
|
|
image_service.list_images.assert_called_once_with()
|
|
|
|
def test_create_and_delete_image(self):
|
|
image_service = self.mock_image.return_value
|
|
|
|
fake_image = fakes.FakeImage(id=1, name="imagexxx")
|
|
image_service.create_image.return_value = fake_image
|
|
properties = {"fakeprop": "fake"}
|
|
call_args = {"container_format": "cf",
|
|
"image_location": "url",
|
|
"disk_format": "df",
|
|
"visibility": "vs",
|
|
"min_disk": 0,
|
|
"min_ram": 0,
|
|
"properties": properties}
|
|
|
|
images.CreateAndDeleteImage(self.context).run(
|
|
"cf", "url", "df", "vs", 0, 0, properties)
|
|
|
|
image_service.create_image.assert_called_once_with(**call_args)
|
|
image_service.delete_image.assert_called_once_with(fake_image.id)
|
|
|
|
def test_create_and_get_image(self):
|
|
image_service = self.mock_image.return_value
|
|
|
|
fake_image = fakes.FakeImage(id=1, name="img_name1")
|
|
image_service.create_image.return_value = fake_image
|
|
fake_image_info = fakes.FakeImage(id=1, name="img_name1",
|
|
status="active")
|
|
image_service.get_image.return_value = fake_image_info
|
|
properties = {"fakeprop": "fake"}
|
|
call_args = {"container_format": "cf",
|
|
"image_location": "url",
|
|
"disk_format": "df",
|
|
"visibility": "vs",
|
|
"min_disk": 0,
|
|
"min_ram": 0,
|
|
"properties": properties}
|
|
|
|
# Positive case
|
|
images.CreateAndGetImage(self.context).run(
|
|
"cf", "url", "df", "vs", 0, 0, properties)
|
|
image_service.create_image.assert_called_once_with(**call_args)
|
|
image_service.get_image.assert_called_once_with(fake_image)
|
|
|
|
# Negative case: image isn't created
|
|
image_service.create_image.reset_mock()
|
|
image_service.create_image.return_value = None
|
|
self.assertRaises(exceptions.RallyAssertionError,
|
|
images.CreateAndGetImage(self.context).run,
|
|
"cf", "url", "df", "vs", 0, 0, properties)
|
|
image_service.create_image.assert_called_with(**call_args)
|
|
|
|
# Negative case: image obtained in _get_image not the created image
|
|
image_service.create_image.reset_mock()
|
|
image_service.get_image.reset_mock()
|
|
image_service.create_image.return_value = fakes.FakeImage(
|
|
id=12, name="img_nameN")
|
|
self.assertRaises(exceptions.RallyAssertionError,
|
|
images.CreateAndGetImage(self.context).run,
|
|
"cf", "url", "df", "vs", 0, 0, properties)
|
|
image_service.create_image.assert_called_with(**call_args)
|
|
image_service.get_image.assert_called_with(
|
|
image_service.create_image.return_value)
|
|
|
|
def test_create_and_download_image(self):
|
|
image_service = self.mock_image.return_value
|
|
|
|
fake_image = fakes.FakeImage()
|
|
image_service.create_image.return_value = fake_image
|
|
properties = {"fakeprop": "fake"}
|
|
call_args = {"container_format": "cf",
|
|
"image_location": "url",
|
|
"disk_format": "df",
|
|
"visibility": "vs",
|
|
"min_disk": 0,
|
|
"min_ram": 0,
|
|
"properties": properties}
|
|
|
|
images.CreateAndDownloadImage(self.context).run(
|
|
"cf", "url", "df", "vs", 0, 0, properties=properties)
|
|
|
|
image_service.create_image.assert_called_once_with(**call_args)
|
|
image_service.download_image.assert_called_once_with(fake_image.id)
|
|
|
|
@mock.patch("%s.CreateImageAndBootInstances._boot_servers" % BASE)
|
|
def test_create_image_and_boot_instances(self, mock_boot_servers):
|
|
image_service = self.mock_image.return_value
|
|
|
|
fake_image = fakes.FakeImage()
|
|
fake_servers = [mock.Mock() for i in range(5)]
|
|
image_service.create_image.return_value = fake_image
|
|
mock_boot_servers.return_value = fake_servers
|
|
boot_server_kwargs = {"fakeserverarg": "f"}
|
|
properties = {"fakeprop": "fake"}
|
|
call_args = {"container_format": "cf",
|
|
"image_location": "url",
|
|
"disk_format": "df",
|
|
"visibility": "vs",
|
|
"min_disk": 0,
|
|
"min_ram": 0,
|
|
"properties": properties}
|
|
|
|
images.CreateImageAndBootInstances(self.context).run(
|
|
"cf", "url", "df", "fid", 5, visibility="vs", min_disk=0,
|
|
min_ram=0, properties=properties,
|
|
boot_server_kwargs=boot_server_kwargs)
|
|
image_service.create_image.assert_called_once_with(**call_args)
|
|
mock_boot_servers.assert_called_once_with("image-id-0", "fid",
|
|
5, **boot_server_kwargs)
|
|
|
|
def test_create_and_update_image(self):
|
|
image_service = self.mock_image.return_value
|
|
|
|
fake_image = fakes.FakeImage(id=1, name="imagexxx")
|
|
image_service.create_image.return_value = fake_image
|
|
properties = {"fakeprop": "fake"}
|
|
create_args = {"container_format": "cf",
|
|
"image_location": "url",
|
|
"disk_format": "df",
|
|
"visibility": "vs",
|
|
"min_disk": 0,
|
|
"min_ram": 0,
|
|
"properties": properties}
|
|
|
|
images.CreateAndUpdateImage(self.context).run(
|
|
"cf", "url", "df", None, "vs", 0, 0, properties, 0, 0)
|
|
|
|
image_service.create_image.assert_called_once_with(**create_args)
|
|
image_service.update_image.assert_called_once_with(
|
|
fake_image.id, min_disk=0, min_ram=0, remove_props=None)
|
|
|
|
@mock.patch("%s.create_image" % GLANCE_V2_PATH)
|
|
@mock.patch("%s.deactivate_image" % GLANCE_V2_PATH)
|
|
def test_create_and_deactivate_image(self, mock_deactivate_image,
|
|
mock_create_image):
|
|
fake_image = fakes.FakeImage(id=1, name="img_name1")
|
|
mock_create_image.return_value = fake_image
|
|
call_args = {"container_format": "cf",
|
|
"image_location": "url",
|
|
"disk_format": "df",
|
|
"visibility": "vs",
|
|
"min_disk": 0,
|
|
"min_ram": 0}
|
|
|
|
images.CreateAndDeactivateImage(self.context).run(
|
|
"cf", "url", "df", "vs", 0, 0)
|
|
mock_create_image.assert_called_once_with(**call_args)
|
|
mock_deactivate_image.assert_called_once_with(fake_image.id)
|