summaryrefslogtreecommitdiff
path: root/novaclient/tests
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-08-02 15:47:54 +0000
committerGerrit Code Review <review@openstack.org>2022-08-02 15:47:54 +0000
commit89a76edc8d68212d65b6189669f9a7207f09655d (patch)
treee0be45f4260973f07d7339ac64ab9a07875bc8d5 /novaclient/tests
parent4d4cdb49922b5e27ab1f892a5a5f7ac5994eedf1 (diff)
parentee9b277c5f442f299b853118c900c3ee2996c67a (diff)
downloadpython-novaclient-89a76edc8d68212d65b6189669f9a7207f09655d.tar.gz
Merge "Microversion 2.91: Support specifying destination host to unshelve"
Diffstat (limited to 'novaclient/tests')
-rw-r--r--novaclient/tests/unit/fixture_data/servers.py11
-rw-r--r--novaclient/tests/unit/v2/fakes.py2
-rw-r--r--novaclient/tests/unit/v2/test_servers.py98
3 files changed, 109 insertions, 2 deletions
diff --git a/novaclient/tests/unit/fixture_data/servers.py b/novaclient/tests/unit/fixture_data/servers.py
index a8301548..8e53ecdb 100644
--- a/novaclient/tests/unit/fixture_data/servers.py
+++ b/novaclient/tests/unit/fixture_data/servers.py
@@ -439,6 +439,17 @@ class V1(Base):
elif action == 'lock':
return None
elif action == 'unshelve':
+ if api_version >= api_versions.APIVersion("2.91"):
+ # In 2.91 and above, we allow body to be one of these:
+ # {'unshelve': None}
+ # {'unshelve': {'availability_zone': <string>}}
+ # {'unshelve': {'availability_zone': None}} (Unpin az)
+ # {'unshelve': {'host': <fqdn>}}
+ # {'unshelve': {'availability_zone': <string>, 'host': <fqdn>}}
+ # {'unshelve': {'availability_zone': None, 'host': <fqdn>}}
+ if body[action] is not None:
+ for key in body[action].keys():
+ key in ['availability_zone', 'host']
return None
elif action == 'rebuild':
body = body[action]
diff --git a/novaclient/tests/unit/v2/fakes.py b/novaclient/tests/unit/v2/fakes.py
index 07216adc..059a7147 100644
--- a/novaclient/tests/unit/v2/fakes.py
+++ b/novaclient/tests/unit/v2/fakes.py
@@ -835,7 +835,7 @@ class FakeSessionClient(base_client.SessionClient):
if self.api_version < api_versions.APIVersion("2.77"):
assert body[action] is None
else:
- # In 2.77 and above, we allow body to be one of these:
+ # In 2.77 to 2.91, we allow body to be one of these:
# {'unshelve': None}
# {'unshelve': {'availability_zone': 'foo-az'}}
if body[action] is not None:
diff --git a/novaclient/tests/unit/v2/test_servers.py b/novaclient/tests/unit/v2/test_servers.py
index 071ae5c1..93fefabf 100644
--- a/novaclient/tests/unit/v2/test_servers.py
+++ b/novaclient/tests/unit/v2/test_servers.py
@@ -1851,6 +1851,23 @@ class ServersV277Test(ServersV274Test):
api_version = "2.77"
+ def test_unshelve(self):
+ s = self.cs.servers.get(1234)
+ # Test going through the Server object.
+ ret = s.unshelve()
+ self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
+ self.assert_called(
+ 'POST',
+ '/servers/1234/action',
+ {'unshelve': None})
+ # Test going through the ServerManager directly.
+ ret = self.cs.servers.unshelve(s)
+ self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
+ self.assert_called(
+ 'POST',
+ '/servers/1234/action',
+ {'unshelve': None})
+
def test_unshelve_with_az(self):
s = self.cs.servers.get(1234)
# Test going through the Server object.
@@ -1883,7 +1900,7 @@ class ServersV277Test(ServersV274Test):
str(ex))
-class ServersV278Test(ServersV273Test):
+class ServersV278Test(ServersV277Test):
api_version = "2.78"
@@ -1992,3 +2009,82 @@ class ServersV290Test(ServersV278Test):
s.update,
hostname='new-hostname')
self.assertIn('hostname', str(ex))
+
+
+class ServersV291Test(ServersV290Test):
+
+ api_version = "2.91"
+
+ def test_unshelve_with_host(self):
+ s = self.cs.servers.get(1234)
+ # Test going through the Server object.
+ ret = s.unshelve(host='server1')
+ self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
+ self.assert_called(
+ 'POST',
+ '/servers/1234/action',
+ {'unshelve': {'host': 'server1'}})
+ # Test going through the ServerManager directly.
+ ret = self.cs.servers.unshelve(s, host='server1')
+ self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
+ self.assert_called(
+ 'POST',
+ '/servers/1234/action',
+ {'unshelve': {'host': 'server1'}})
+
+ def test_unshelve_server_with_az_and_host(self):
+ s = self.cs.servers.get(1234)
+ # Test going through the Server object.
+ ret = s.unshelve(host='server1', availability_zone='foo-az')
+ self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
+ self.assert_called(
+ 'POST',
+ '/servers/1234/action',
+ {'unshelve': {'host': 'server1',
+ 'availability_zone': 'foo-az'}})
+ # Test going through the ServerManager directly.
+ ret = self.cs.servers.unshelve(
+ s, host='server1', availability_zone='foo-az')
+ self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
+ self.assert_called(
+ 'POST',
+ '/servers/1234/action',
+ {'unshelve': {'host': 'server1',
+ 'availability_zone': 'foo-az'}})
+
+ def test_unshelve_unpin_az(self):
+ s = self.cs.servers.get(1234)
+ # Test going through the Server object.
+ ret = s.unshelve(availability_zone=None)
+ self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
+ self.assert_called(
+ 'POST',
+ '/servers/1234/action',
+ {'unshelve': {'availability_zone': None}})
+ # Test going through the ServerManager directly.
+ ret = self.cs.servers.unshelve(s, availability_zone=None)
+ self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
+ self.assert_called(
+ 'POST',
+ '/servers/1234/action',
+ {'unshelve': {'availability_zone': None}})
+
+ def test_unshelve_server_with_host_and_unpin(self):
+ s = self.cs.servers.get(1234)
+ # Test going through the Server object.
+ ret = s.unshelve(availability_zone=None, host='server1')
+ self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
+ self.assert_called(
+ 'POST',
+ '/servers/1234/action',
+ {'unshelve': {'host': 'server1',
+ 'availability_zone': None}})
+ # Test going through the ServerManager directly.
+ ret = self.cs.servers.unshelve(
+ s, availability_zone=None, host='server1')
+ self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
+ self.assert_called(
+ 'POST',
+ '/servers/1234/action',
+ {'unshelve': {'host': 'server1',
+ 'availability_zone': None}})