Andrey Kurilin 24340329cf Replace inheritance hierarchy with composition
In the process of unification of the clients code we should use
composition to allow easier replacement with common HTTPClient.

Related to blueprint common-client-library-2

Change-Id: I5addc38eb2e2dd0be91b566fda7c0d81787ffa75
2013-12-09 18:50:12 +02:00

588 lines
18 KiB
Python

# Copyright 2013 OpenStack Foundation
# Copyright (C) 2013 Yahoo! 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.
# vim: tabstop=4 shiftwidth=4 softtabstop=4
import mock
import testtools
from glanceclient import client
from glanceclient import exc
from glanceclient.v1 import legacy_shell as test_shell
class LegacyShellV1Test(testtools.TestCase):
def test_print_image_formatted(self):
class FakeClient():
class FakeHTTPClient():
endpoint = 'http://is.invalid'
http_client = FakeHTTPClient()
class FakeImage():
id = 1
name = 'fake_image'
is_public = False
protected = False
status = 'active'
size = '1024'
min_ram = 512
min_disk = 10
properties = {'a': 'b', 'c': 'd'}
created_at = '04.03.2013'
owner = 'test'
updated_at = '04.03.2013'
deleted_at = '04.03.2013'
test_shell.print_image_formatted(FakeClient(), FakeImage())
def test_print_image(self):
class FakeImage():
id = 1
name = 'fake_image'
is_public = False
protected = False
status = 'active'
size = '1024'
min_ram = 512
min_disk = 10
properties = {'a': 'b', 'c': 'd'}
created_at = '04.03.2013'
owner = 'test'
updated_at = '04.03.2013'
deleted_at = '04.03.2013'
gc = client.Client('1', 'http://is.invalid:8080')
test_shell.print_image_formatted(gc, FakeImage())
def test_get_image_fields_from_args(self):
args = ["field=name"]
actual = test_shell.get_image_fields_from_args(args)
self.assertEqual({'field': 'name'}, actual)
def test_get_image_fields_from_args_exception_raises(self):
args = {"filed": "name"}
self.assertRaises(
RuntimeError, test_shell.get_image_fields_from_args, args)
def test_get_filters_from_args(self):
args = ["filter=name"]
actual = test_shell.get_image_filters_from_args(args)
self.assertEqual({'property-filter': 'name'}, actual)
def test_get_image_filters_from_args_exception_raises(self):
args = {"filter": "name"}
actual = test_shell.get_image_filters_from_args(args)
self.assertEqual(1, actual)
def test_do_add_error(self):
class FakeClient():
endpoint = 'http://is.invalid'
class args:
fields = 'name'
actual = test_shell.do_add(FakeClient(), args)
self.assertEqual(1, actual)
def test_do_add(self):
gc = client.Client('1', 'http://is.invalid')
class FakeImage():
fields = ['name=test',
'status=active',
'id=test',
'is_public=True',
'protected=False',
'min_disk=10',
'container_format=ovi',
'status=active']
dry_run = True
test_args = FakeImage()
actual = test_shell.do_add(gc, test_args)
self.assertEqual(0, actual)
def test_do_add_with_image_meta(self):
gc = client.Client('1', 'http://is.invalid')
class FakeImage():
fields = ['name=test',
'status=active',
'is_public=True',
'id=test',
'protected=False',
'min_disk=10',
'container_format=ovi',
'status=active',
'size=256',
'location=test',
'checksum=1024',
'owner=test_user']
dry_run = True
test_args = FakeImage()
actual = test_shell.do_add(gc, test_args)
self.assertEqual(0, actual)
def test_do_add_without_dry_run(self):
gc = client.Client('1', 'http://is.invalid')
class FakeImage():
fields = ['name=test',
'status=active',
'is_public=True',
'id=test',
'protected=False',
'min_disk=10',
'container_format=ovi',
'status=active',
'size=256',
'location=test',
'checksum=1024',
'owner=test_user']
dry_run = False
id = 'test'
verbose = False
test_args = FakeImage()
with mock.patch.object(gc.images, 'create') as mocked_create:
mocked_create.return_value = FakeImage()
actual = test_shell.do_add(gc, test_args)
self.assertEqual(0, actual)
def test_do_clear_force_true_error(self):
class FakeImage1():
id = 1
name = 'fake_image'
is_public = False
protected = False
status = 'active'
size = '1024'
min_ram = 512
min_disk = 10
properties = {'a': 'b', 'c': 'd'}
created_at = '04.03.2013'
owner = 'test'
updated_at = '04.03.2013'
deleted_at = '04.03.2013'
force = True
verbose = True
class FakeImages():
def __init__(self):
self.id = 'test'
self.name = 'test_image_name'
def list(self):
self.list = [FakeImage1(), FakeImage1()]
return self.list
class FakeClient():
def __init__(self):
self.images = FakeImages()
test_args = FakeImage1()
actual = test_shell.do_clear(FakeClient(), test_args)
self.assertEqual(1, actual)
def test_do_clear_force_true(self):
class FakeImage1():
def __init__(self):
self.id = 1
self.name = 'fake_image'
self.is_public = False
self.protected = False
self.status = 'active'
self.size = '1024'
self.min_ram = 512
self.min_disk = 10
self.properties = {'a': 'b', 'c': 'd'}
self.created_at = '04.03.2013'
self.owner = 'test'
self.updated_at = '04.03.2013'
self.deleted_at = '04.03.2013'
self.force = True
self.verbose = True
def delete(self):
pass
class FakeImages():
def __init__(self):
self.id = 'test'
self.name = 'test_image_name'
def list(self):
self.list = [FakeImage1(), FakeImage1()]
return self.list
class FakeClient():
def __init__(self):
self.images = FakeImages()
test_args = FakeImage1()
actual = test_shell.do_clear(FakeClient(), test_args)
self.assertEqual(0, actual)
def test_do_update_error(self):
class FakeClient():
endpoint = 'http://is.invalid'
class Image():
fields = ['id', 'is_public', 'name']
args = Image()
fake_client = FakeClient()
actual = test_shell.do_update(fake_client, args)
self.assertEqual(1, actual)
def test_do_update_invalid_endpoint(self):
class Image():
fields = ['id=test_updated', 'is_public=True', 'name=new_name']
dry_run = False
id = 'test'
args = Image()
gc = client.Client('1', 'http://is.invalid')
self.assertRaises(
exc.InvalidEndpoint, test_shell.do_update, gc, args)
def test_do_update(self):
class Image():
fields = ['id=test_updated',
'status=active',
'is_public=True',
'name=new_name',
'protected=False']
dry_run = True
id = 'test'
args = Image()
gc = client.Client('1', 'http://is.invalid')
actual = test_shell.do_update(gc, args)
self.assertEqual(0, actual)
def test_do_update_dry_run_false(self):
class Image():
fields = ['id=test_updated',
'status=active',
'is_public=True',
'name=new_name',
'protected=False',
'is_public=True']
dry_run = False
id = 'test'
verbose = True
is_public = True
protected = False
status = 'active'
size = 1024
min_ram = 512
min_disk = 512
properties = {'property': 'test'}
created_at = '12.09.2013'
args = Image()
gc = client.Client('1', 'http://is.invalid')
with mock.patch.object(gc.images, 'update') as mocked_update:
mocked_update.return_value = Image()
actual = test_shell.do_update(gc, args)
self.assertEqual(0, actual)
def test_do_delete(self):
class FakeImage1():
def __init__(self):
self.id = 1
self.name = 'fake_image'
self.is_public = False
self.protected = False
self.status = 'active'
self.size = '1024'
self.min_ram = 512
self.min_disk = 10
self.properties = {'a': 'b', 'c': 'd'}
self.created_at = '04.03.2013'
self.owner = 'test'
self.updated_at = '04.03.2013'
self.deleted_at = '04.03.2013'
self.force = True
self.verbose = True
def delete(self):
pass
def get(self, id):
return FakeImage1()
class FakeClient():
def __init__(self):
self.images = FakeImage1()
actual = test_shell.do_delete(FakeClient(), FakeImage1())
def test_show(self):
class Image():
fields = ['id=test_updated',
'status=active',
'is_public=True',
'name=new_name',
'protected=False']
id = 'test_show'
name = 'fake_image'
is_public = False
protected = False
status = 'active'
size = '1024'
min_ram = 512
min_disk = 10
properties = {'a': 'b', 'c': 'd'}
created_at = '04.03.2013'
owner = 'test'
updated_at = '04.03.2013'
gc = client.Client('1', 'http://is.invalid')
with mock.patch.object(gc.images, 'get') as mocked_get:
mocked_get.return_value = Image()
actual = test_shell.do_show(gc, Image())
self.assertEqual(0, actual)
def test_index(self):
class Image():
id = 'test'
filters = {}
limit = 18
marker = False
sort_key = 'test'
kwarg = 'name'
sort_dir = 'test'
name = 'test'
disk_format = 'ovi'
container_format = 'ovi'
size = 1024
args = Image()
gc = client.Client('1', 'http://is.invalid')
with mock.patch.object(gc.images, 'list') as mocked_list:
mocked_list.return_value = [Image(), Image()]
actual = test_shell.do_index(gc, args)
def test_index_return_empty(self):
class Image():
id = 'test'
filters = {}
limit = 18
marker = False
sort_key = 'test'
kwarg = 'name'
sort_dir = 'test'
name = 'test'
disk_format = 'ovi'
container_format = 'ovi'
size = 1024
args = Image()
gc = client.Client('1', 'http://is.invalid')
with mock.patch.object(test_shell, '_get_images') as mocked_get:
mocked_get.return_value = False
actual = test_shell.do_index(gc, args)
self.assertEqual(0, actual)
def test_do_details(self):
class Image():
id = 'test'
filters = {}
limit = 18
marker = False
sort_key = 'test'
kwarg = 'name'
sort_dir = 'test'
name = 'test'
disk_format = 'ovi'
container_format = 'ovi'
size = 1024
is_public = True
protected = False
status = 'active'
min_ram = 512
min_disk = 512
properties = {}
created_at = '12.12.12'
args = Image()
gc = client.Client('1', 'http://is.invalid')
with mock.patch.object(gc.images, 'list') as mocked_list:
mocked_list.return_value = [Image(), Image()]
actual = test_shell.do_details(gc, args)
def test_do_image_members(self):
class FakeImage1():
def __init__(self):
self.image_id = 1
self.name = 'fake_image'
self.is_public = False
self.protected = False
self.status = 'active'
self.size = '1024'
self.min_ram = 512
self.min_disk = 10
self.properties = {'a': 'b', 'c': 'd'}
self.created_at = '04.03.2013'
self.owner = 'test'
self.updated_at = '04.03.2013'
self.deleted_at = '04.03.2013'
self.force = True
self.verbose = True
def delete(self):
pass
def get(self, id):
return FakeImage1()
class FakeClient():
def __init__(self):
self.image_members = ImageMembers()
class ImageMembers():
def __init__(self):
self.member_id = 'test'
self.can_share = True
def list(self, image):
return [ImageMembers(), ImageMembers()]
actual = test_shell.do_image_members(FakeClient(), FakeImage1())
def test_do_member_add_error(self):
class FakeClient():
def __init__(self):
self.image_members = ImageMembers()
class FakeImage1():
def __init__(self):
self.member_id = 'test'
self.fields = ["name", "id", "filter"]
self.dry_run = True
self.image_id = 'fake_image_id'
self.can_share = True
def delete(self):
pass
def get(self, id):
return FakeImage1()
class ImageMembers():
def __init__(self):
self.member_id = 'test'
self.can_share = True
def list(self, image):
return [ImageMembers(), ImageMembers()]
actual = test_shell.do_member_add(FakeClient(), FakeImage1())
def test_do_member_images_empty_result(self):
class FakeImage1():
def __init__(self):
self.member_id = 'test'
gc = client.Client('1', 'http://is.invalid')
with mock.patch.object(gc.image_members, 'list') as mocked_list:
mocked_list.return_value = []
actual = test_shell.do_member_images(gc, FakeImage1())
self.assertEqual(0, actual)
def test_do_member_replace(self):
class FakeClient():
def __init__(self):
self.image_members = ImageMembers()
class ImageMembers():
def __init__(self):
self.member_id = 'test'
self.can_share = True
self.dry_run = True
self.image_id = "fake_image_id"
def list(self, image):
return [ImageMembers(), ImageMembers()]
actual = test_shell.do_member_add(FakeClient(), ImageMembers())
def test_do_members_replace_dry_run_true(self):
class Fake():
def __init__(self):
self.dry_run = True
self.can_share = True
self.image_id = 'fake_id'
self.member_id = 'test'
gc = client.Client('1', 'http://is.invalid')
actual = test_shell.do_members_replace(gc, Fake())
def test_do_members_replace_dry_run_false(self):
class Fake():
def __init__(self):
self.dry_run = False
self.can_share = True
self.image_id = 'fake_id'
self.member_id = 'test'
gc = client.Client('1', 'http://is.invalid')
with mock.patch.object(gc.image_members, 'list') as mocked_list:
mocked_list.return_value = []
with mock.patch.object(gc.image_members, 'create'):
actual = test_shell.do_members_replace(gc, Fake())
def test_do_member_images(self):
class FakeClient():
def __init__(self):
self.image_members = ImageMembers()
class ImageMembers():
def __init__(self):
self.member_id = 'test'
self.can_share = True
self.dry_run = True
self.image_id = "fake_image_id"
def list(self, member):
return [ImageMembers(), ImageMembers()]
actual = test_shell.do_member_images(FakeClient(), ImageMembers())
def test_create_pretty_table(self):
class MyPrettyTable(test_shell.PrettyTable):
def __init__(self):
self.columns = []
# Test add column
my_pretty_table = MyPrettyTable()
my_pretty_table.add_column(1, label='test')
# Test make header
test_res = my_pretty_table.make_header()
self.assertEqual('t\n-', test_res)
# Test make row
result = my_pretty_table.make_row('t')
self.assertEqual("t", result)
result = my_pretty_table._clip_and_justify(
data='test', width=4, just=1)
self.assertEqual("test", result)