Merge "Update tests for server calls that aren't list"

This commit is contained in:
Jenkins 2017-06-14 23:00:15 +00:00 committed by Gerrit Code Review
commit cd99ea60af
2 changed files with 238 additions and 126 deletions

View File

@ -19,168 +19,250 @@ test_rebuild_server
Tests for the `rebuild_server` command.
"""
import mock
import uuid
from shade import exc
from shade import meta
from shade import OpenStackCloud
from shade.tests import fakes
from shade.tests.unit import base
class TestRebuildServer(base.RequestsMockTestCase):
@mock.patch.object(OpenStackCloud, 'nova_client')
def test_rebuild_server_rebuild_exception(self, mock_nova):
def setUp(self):
super(TestRebuildServer, self).setUp()
self.server_id = str(uuid.uuid4())
self.server_name = self.getUniqueString('name')
self.fake_server = fakes.make_fake_server(
self.server_id, self.server_name)
self.rebuild_server = fakes.make_fake_server(
self.server_id, self.server_name, 'REBUILD')
self.error_server = fakes.make_fake_server(
self.server_id, self.server_name, 'ERROR')
def test_rebuild_server_rebuild_exception(self):
"""
Test that an exception in the novaclient rebuild raises an exception in
rebuild_server.
"""
mock_nova.servers.rebuild.side_effect = Exception("exception")
self.assertRaises(
exc.OpenStackCloudException, self.cloud.rebuild_server, "a", "b")
self.register_uris([
dict(method='POST',
uri=self.get_mock_url(
'compute', 'public',
append=['servers', self.server_id, 'action']),
status_code=400,
validate=dict(
json={
'rebuild': {
'imageRef': 'a',
'adminPass': 'b'}})),
])
@mock.patch.object(OpenStackCloud, 'nova_client')
def test_rebuild_server_server_error(self, mock_nova):
self.assertRaises(
exc.OpenStackCloudException,
self.cloud.rebuild_server,
self.fake_server['id'], "a", "b")
self.assert_calls()
def test_rebuild_server_server_error(self):
"""
Test that a server error while waiting for the server to rebuild
raises an exception in rebuild_server.
"""
rebuild_server = fakes.FakeServer('1234', '', 'REBUILD')
error_server = fakes.FakeServer('1234', '', 'ERROR')
fake_floating_ip = fakes.FakeFloatingIP('1234', 'ippool',
'1.1.1.1', '2.2.2.2',
'5678')
mock_nova.servers.rebuild.return_value = rebuild_server
mock_nova.servers.list.return_value = [error_server]
self.register_uris([
dict(method='POST',
uri=self.get_mock_url(
'compute', 'public',
append=['servers', self.server_id, 'action']),
json={'server': self.rebuild_server},
validate=dict(
json={
'rebuild': {
'imageRef': 'a'}})),
dict(method='GET',
uri=self.get_mock_url(
'network', 'public', append=['v2.0', 'ports.json'],
qs_elements=['device_id=1234']),
json={'ports': []}),
'compute', 'public', append=['servers', self.server_id]),
json={'server': self.rebuild_server}),
dict(method='GET',
uri=self.get_mock_url(
'network', 'public', append=['v2.0', 'floatingips.json']),
json={'floatingips': [fake_floating_ip]})
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.error_server]}),
])
self.assertRaises(
exc.OpenStackCloudException,
self.cloud.rebuild_server, "1234", "b", wait=True)
# TODO(slaweq): change do_count to True when all nova mocks will be
# replaced with request_mocks also
self.assert_calls(do_count=False)
self.cloud.rebuild_server, self.fake_server['id'], "a", wait=True)
@mock.patch.object(OpenStackCloud, 'nova_client')
def test_rebuild_server_timeout(self, mock_nova):
self.assert_calls()
def test_rebuild_server_timeout(self):
"""
Test that a timeout while waiting for the server to rebuild raises an
exception in rebuild_server.
"""
rebuild_server = fakes.FakeServer('1234', '', 'REBUILD')
mock_nova.servers.rebuild.return_value = rebuild_server
mock_nova.servers.list.return_value = [rebuild_server]
self.register_uris([
dict(method='POST',
uri=self.get_mock_url(
'compute', 'public',
append=['servers', self.server_id, 'action']),
json={'server': self.rebuild_server},
validate=dict(
json={
'rebuild': {
'imageRef': 'a'}})),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', self.server_id]),
json={'server': self.rebuild_server}),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.rebuild_server]}),
])
self.assertRaises(
exc.OpenStackCloudTimeout,
self.cloud.rebuild_server, "a", "b", wait=True, timeout=0.001)
self.cloud.rebuild_server,
self.fake_server['id'], "a", wait=True, timeout=0.001)
@mock.patch.object(OpenStackCloud, 'nova_client')
def test_rebuild_server_no_wait(self, mock_nova):
self.assert_calls(do_count=False)
def test_rebuild_server_no_wait(self):
"""
Test that rebuild_server with no wait and no exception in the
novaclient rebuild call returns the server instance.
"""
rebuild_server = fakes.FakeServer('1234', '', 'REBUILD')
mock_nova.servers.rebuild.return_value = rebuild_server
self.assertEqual(meta.obj_to_munch(rebuild_server),
self.cloud.rebuild_server("a", "b"))
@mock.patch.object(OpenStackCloud, 'nova_client')
def test_rebuild_server_with_admin_pass_no_wait(self, mock_nova):
"""
Test that a server with an admin_pass passed returns the password
"""
rebuild_server = fakes.FakeServer('1234', '', 'REBUILD',
adminPass='ooBootheiX0edoh')
mock_nova.servers.rebuild.return_value = rebuild_server
self.assertEqual(
meta.obj_to_munch(rebuild_server),
self.cloud.rebuild_server(
'a', 'b', admin_pass='ooBootheiX0edoh'))
@mock.patch.object(OpenStackCloud, 'nova_client')
def test_rebuild_server_with_admin_pass_wait(self, mock_nova):
"""
Test that a server with an admin_pass passed returns the password
"""
rebuild_server = fakes.FakeServer('1234', '', 'REBUILD',
adminPass='ooBootheiX0edoh')
active_server = fakes.FakeServer('1234', '', 'ACTIVE')
ret_active_server = fakes.FakeServer('1234', '', 'ACTIVE',
adminPass='ooBootheiX0edoh')
fake_floating_ip = fakes.FakeFloatingIP('1234', 'ippool',
'1.1.1.1', '2.2.2.2',
'5678')
mock_nova.servers.rebuild.return_value = rebuild_server
mock_nova.servers.list.return_value = [active_server]
self.register_uris([
dict(method='POST',
uri=self.get_mock_url(
'compute', 'public',
append=['servers', self.server_id, 'action']),
json={'server': self.rebuild_server},
validate=dict(
json={
'rebuild': {
'imageRef': 'a'}})),
dict(method='GET',
uri=self.get_mock_url(
'network', 'public', append=['v2.0', 'ports.json'],
qs_elements=['device_id=1234']),
json={'ports': []}),
'compute', 'public', append=['servers', self.server_id]),
json={'server': self.rebuild_server}),
])
self.assertEqual(
self.rebuild_server['status'],
self.cloud.rebuild_server(self.fake_server['id'], "a")['status'])
self.assert_calls()
def test_rebuild_server_with_admin_pass_no_wait(self):
"""
Test that a server with an admin_pass passed returns the password
"""
password = self.getUniqueString('password')
rebuild_server = self.rebuild_server.copy()
rebuild_server['adminPass'] = password
self.register_uris([
dict(method='POST',
uri=self.get_mock_url(
'compute', 'public',
append=['servers', self.server_id, 'action']),
json={'server': rebuild_server},
validate=dict(
json={
'rebuild': {
'imageRef': 'a',
'adminPass': password}})),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', self.server_id]),
json={'server': self.rebuild_server}),
])
self.assertEqual(
password,
self.cloud.rebuild_server(
self.fake_server['id'], 'a',
admin_pass=password)['adminPass'])
self.assert_calls()
def test_rebuild_server_with_admin_pass_wait(self):
"""
Test that a server with an admin_pass passed returns the password
"""
password = self.getUniqueString('password')
rebuild_server = self.rebuild_server.copy()
rebuild_server['adminPass'] = password
self.register_uris([
dict(method='POST',
uri=self.get_mock_url(
'compute', 'public',
append=['servers', self.server_id, 'action']),
json={'server': rebuild_server},
validate=dict(
json={
'rebuild': {
'imageRef': 'a',
'adminPass': password}})),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', self.server_id]),
json={'server': self.rebuild_server}),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.rebuild_server]}),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.fake_server]}),
dict(method='GET',
uri=self.get_mock_url(
'network', 'public', append=['v2.0', 'networks.json']),
json={'networks': []}),
dict(method='GET',
uri=self.get_mock_url(
'network', 'public', append=['v2.0', 'floatingips.json']),
json={'floatingips': [fake_floating_ip]})
])
self.cloud.name = 'cloud-name'
self.assertEqual(
self.cloud._normalize_server(
meta.obj_to_munch(ret_active_server)),
self.cloud.rebuild_server(
"1234", "b", wait=True, admin_pass='ooBootheiX0edoh'))
# TODO(slaweq): change do_count to True when all nova mocks will be
# replaced with request_mocks also
self.assert_calls(do_count=False)
@mock.patch.object(OpenStackCloud, 'nova_client')
def test_rebuild_server_wait(self, mock_nova):
self.assertEqual(
password,
self.cloud.rebuild_server(
self.fake_server['id'], 'a',
admin_pass=password, wait=True)['adminPass'])
self.assert_calls()
def test_rebuild_server_wait(self):
"""
Test that rebuild_server with a wait returns the server instance when
its status changes to "ACTIVE".
"""
rebuild_server = fakes.FakeServer('1234', '', 'REBUILD')
active_server = fakes.FakeServer('1234', '', 'ACTIVE')
fake_floating_ip = fakes.FakeFloatingIP('1234', 'ippool',
'1.1.1.1', '2.2.2.2',
'5678')
mock_nova.servers.rebuild.return_value = rebuild_server
mock_nova.servers.list.return_value = [active_server]
self.register_uris([
dict(method='POST',
uri=self.get_mock_url(
'compute', 'public',
append=['servers', self.server_id, 'action']),
json={'server': self.rebuild_server},
validate=dict(
json={
'rebuild': {
'imageRef': 'a'}})),
dict(method='GET',
uri=self.get_mock_url(
'network', 'public', append=['v2.0', 'ports.json'],
qs_elements=['device_id=1234']),
json={'ports': []}),
'compute', 'public', append=['servers', self.server_id]),
json={'server': self.rebuild_server}),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.rebuild_server]}),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.fake_server]}),
dict(method='GET',
uri=self.get_mock_url(
'network', 'public', append=['v2.0', 'networks.json']),
json={'networks': []}),
dict(method='GET',
uri=self.get_mock_url(
'network', 'public', append=['v2.0', 'floatingips.json']),
json={'floatingips': [fake_floating_ip]})
])
self.cloud.name = 'cloud-name'
self.assertEqual(
self.cloud._normalize_server(
meta.obj_to_munch(active_server)),
self.cloud.rebuild_server("1234", "b", wait=True))
# TODO(slaweq): change do_count to True when all nova mocks will be
# replaced with request_mocks also
self.assert_calls(do_count=False)
'ACTIVE',
self.cloud.rebuild_server(
self.fake_server['id'], 'a', wait=True)['status'])
self.assert_calls()

View File

@ -17,42 +17,72 @@ test_update_server
Tests for the `update_server` command.
"""
import mock
import uuid
from shade import OpenStackCloud
from shade.exc import OpenStackCloudException
from shade.tests import fakes
from shade.tests.unit import base
class TestUpdateServer(base.TestCase):
class TestUpdateServer(base.RequestsMockTestCase):
@mock.patch.object(OpenStackCloud, 'nova_client')
def test_update_server_with_update_exception(self, mock_nova):
def setUp(self):
super(TestUpdateServer, self).setUp()
self.server_id = str(uuid.uuid4())
self.server_name = self.getUniqueString('name')
self.updated_server_name = self.getUniqueString('name2')
self.fake_server = fakes.make_fake_server(
self.server_id, self.server_name)
def test_update_server_with_update_exception(self):
"""
Test that an exception in the novaclient update raises an exception in
update_server.
"""
mock_nova.servers.update.side_effect = Exception("exception")
self.register_uris([
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.fake_server]}),
dict(method='PUT',
uri=self.get_mock_url(
'compute', 'public', append=['servers', self.server_id]),
status_code=400,
validate=dict(
json={'server': {'name': self.updated_server_name}})),
])
self.assertRaises(
OpenStackCloudException, self.cloud.update_server,
'server-name')
self.server_name, name=self.updated_server_name)
@mock.patch.object(OpenStackCloud, 'nova_client')
def test_update_server_name(self, mock_nova):
self.assert_calls()
def test_update_server_name(self):
"""
Test that update_server updates the name without raising any exception
"""
fake_server = fakes.FakeServer('1234', 'server-name', 'ACTIVE')
fake_update_server = fakes.FakeServer('1234', 'server-name2',
'ACTIVE')
fake_floating_ip = fakes.FakeFloatingIP('1234', 'ippool',
'1.1.1.1', '2.2.2.2',
'5678')
mock_nova.servers.list.return_value = [fake_server]
mock_nova.servers.update.return_value = fake_update_server
mock_nova.floating_ips.list.return_value = [fake_floating_ip]
fake_update_server = fakes.make_fake_server(
self.server_id, self.updated_server_name)
self.register_uris([
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', 'detail']),
json={'servers': [self.fake_server]}),
dict(method='PUT',
uri=self.get_mock_url(
'compute', 'public', append=['servers', self.server_id]),
json={'server': fake_update_server},
validate=dict(
json={'server': {'name': self.updated_server_name}})),
dict(method='GET',
uri=self.get_mock_url(
'compute', 'public', append=['servers', self.server_id]),
json={'server': fake_update_server}),
])
self.assertEqual(
'server-name2',
self.updated_server_name,
self.cloud.update_server(
'server-name', name='server-name2')['name'])
self.server_name, name=self.updated_server_name)['name'])
self.assert_calls()