diff options
author | Dean Troyer <dtroyer@gmail.com> | 2018-03-05 14:18:41 -0600 |
---|---|---|
committer | Matt Riedemann <mriedem.os@gmail.com> | 2018-04-20 10:08:06 -0400 |
commit | 6c8967dc8eeea1d64b8b7a17bee1f8d1aa647bed (patch) | |
tree | f6f4ba8bcd588c8d7d47565cd2ed4a8f231691f1 /openstackclient/tests | |
parent | cc3dd2abe23b5363a963206e89371be493d43ad7 (diff) | |
download | python-openstackclient-3.14.2.tar.gz |
Re-implement novaclient bits removed in 10.03.14.2
a)
/os-floating-ips was removed in Compute API 2.36 and from novaclient's
Python API in 10.0
Add to api.computev2:
floating_ip_add()
floating_ip_remove()
Convert add floating IP command to nova-net/neutron split:
"server add floating ip"
"server remove floating ip"
b)
/os-hosts was removed in Compute API 2.43 and from novaclient's
Python API in 10.0.
Add to api.computev2:
host_list()
host_set()
host_show()
Convert host commands to use intenal api:
"host list"
"host set"
"host show"
c)
The introduction of the Network-style commands into the server group
broke cliff's autoprogram directive as it executes the get_parser() methods
without fully initializing the Command object.
NOTE: This is really three reviews squashed to get through the gate in one pass.
Closes-Bug: #1745795
Change-Id: I5116086f9a9e4b2b31a744bf8f4558c79f0bfe59
(cherry picked from commit 53e7aab7ed4d6c981ca067c1db8bce290a5f0055)
Diffstat (limited to 'openstackclient/tests')
-rw-r--r-- | openstackclient/tests/unit/api/test_compute_v2.py | 176 | ||||
-rw-r--r-- | openstackclient/tests/unit/compute/v2/fakes.py | 5 | ||||
-rw-r--r-- | openstackclient/tests/unit/compute/v2/test_host.py | 85 | ||||
-rw-r--r-- | openstackclient/tests/unit/compute/v2/test_server.py | 224 |
4 files changed, 410 insertions, 80 deletions
diff --git a/openstackclient/tests/unit/api/test_compute_v2.py b/openstackclient/tests/unit/api/test_compute_v2.py index 4f3b8031..edf5258f 100644 --- a/openstackclient/tests/unit/api/test_compute_v2.py +++ b/openstackclient/tests/unit/api/test_compute_v2.py @@ -55,6 +55,43 @@ class TestFloatingIP(TestComputeAPIv2): FAKE_FLOATING_IP_RESP_2, ] + FAKE_SERVER_RESP_1 = { + 'id': 1, + 'name': 'server1', + } + + def test_floating_ip_add_id(self): + self.requests_mock.register_uri( + 'POST', + FAKE_URL + '/servers/1/action', + json={'server': {}}, + status_code=200, + ) + self.requests_mock.register_uri( + 'GET', + FAKE_URL + '/servers/1', + json={'server': self.FAKE_SERVER_RESP_1}, + status_code=200, + ) + ret = self.api.floating_ip_add('1', '1.0.1.0') + self.assertEqual(200, ret.status_code) + + def test_floating_ip_add_name(self): + self.requests_mock.register_uri( + 'POST', + FAKE_URL + '/servers/1/action', + json={'server': {}}, + status_code=200, + ) + self.requests_mock.register_uri( + 'GET', + FAKE_URL + '/servers/server1', + json={'server': self.FAKE_SERVER_RESP_1}, + status_code=200, + ) + ret = self.api.floating_ip_add('server1', '1.0.1.0') + self.assertEqual(200, ret.status_code) + def test_floating_ip_create(self): self.requests_mock.register_uri( 'POST', @@ -144,6 +181,36 @@ class TestFloatingIP(TestComputeAPIv2): ret = self.api.floating_ip_list() self.assertEqual(self.LIST_FLOATING_IP_RESP, ret) + def test_floating_ip_remove_id(self): + self.requests_mock.register_uri( + 'POST', + FAKE_URL + '/servers/1/action', + status_code=200, + ) + self.requests_mock.register_uri( + 'GET', + FAKE_URL + '/servers/1', + json={'server': self.FAKE_SERVER_RESP_1}, + status_code=200, + ) + ret = self.api.floating_ip_remove('1', '1.0.1.0') + self.assertEqual(200, ret.status_code) + + def test_floating_ip_remove_name(self): + self.requests_mock.register_uri( + 'POST', + FAKE_URL + '/servers/1/action', + status_code=200, + ) + self.requests_mock.register_uri( + 'GET', + FAKE_URL + '/servers/server1', + json={'server': self.FAKE_SERVER_RESP_1}, + status_code=200, + ) + ret = self.api.floating_ip_remove('server1', '1.0.1.0') + self.assertEqual(200, ret.status_code) + class TestFloatingIPPool(TestComputeAPIv2): @@ -163,6 +230,115 @@ class TestFloatingIPPool(TestComputeAPIv2): self.assertEqual(self.LIST_FLOATING_IP_POOL_RESP, ret) +class TestHost(TestComputeAPIv2): + + FAKE_HOST_RESP_1 = { + "zone": "internal", + "host_name": "myhost", + "service": "conductor", + } + + FAKE_HOST_RESP_2 = { + "zone": "internal", + "host_name": "myhost", + "service": "scheduler", + } + + FAKE_HOST_RESP_3 = { + "zone": "nova", + "host_name": "myhost", + "service": "compute", + } + + LIST_HOST_RESP = [ + FAKE_HOST_RESP_1, + FAKE_HOST_RESP_2, + FAKE_HOST_RESP_3, + ] + + def test_host_list_no_options(self): + self.requests_mock.register_uri( + 'GET', + FAKE_URL + '/os-hosts', + json={'hosts': self.LIST_HOST_RESP}, + status_code=200, + ) + ret = self.api.host_list() + self.assertEqual(self.LIST_HOST_RESP, ret) + + def test_host_list_zone(self): + self.requests_mock.register_uri( + 'GET', + FAKE_URL + '/os-hosts?zone=nova', + json={'hosts': [self.FAKE_HOST_RESP_3]}, + status_code=200, + ) + self.requests_mock.register_uri( + 'GET', + FAKE_URL + '/os-hosts', + json={'hosts': [self.FAKE_HOST_RESP_3]}, + status_code=200, + ) + ret = self.api.host_list(zone='nova') + self.assertEqual([self.FAKE_HOST_RESP_3], ret) + + def test_host_set_none(self): + ret = self.api.host_set(host='myhost') + self.assertIsNone(ret) + + def test_host_set(self): + self.requests_mock.register_uri( + 'PUT', + FAKE_URL + '/os-hosts/myhost', + json={}, + status_code=200, + ) + ret = self.api.host_set(host='myhost', status='enabled') + self.assertEqual({}, ret) + + def test_host_show(self): + FAKE_RESOURCE_1 = { + "cpu": 2, + "disk_gb": 1028, + "host": "c1a7de0ac9d94e4baceae031d05caae3", + "memory_mb": 8192, + "project": "(total)", + } + FAKE_RESOURCE_2 = { + "cpu": 0, + "disk_gb": 0, + "host": "c1a7de0ac9d94e4baceae031d05caae3", + "memory_mb": 512, + "project": "(used_now)", + } + FAKE_RESOURCE_3 = { + "cpu": 0, + "disk_gb": 0, + "host": "c1a7de0ac9d94e4baceae031d05caae3", + "memory_mb": 0, + "project": "(used_max)", + } + FAKE_HOST_RESP = [ + {'resource': FAKE_RESOURCE_1}, + {'resource': FAKE_RESOURCE_2}, + {'resource': FAKE_RESOURCE_3}, + ] + FAKE_HOST_LIST = [ + FAKE_RESOURCE_1, + FAKE_RESOURCE_2, + FAKE_RESOURCE_3, + ] + + self.requests_mock.register_uri( + 'GET', + FAKE_URL + '/os-hosts/myhost', + json={'host': FAKE_HOST_RESP}, + status_code=200, + ) + ret = self.api.host_show(host='myhost') + self.assertEqual(FAKE_HOST_LIST, ret) + + class TestNetwork(TestComputeAPIv2): FAKE_NETWORK_RESP = { diff --git a/openstackclient/tests/unit/compute/v2/fakes.py b/openstackclient/tests/unit/compute/v2/fakes.py index 0fae19af..1ec71785 100644 --- a/openstackclient/tests/unit/compute/v2/fakes.py +++ b/openstackclient/tests/unit/compute/v2/fakes.py @@ -1230,10 +1230,7 @@ class FakeHost(object): 'project': 'project-' + uuid.uuid4().hex, } host_info.update(attrs) - host = fakes.FakeResource( - info=copy.deepcopy(host_info), - loaded=True) - return host + return host_info class FakeServerGroup(object): diff --git a/openstackclient/tests/unit/compute/v2/test_host.py b/openstackclient/tests/unit/compute/v2/test_host.py index a388172f..329095de 100644 --- a/openstackclient/tests/unit/compute/v2/test_host.py +++ b/openstackclient/tests/unit/compute/v2/test_host.py @@ -13,6 +13,8 @@ # under the License. # +import mock + from openstackclient.compute.v2 import host from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes from openstackclient.tests.unit import utils as tests_utils @@ -23,11 +25,13 @@ class TestHost(compute_fakes.TestComputev2): def setUp(self): super(TestHost, self).setUp() - # Get a shortcut to the FlavorManager Mock - self.host_mock = self.app.client_manager.compute.hosts - self.host_mock.reset_mock() + # Get a shortcut to the compute client + self.compute = self.app.client_manager.compute +@mock.patch( + 'openstackclient.api.compute_v2.APIv2.host_list' +) class TestHostList(TestHost): host = compute_fakes.FakeHost.create_one_host() @@ -39,19 +43,18 @@ class TestHostList(TestHost): ) data = [( - host.host_name, - host.service, - host.zone, + host['host_name'], + host['service'], + host['zone'], )] def setUp(self): super(TestHostList, self).setUp() - self.host_mock.list_all.return_value = [self.host] - self.cmd = host.ListHost(self.app, None) - def test_host_list_no_option(self): + def test_host_list_no_option(self, h_mock): + h_mock.return_value = [self.host] arglist = [] verifylist = [] @@ -59,44 +62,48 @@ class TestHostList(TestHost): columns, data = self.cmd.take_action(parsed_args) - self.host_mock.list_all.assert_called_with(None) + h_mock.assert_called_with(None) self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) - def test_host_list_with_option(self): + def test_host_list_with_option(self, h_mock): + h_mock.return_value = [self.host] arglist = [ - '--zone', self.host.zone, + '--zone', self.host['zone'], ] verifylist = [ - ('zone', self.host.zone), + ('zone', self.host['zone']), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) - self.host_mock.list_all.assert_called_with(self.host.zone) + h_mock.assert_called_with(self.host['zone']) self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) +@mock.patch( + 'openstackclient.api.compute_v2.APIv2.host_set' +) class TestHostSet(TestHost): def setUp(self): super(TestHostSet, self).setUp() self.host = compute_fakes.FakeHost.create_one_host() - self.host_mock.get.return_value = self.host - self.host_mock.update.return_value = None self.cmd = host.SetHost(self.app, None) - def test_host_set_no_option(self): + def test_host_set_no_option(self, h_mock): + h_mock.return_value = self.host + h_mock.update.return_value = None arglist = [ - self.host.host + self.host['host'], ] verifylist = [ - ('host', self.host.host) + ('host', self.host['host']), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -105,18 +112,20 @@ class TestHostSet(TestHost): self.assertIsNone(result) body = {} - self.host_mock.update.assert_called_with(self.host.host, body) + h_mock.assert_called_with(self.host['host'], body) - def test_host_set(self): + def test_host_set(self, h_mock): + h_mock.return_value = self.host + h_mock.update.return_value = None arglist = [ '--enable', '--disable-maintenance', - self.host.host + self.host['host'], ] verifylist = [ ('enable', True), ('enable_maintenance', False), - ('host', self.host.host) + ('host', self.host['host']), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -125,9 +134,12 @@ class TestHostSet(TestHost): self.assertIsNone(result) body = {'status': 'enable', 'maintenance_mode': 'disable'} - self.host_mock.update.assert_called_with(self.host.host, body) + h_mock.assert_called_with(self.host['host'], body) +@mock.patch( + 'openstackclient.api.compute_v2.APIv2.host_show' +) class TestHostShow(TestHost): host = compute_fakes.FakeHost.create_one_host() @@ -139,22 +151,22 @@ class TestHostShow(TestHost): 'Memory MB', 'Disk GB', ) + data = [( - host.host, - host.project, - host.cpu, - host.memory_mb, - host.disk_gb, + host['host'], + host['project'], + host['cpu'], + host['memory_mb'], + host['disk_gb'], )] def setUp(self): super(TestHostShow, self).setUp() - self.host_mock.get.return_value = [self.host] - self.cmd = host.ShowHost(self.app, None) - def test_host_show_no_option(self): + def test_host_show_no_option(self, h_mock): + h_mock.host_show.return_value = [self.host] arglist = [] verifylist = [] @@ -162,18 +174,19 @@ class TestHostShow(TestHost): self.assertRaises(tests_utils.ParserException, self.check_parser, self.cmd, arglist, verifylist) - def test_host_show_with_option(self): + def test_host_show_with_option(self, h_mock): + h_mock.return_value = [self.host] arglist = [ - self.host.host_name, + self.host['host_name'], ] verifylist = [ - ('host', self.host.host_name), + ('host', self.host['host_name']), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) - self.host_mock.get.assert_called_with(self.host.host_name) + h_mock.assert_called_with(self.host['host_name']) self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py index c4e125ba..87c9a985 100644 --- a/openstackclient/tests/unit/compute/v2/test_server.py +++ b/openstackclient/tests/unit/compute/v2/test_server.py @@ -141,48 +141,148 @@ class TestServerAddFixedIP(TestServer): self._test_server_add_fixed_ip(extralist, '5.6.7.8') -class TestServerAddFloatingIP(TestServer): +@mock.patch( + 'openstackclient.api.compute_v2.APIv2.floating_ip_add' +) +class TestServerAddFloatingIPCompute(compute_fakes.TestComputev2): def setUp(self): - super(TestServerAddFloatingIP, self).setUp() + super(TestServerAddFloatingIPCompute, self).setUp() + + self.app.client_manager.network_endpoint_enabled = False # Get the command object to test self.cmd = server.AddFloatingIP(self.app, None) - # Set add_floating_ip method to be tested. - self.methods = { - 'add_floating_ip': None, - } + def test_server_add_floating_ip_default(self, fip_mock): + _floating_ip = compute_fakes.FakeFloatingIP.create_one_floating_ip() + arglist = [ + 'server1', + _floating_ip['ip'], + ] + verifylist = [ + ('server', 'server1'), + ('ip_address', _floating_ip['ip']), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) - self.find_port = mock.Mock() - self.app.client_manager.network.find_port = self.find_port + self.cmd.take_action(parsed_args) - def _test_server_add_floating_ip(self, extralist, fixed_ip_address): - servers = self.setup_servers_mock(count=1) + fip_mock.assert_called_once_with( + 'server1', + _floating_ip['ip'], + fixed_address=None, + ) + def test_server_add_floating_ip_fixed(self, fip_mock): + _floating_ip = compute_fakes.FakeFloatingIP.create_one_floating_ip() arglist = [ - servers[0].id, - '1.2.3.4', - ] + extralist + '--fixed-ip-address', _floating_ip['fixed_ip'], + 'server1', + _floating_ip['ip'], + ] verifylist = [ - ('server', servers[0].id), - ('ip_address', '1.2.3.4'), - ('fixed_ip_address', fixed_ip_address), + ('fixed_ip_address', _floating_ip['fixed_ip']), + ('server', 'server1'), + ('ip_address', _floating_ip['ip']), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - result = self.cmd.take_action(parsed_args) + self.cmd.take_action(parsed_args) - servers[0].add_floating_ip.assert_called_once_with('1.2.3.4', - fixed_ip_address) - self.assertIsNone(result) + fip_mock.assert_called_once_with( + 'server1', + _floating_ip['ip'], + fixed_address=_floating_ip['fixed_ip'], + ) - def test_server_add_floating_ip(self): - self._test_server_add_floating_ip([], None) - def test_server_add_floating_ip_to_fixed_ip(self): - extralist = ['--fixed-ip-address', '5.6.7.8'] - self._test_server_add_floating_ip(extralist, '5.6.7.8') +class TestServerAddFloatingIPNetwork( + TestServer, + network_fakes.TestNetworkV2, +): + + def setUp(self): + super(TestServerAddFloatingIPNetwork, self).setUp() + + self.app.client_manager.network = mock.Mock() + self.network = self.app.client_manager.network + self.network.update_ip = mock.Mock(return_value=None) + + # Get the command object to test + self.cmd = server.AddFloatingIP(self.app, self.namespace) + + def test_server_add_floating_ip_default(self): + _server = compute_fakes.FakeServer.create_one_server() + self.servers_mock.get.return_value = _server + _port = network_fakes.FakePort.create_one_port() + _floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip() + self.network.find_ip = mock.Mock(return_value=_floating_ip) + self.network.ports = mock.Mock(return_value=[_port]) + arglist = [ + _server.id, + _floating_ip['ip'], + ] + verifylist = [ + ('server', _server.id), + ('ip_address', _floating_ip['ip']), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.cmd.take_action(parsed_args) + + attrs = { + 'port_id': _port.id, + } + + self.network.find_ip.assert_called_once_with( + _floating_ip['ip'], + ignore_missing=False, + ) + self.network.ports.assert_called_once_with( + device_id=_server.id, + ) + self.network.update_ip.assert_called_once_with( + _floating_ip, + **attrs + ) + + def test_server_add_floating_ip_fixed(self): + _server = compute_fakes.FakeServer.create_one_server() + self.servers_mock.get.return_value = _server + _port = network_fakes.FakePort.create_one_port() + _floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip() + self.network.find_ip = mock.Mock(return_value=_floating_ip) + self.network.ports = mock.Mock(return_value=[_port]) + arglist = [ + '--fixed-ip-address', _floating_ip['fixed_ip'], + _server.id, + _floating_ip['ip'], + ] + verifylist = [ + ('fixed_ip_address', _floating_ip['fixed_ip']), + ('server', _server.id), + ('ip_address', _floating_ip['ip']), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.cmd.take_action(parsed_args) + + attrs = { + 'port_id': _port.id, + } + + self.network.find_ip.assert_called_once_with( + _floating_ip['ip'], + ignore_missing=False, + ) + self.network.ports.assert_called_once_with( + device_id=_server.id, + ) + self.network.update_ip.assert_called_once_with( + _floating_ip, + **attrs + ) class TestServerAddPort(TestServer): @@ -2302,36 +2402,80 @@ class TestServerRescue(TestServer): self.server.rescue.assert_called_with(image=None, password=password) -class TestServerRemoveFloatingIP(TestServer): +@mock.patch( + 'openstackclient.api.compute_v2.APIv2.floating_ip_remove' +) +class TestServerRemoveFloatingIPCompute(compute_fakes.TestComputev2): def setUp(self): - super(TestServerRemoveFloatingIP, self).setUp() + super(TestServerRemoveFloatingIPCompute, self).setUp() + + self.app.client_manager.network_endpoint_enabled = False # Get the command object to test self.cmd = server.RemoveFloatingIP(self.app, None) - # Set unshelve method to be tested. - self.methods = { - 'remove_floating_ip': None, - } + def test_server_remove_floating_ip(self, fip_mock): + _floating_ip = compute_fakes.FakeFloatingIP.create_one_floating_ip() - def test_server_remove_floating_ip(self): - servers = self.setup_servers_mock(count=1) + arglist = [ + 'server1', + _floating_ip['ip'], + ] + verifylist = [ + ('server', 'server1'), + ('ip_address', _floating_ip['ip']), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.cmd.take_action(parsed_args) + + fip_mock.assert_called_once_with( + 'server1', + _floating_ip['ip'], + ) + + +class TestServerRemoveFloatingIPNetwork(network_fakes.TestNetworkV2): + + def setUp(self): + super(TestServerRemoveFloatingIPNetwork, self).setUp() + + self.app.client_manager.network = mock.Mock() + self.network = self.app.client_manager.network + self.network.update_ip = mock.Mock(return_value=None) + + # Get the command object to test + self.cmd = server.RemoveFloatingIP(self.app, self.namespace) + def test_server_remove_floating_ip_default(self): + _server = compute_fakes.FakeServer.create_one_server() + _floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip() + self.network.find_ip = mock.Mock(return_value=_floating_ip) arglist = [ - servers[0].id, - '1.2.3.4', + _server.id, + _floating_ip['ip'], ] verifylist = [ - ('server', servers[0].id), - ('ip_address', '1.2.3.4'), + ('server', _server.id), + ('ip_address', _floating_ip['ip']), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - result = self.cmd.take_action(parsed_args) + self.cmd.take_action(parsed_args) - servers[0].remove_floating_ip.assert_called_once_with('1.2.3.4') - self.assertIsNone(result) + attrs = { + 'port_id': None, + } + + self.network.find_ip.assert_called_once_with( + _floating_ip['ip'], + ignore_missing=False, + ) + self.network.update_ip.assert_called_once_with( + _floating_ip, + **attrs + ) class TestServerRemovePort(TestServer): |