kingbird/kingbird/tests/unit/drivers/test_glance_v2.py

200 lines
8.1 KiB
Python

# Copyright (c) 2017 Ericsson AB.
# 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 mock import patch
from kingbird.drivers.openstack.glance_v2 import GlanceClient
from kingbird.drivers.openstack.glance_v2 import GlanceUpload
from kingbird.tests import base
from kingbird.tests import utils
FAKE_ITERATOR = iter([1, 2, 3])
FAKE_ID = utils.UUID4
class FakeService(object):
"""Fake service class used to test service enable testcase."""
def __init__(self, type_service, name, id):
self.type = type_service
self.name = name
self.id = id
class FakeImage(object):
"""Fake service class used to test service enable testcase."""
def __init__(self, min_ram, protected, min_disk, name, visibility, tags,
owner, architecture, os_version, os_distro, container_format,
disk_format, id):
self.min_ram = min_ram
self.protected = protected
self.min_disk = min_disk
self.name = name
self.visibility = visibility
self.tags = tags
self.owner = owner
self.architecture = architecture
self.os_version = os_version
self.os_distro = os_distro
self.container_format = container_format
self.disk_format = disk_format
self.id = id
def get(self, attr):
return getattr(self, attr)
def iterkeys(self):
return ",".join(self.__dict__.keys()).split(",")
class FakeEndpoint(object):
"""Fake Endpoints class used to test service enable testcase."""
def __init__(self, url, service_id, region, interface):
self.url = url
self.service_id = service_id
self.region = region
self.interface = interface
class TestGlanceClient(base.KingbirdTestCase):
def setUp(self):
super(TestGlanceClient, self).setUp()
self.ctx = utils.dummy_context()
def common_init(self, mock_glance_client, mock_keystone_client):
"""Keep commonly used variables."""
fake_service = FakeService('image', 'fake_type', 'fake_id')
fake_endpoint = FakeEndpoint('fake_url', fake_service.id,
'fake_region', 'public')
mock_keystone_client().services_list = [fake_service]
mock_keystone_client().endpoints_list = [fake_endpoint]
return GlanceClient('fake_region', self.ctx)
@patch('kingbird.drivers.openstack.glance_v2.KeystoneClient')
@patch('kingbird.drivers.openstack.glance_v2.Client')
def test_init(self, mock_glance_client, mock_keystone_client):
"""Test init method of glance."""
self.common_init(mock_glance_client, mock_keystone_client)
self.assertEqual(1, mock_glance_client.call_count)
@patch('kingbird.drivers.openstack.glance_v2.KeystoneClient')
@patch('kingbird.drivers.openstack.glance_v2.Client')
def test_get_image(self, mock_glance_client, mock_keystone_client):
"""Test get_image method of glance."""
Glance_client = self.common_init(mock_glance_client,
mock_keystone_client)
Glance_client.get_image('fake_resource')
mock_glance_client().images.get.\
assert_called_once_with('fake_resource')
@patch('kingbird.drivers.openstack.glance_v2.KeystoneClient')
@patch('kingbird.drivers.openstack.glance_v2.Client')
def test_check_image(self, mock_glance_client, mock_keystone_client):
"""Test get_image method of glance."""
Glance_client = self.common_init(mock_glance_client,
mock_keystone_client)
Glance_client.check_image('fake_resource')
mock_glance_client().images.get.\
assert_called_once_with('fake_resource')
@patch('kingbird.drivers.openstack.glance_v2.KeystoneClient')
@patch('kingbird.drivers.openstack.glance_v2.Client')
def test_get_image_data(self, mock_glance_client, mock_keystone_client):
"""Test get_image_data method of glance."""
Glance_client = self.common_init(mock_glance_client,
mock_keystone_client)
Glance_client.get_image_data('fake_resource')
mock_glance_client().images.data.\
assert_called_once_with('fake_resource')
@patch('kingbird.drivers.openstack.glance_v2.KeystoneClient')
@patch('kingbird.drivers.openstack.glance_v2.Client')
def test_image_create_force_false(self, mock_glance_client,
mock_keystone_client):
"""Test create_image method of glance."""
Glance_client = self.common_init(mock_glance_client,
mock_keystone_client)
fake_image = FakeImage(0, 'False', 0, 'fake_image', 'public',
'fake_tag', 'fake_owner', 'qemu',
'fake_version', 'fake_distribution', 'bare',
'qcow2', FAKE_ID)
fake_kwargs = {
"min_ram": fake_image.min_ram,
"protected": fake_image.protected,
"min_disk": fake_image.min_disk,
"name": fake_image.name,
"visibility": fake_image.visibility,
"tags": fake_image.tags,
"owner": fake_image.owner,
"architecture": fake_image.architecture,
"os_version": fake_image.os_version,
"os_distro": fake_image.os_distro,
"container_format": fake_image.container_format,
"disk_format": fake_image.disk_format,
"id": fake_image.id
}
Glance_client.create_image(fake_image, False)
mock_glance_client().images.create.\
assert_called_once_with(**fake_kwargs)
@patch('kingbird.drivers.openstack.glance_v2.KeystoneClient')
@patch('kingbird.drivers.openstack.glance_v2.Client')
def test_image_create_force_true(self, mock_glance_client,
mock_keystone_client):
"""Test create_image method of glance."""
Glance_client = self.common_init(mock_glance_client,
mock_keystone_client)
fake_image = FakeImage(0, 'False', 0, 'fake_image', 'public',
'fake_tag', 'fake_owner', 'qemu',
'fake_version', 'fake_distribution', 'bare',
'qcow2', FAKE_ID)
fake_kwargs = {
"min_ram": fake_image.min_ram,
"protected": fake_image.protected,
"min_disk": fake_image.min_disk,
"name": fake_image.name,
"visibility": fake_image.visibility,
"tags": fake_image.tags,
"owner": fake_image.owner,
"architecture": fake_image.architecture,
"os_version": fake_image.os_version,
"os_distro": fake_image.os_distro,
"container_format": fake_image.container_format,
"disk_format": fake_image.disk_format
}
Glance_client.create_image(fake_image, True)
mock_glance_client().images.create.\
assert_called_once_with(**fake_kwargs)
class TestGlanceUpload(base.KingbirdTestCase):
def test_init(self):
"""Test init method of GlanceUpload."""
glance_upload = GlanceUpload(FAKE_ITERATOR)
self.assertEqual(glance_upload.received, FAKE_ITERATOR)
def test_read(self):
"""Test read methos of GlanceUpload.
We send 65536 even though we don't use it.
Because the read method in GlanceUpload is the replacement
of read method in glance.
"""
glance_upload = GlanceUpload(FAKE_ITERATOR).read(65536)
self.assertEqual(glance_upload, 1)