Merge "Adding description for testcases - compute part10"

This commit is contained in:
Zuul 2020-09-09 16:41:58 +00:00 committed by Gerrit Code Review
commit 2c306e295d
9 changed files with 145 additions and 64 deletions

View File

@ -20,6 +20,8 @@ from tempest.lib import exceptions as lib_exc
class ListServersNegativeTestJSON(base.BaseV2ComputeTest): class ListServersNegativeTestJSON(base.BaseV2ComputeTest):
"""Negative tests of listing servers"""
create_default_network = True create_default_network = True
@classmethod @classmethod
@ -45,7 +47,7 @@ class ListServersNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('24a26f1a-1ddc-4eea-b0d7-a90cc874ad8f') @decorators.idempotent_id('24a26f1a-1ddc-4eea-b0d7-a90cc874ad8f')
def test_list_servers_with_a_deleted_server(self): def test_list_servers_with_a_deleted_server(self):
# Verify deleted servers do not show by default in list servers """Test that deleted servers do not show by default in list servers"""
# List servers and verify server not returned # List servers and verify server not returned
body = self.client.list_servers() body = self.client.list_servers()
servers = body['servers'] servers = body['servers']
@ -56,7 +58,7 @@ class ListServersNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('ff01387d-c7ad-47b4-ae9e-64fa214638fe') @decorators.idempotent_id('ff01387d-c7ad-47b4-ae9e-64fa214638fe')
def test_list_servers_by_non_existing_image(self): def test_list_servers_by_non_existing_image(self):
# Listing servers for a non existing image returns empty list """Test listing servers for a non existing image returns empty list"""
body = self.client.list_servers(image='non_existing_image') body = self.client.list_servers(image='non_existing_image')
servers = body['servers'] servers = body['servers']
self.assertEmpty(servers) self.assertEmpty(servers)
@ -64,7 +66,7 @@ class ListServersNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('5913660b-223b-44d4-a651-a0fbfd44ca75') @decorators.idempotent_id('5913660b-223b-44d4-a651-a0fbfd44ca75')
def test_list_servers_by_non_existing_flavor(self): def test_list_servers_by_non_existing_flavor(self):
# Listing servers by non existing flavor returns empty list """Test listing servers by non existing flavor returns empty list"""
body = self.client.list_servers(flavor='non_existing_flavor') body = self.client.list_servers(flavor='non_existing_flavor')
servers = body['servers'] servers = body['servers']
self.assertEmpty(servers) self.assertEmpty(servers)
@ -72,7 +74,12 @@ class ListServersNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('e2c77c4a-000a-4af3-a0bd-629a328bde7c') @decorators.idempotent_id('e2c77c4a-000a-4af3-a0bd-629a328bde7c')
def test_list_servers_by_non_existing_server_name(self): def test_list_servers_by_non_existing_server_name(self):
# Listing servers for a non existent server name returns empty list """Test listing servers for a non existent server name
Listing servers for a non existent server name should return empty
list.
"""
body = self.client.list_servers(name='non_existing_server_name') body = self.client.list_servers(name='non_existing_server_name')
servers = body['servers'] servers = body['servers']
self.assertEmpty(servers) self.assertEmpty(servers)
@ -80,9 +87,13 @@ class ListServersNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('fcdf192d-0f74-4d89-911f-1ec002b822c4') @decorators.idempotent_id('fcdf192d-0f74-4d89-911f-1ec002b822c4')
def test_list_servers_status_non_existing(self): def test_list_servers_status_non_existing(self):
# When invalid status is specified, up to microversion 2.37, """Test listing servers with non existing status
# an empty list is returned, and starting from microversion 2.38,
# a 400 error is returned in that case. When invalid status is specified, up to microversion 2.37,
an empty list is returned, and starting from microversion 2.38,
a 400 error is returned in that case.
"""
if self.is_requested_microversion_compatible('2.37'): if self.is_requested_microversion_compatible('2.37'):
body = self.client.list_servers(status='non_existing_status') body = self.client.list_servers(status='non_existing_status')
servers = body['servers'] servers = body['servers']
@ -94,6 +105,12 @@ class ListServersNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('d47c17fb-eebd-4287-8e95-f20a7e627b18') @decorators.idempotent_id('d47c17fb-eebd-4287-8e95-f20a7e627b18')
def test_list_servers_by_limits_greater_than_actual_count(self): def test_list_servers_by_limits_greater_than_actual_count(self):
"""Test listing servers by limit greater than actual count
Listing servers by limit greater than actual count should return
all servers.
"""
# Gather the complete list of servers in the project for reference # Gather the complete list of servers in the project for reference
full_list = self.client.list_servers()['servers'] full_list = self.client.list_servers()['servers']
# List servers by specifying a greater value for limit # List servers by specifying a greater value for limit
@ -104,21 +121,21 @@ class ListServersNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('679bc053-5e70-4514-9800-3dfab1a380a6') @decorators.idempotent_id('679bc053-5e70-4514-9800-3dfab1a380a6')
def test_list_servers_by_limits_pass_string(self): def test_list_servers_by_limits_pass_string(self):
# Return an error if a string value is passed for limit """Test listing servers by non-integer limit should fail"""
self.assertRaises(lib_exc.BadRequest, self.client.list_servers, self.assertRaises(lib_exc.BadRequest, self.client.list_servers,
limit='testing') limit='testing')
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('62610dd9-4713-4ee0-8beb-fd2c1aa7f950') @decorators.idempotent_id('62610dd9-4713-4ee0-8beb-fd2c1aa7f950')
def test_list_servers_by_limits_pass_negative_value(self): def test_list_servers_by_limits_pass_negative_value(self):
# Return an error if a negative value for limit is passed """Test listing servers by negative limit should fail"""
self.assertRaises(lib_exc.BadRequest, self.client.list_servers, self.assertRaises(lib_exc.BadRequest, self.client.list_servers,
limit=-1) limit=-1)
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('87d12517-e20a-4c9c-97b6-dd1628d6d6c9') @decorators.idempotent_id('87d12517-e20a-4c9c-97b6-dd1628d6d6c9')
def test_list_servers_by_changes_since_invalid_date(self): def test_list_servers_by_changes_since_invalid_date(self):
# Return an error when invalid date format is passed """Test listing servers by invalid changes-since format should fail"""
params = {'changes-since': '2011/01/01'} params = {'changes-since': '2011/01/01'}
self.assertRaises(lib_exc.BadRequest, self.client.list_servers, self.assertRaises(lib_exc.BadRequest, self.client.list_servers,
**params) **params)
@ -126,7 +143,12 @@ class ListServersNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('74745ad8-b346-45b5-b9b8-509d7447fc1f') @decorators.idempotent_id('74745ad8-b346-45b5-b9b8-509d7447fc1f')
def test_list_servers_by_changes_since_future_date(self): def test_list_servers_by_changes_since_future_date(self):
# Return an empty list when a date in the future is passed. """Test listing servers by a future changes-since date
Return an empty list when a date in the future is passed as
changes-since value.
"""
# updated_at field may haven't been set at the point in the boot # updated_at field may haven't been set at the point in the boot
# process where build_request still exists, so add # process where build_request still exists, so add
# {'status': 'ACTIVE'} along with changes-since as filter. # {'status': 'ACTIVE'} along with changes-since as filter.
@ -138,7 +160,7 @@ class ListServersNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('93055106-2d34-46fe-af68-d9ddbf7ee570') @decorators.idempotent_id('93055106-2d34-46fe-af68-d9ddbf7ee570')
def test_list_servers_detail_server_is_deleted(self): def test_list_servers_detail_server_is_deleted(self):
# Server details are not listed for a deleted server """Test listing servers detail should not contain deleted server"""
body = self.client.list_servers(detail=True) body = self.client.list_servers(detail=True)
servers = body['servers'] servers = body['servers']
actual = [srv for srv in servers actual = [srv for srv in servers

View File

@ -19,11 +19,15 @@ from tempest.lib import decorators
class MultipleCreateTestJSON(base.BaseV2ComputeTest): class MultipleCreateTestJSON(base.BaseV2ComputeTest):
"""Test creating multiple servers in one request"""
create_default_network = True create_default_network = True
@decorators.idempotent_id('61e03386-89c3-449c-9bb1-a06f423fd9d1') @decorators.idempotent_id('61e03386-89c3-449c-9bb1-a06f423fd9d1')
def test_multiple_create(self): def test_multiple_create(self):
# Creating server with min_count=2, 2 servers will be created. """Test creating multiple servers in one request
Creating server with min_count=2, 2 servers will be created.
"""
tenant_network = self.get_tenant_network() tenant_network = self.get_tenant_network()
body, servers = compute.create_test_server( body, servers = compute.create_test_server(
self.os_primary, self.os_primary,
@ -40,8 +44,12 @@ class MultipleCreateTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('864777fb-2f1e-44e3-b5b9-3eb6fa84f2f7') @decorators.idempotent_id('864777fb-2f1e-44e3-b5b9-3eb6fa84f2f7')
def test_multiple_create_with_reservation_return(self): def test_multiple_create_with_reservation_return(self):
# Creating multiple servers with return_reservation_id=True, """Test creating multiple servers with return_reservation_id=True
# reservation_id will be returned.
Creating multiple servers with return_reservation_id=True,
reservation_id will be returned.
"""
body = self.create_test_server(wait_until='ACTIVE', body = self.create_test_server(wait_until='ACTIVE',
min_count=1, min_count=1,
max_count=2, max_count=2,

View File

@ -19,11 +19,12 @@ from tempest.lib import exceptions as lib_exc
class MultipleCreateNegativeTestJSON(base.BaseV2ComputeTest): class MultipleCreateNegativeTestJSON(base.BaseV2ComputeTest):
"""Negative tests of creating multiple servers in one request"""
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('daf29d8d-e928-4a01-9a8c-b129603f3fc0') @decorators.idempotent_id('daf29d8d-e928-4a01-9a8c-b129603f3fc0')
def test_min_count_less_than_one(self): def test_min_count_less_than_one(self):
# Creating server with min_count=0 should fail. """Test creating server with min_count=0 should fail"""
invalid_min_count = 0 invalid_min_count = 0
self.assertRaises(lib_exc.BadRequest, self.create_test_server, self.assertRaises(lib_exc.BadRequest, self.create_test_server,
min_count=invalid_min_count) min_count=invalid_min_count)
@ -31,7 +32,7 @@ class MultipleCreateNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('999aa722-d624-4423-b813-0d1ac9884d7a') @decorators.idempotent_id('999aa722-d624-4423-b813-0d1ac9884d7a')
def test_min_count_non_integer(self): def test_min_count_non_integer(self):
# Creating server with non-integer min_count should fail. """Test creating server with non-integer min_count should fail"""
invalid_min_count = 2.5 invalid_min_count = 2.5
self.assertRaises(lib_exc.BadRequest, self.create_test_server, self.assertRaises(lib_exc.BadRequest, self.create_test_server,
min_count=invalid_min_count) min_count=invalid_min_count)
@ -39,7 +40,7 @@ class MultipleCreateNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('a6f9c2ab-e060-4b82-b23c-4532cb9390ff') @decorators.idempotent_id('a6f9c2ab-e060-4b82-b23c-4532cb9390ff')
def test_max_count_less_than_one(self): def test_max_count_less_than_one(self):
# Creating server with max_count < 1 shoudld fail. """Test creating server with max_count < 1 shoudld fail"""
invalid_max_count = 0 invalid_max_count = 0
self.assertRaises(lib_exc.BadRequest, self.create_test_server, self.assertRaises(lib_exc.BadRequest, self.create_test_server,
max_count=invalid_max_count) max_count=invalid_max_count)
@ -47,7 +48,7 @@ class MultipleCreateNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('9c5698d1-d7af-4c80-b971-9d403135eea2') @decorators.idempotent_id('9c5698d1-d7af-4c80-b971-9d403135eea2')
def test_max_count_non_integer(self): def test_max_count_non_integer(self):
# Creating server with non-integer max_count should fail. """Test creating server with non-integer max_count should fail"""
invalid_max_count = 2.5 invalid_max_count = 2.5
self.assertRaises(lib_exc.BadRequest, self.create_test_server, self.assertRaises(lib_exc.BadRequest, self.create_test_server,
max_count=invalid_max_count) max_count=invalid_max_count)
@ -55,7 +56,7 @@ class MultipleCreateNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('476da616-f1ef-4271-a9b1-b9fc87727cdf') @decorators.idempotent_id('476da616-f1ef-4271-a9b1-b9fc87727cdf')
def test_max_count_less_than_min_count(self): def test_max_count_less_than_min_count(self):
# Creating server with max_count less than min_count should fail. """Test creating server with max_count < min_count should fail"""
min_count = 3 min_count = 3
max_count = 2 max_count = 2
self.assertRaises(lib_exc.BadRequest, self.create_test_server, self.assertRaises(lib_exc.BadRequest, self.create_test_server,

View File

@ -18,6 +18,8 @@ from tempest.lib import decorators
class ServerMetadataTestJSON(base.BaseV2ComputeTest): class ServerMetadataTestJSON(base.BaseV2ComputeTest):
"""Test server metadata"""
create_default_network = True create_default_network = True
@classmethod @classmethod
@ -37,7 +39,10 @@ class ServerMetadataTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('479da087-92b3-4dcf-aeb3-fd293b2d14ce') @decorators.idempotent_id('479da087-92b3-4dcf-aeb3-fd293b2d14ce')
def test_list_server_metadata(self): def test_list_server_metadata(self):
# All metadata key/value pairs for a server should be returned """Test listing server metadata
All metadata key/value pairs for a server should be returned.
"""
resp_metadata = (self.client.list_server_metadata(self.server['id']) resp_metadata = (self.client.list_server_metadata(self.server['id'])
['metadata']) ['metadata'])
@ -47,7 +52,10 @@ class ServerMetadataTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('211021f6-21de-4657-a68f-908878cfe251') @decorators.idempotent_id('211021f6-21de-4657-a68f-908878cfe251')
def test_set_server_metadata(self): def test_set_server_metadata(self):
# The server's metadata should be replaced with the provided values """Test setting server metadata
The server's metadata should be replaced with the provided values
"""
# Create a new set of metadata for the server # Create a new set of metadata for the server
req_metadata = {'meta2': 'data2', 'meta3': 'data3'} req_metadata = {'meta2': 'data2', 'meta3': 'data3'}
self.client.set_server_metadata(self.server['id'], req_metadata) self.client.set_server_metadata(self.server['id'], req_metadata)
@ -60,8 +68,10 @@ class ServerMetadataTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('344d981e-0c33-4997-8a5d-6c1d803e4134') @decorators.idempotent_id('344d981e-0c33-4997-8a5d-6c1d803e4134')
def test_update_server_metadata(self): def test_update_server_metadata(self):
# The server's metadata values should be updated to the """Test updating server metadata
# provided values
The server's metadata values should be updated to the provided values.
"""
meta = {'key1': 'alt1', 'key3': 'value3'} meta = {'key1': 'alt1', 'key3': 'value3'}
self.client.update_server_metadata(self.server['id'], meta) self.client.update_server_metadata(self.server['id'], meta)
@ -73,8 +83,11 @@ class ServerMetadataTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('0f58d402-e34a-481d-8af8-b392b17426d9') @decorators.idempotent_id('0f58d402-e34a-481d-8af8-b392b17426d9')
def test_update_metadata_empty_body(self): def test_update_metadata_empty_body(self):
# The original metadata should not be lost if empty metadata body is """Test updating server metadata to empty values
# passed
The original server metadata should not be lost if empty metadata
body is passed.
"""
meta = {} meta = {}
self.client.update_server_metadata(self.server['id'], meta) self.client.update_server_metadata(self.server['id'], meta)
resp_metadata = (self.client.list_server_metadata(self.server['id']) resp_metadata = (self.client.list_server_metadata(self.server['id'])
@ -84,15 +97,19 @@ class ServerMetadataTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('3043c57d-7e0e-49a6-9a96-ad569c265e6a') @decorators.idempotent_id('3043c57d-7e0e-49a6-9a96-ad569c265e6a')
def test_get_server_metadata_item(self): def test_get_server_metadata_item(self):
# The value for a specific metadata key should be returned """Test getting specific server metadata item"""
meta = self.client.show_server_metadata_item(self.server['id'], meta = self.client.show_server_metadata_item(self.server['id'],
'key2')['meta'] 'key2')['meta']
self.assertEqual('value2', meta['key2']) self.assertEqual('value2', meta['key2'])
@decorators.idempotent_id('58c02d4f-5c67-40be-8744-d3fa5982eb1c') @decorators.idempotent_id('58c02d4f-5c67-40be-8744-d3fa5982eb1c')
def test_set_server_metadata_item(self): def test_set_server_metadata_item(self):
# The item's value should be updated to the provided value """Test updating specific server metadata item
# Update the metadata value
The metadata item's value should be updated to the provided value.
"""
# Update the metadata value.
meta = {'nova': 'alt'} meta = {'nova': 'alt'}
self.client.set_server_metadata_item(self.server['id'], 'nova', meta) self.client.set_server_metadata_item(self.server['id'], 'nova', meta)
@ -104,7 +121,10 @@ class ServerMetadataTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('127642d6-4c7b-4486-b7cd-07265a378658') @decorators.idempotent_id('127642d6-4c7b-4486-b7cd-07265a378658')
def test_delete_server_metadata_item(self): def test_delete_server_metadata_item(self):
# The metadata value/key pair should be deleted from the server """Test deleting server metadata item
The metadata value/key pair should be deleted from the server.
"""
self.client.delete_server_metadata_item(self.server['id'], 'key1') self.client.delete_server_metadata_item(self.server['id'], 'key1')
# Verify the metadata item has been removed # Verify the metadata item has been removed

View File

@ -20,6 +20,8 @@ from tempest.lib import exceptions as lib_exc
class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest): class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
"""Negative tests of server metadata"""
create_default_network = True create_default_network = True
@classmethod @classmethod
@ -36,6 +38,7 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('fe114a8f-3a57-4eff-9ee2-4e14628df049') @decorators.idempotent_id('fe114a8f-3a57-4eff-9ee2-4e14628df049')
def test_server_create_metadata_key_too_long(self): def test_server_create_metadata_key_too_long(self):
"""Test creating server with too long metadata key should fail"""
# Attempt to start a server with a meta-data key that is > 255 # Attempt to start a server with a meta-data key that is > 255
# characters # characters
@ -52,7 +55,7 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('92431555-4d8b-467c-b95b-b17daa5e57ff') @decorators.idempotent_id('92431555-4d8b-467c-b95b-b17daa5e57ff')
def test_create_server_metadata_blank_key(self): def test_create_server_metadata_blank_key(self):
# Blank key should trigger an error. """Test creating server with blank metadata key should fail"""
meta = {'': 'data1'} meta = {'': 'data1'}
self.assertRaises(lib_exc.BadRequest, self.assertRaises(lib_exc.BadRequest,
self.create_test_server, self.create_test_server,
@ -61,6 +64,7 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('4d9cd7a3-2010-4b41-b8fe-3bbf0b169466') @decorators.idempotent_id('4d9cd7a3-2010-4b41-b8fe-3bbf0b169466')
def test_server_metadata_non_existent_server(self): def test_server_metadata_non_existent_server(self):
"""Test getting metadata item for a non existent server should fail"""
# GET on a non-existent server should not succeed # GET on a non-existent server should not succeed
non_existent_server_id = data_utils.rand_uuid() non_existent_server_id = data_utils.rand_uuid()
self.assertRaises(lib_exc.NotFound, self.assertRaises(lib_exc.NotFound,
@ -71,7 +75,7 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('f408e78e-3066-4097-9299-3b0182da812e') @decorators.idempotent_id('f408e78e-3066-4097-9299-3b0182da812e')
def test_list_server_metadata_non_existent_server(self): def test_list_server_metadata_non_existent_server(self):
# List metadata on a non-existent server should not succeed """Test listing metadata for a non existent server should fail"""
non_existent_server_id = data_utils.rand_uuid() non_existent_server_id = data_utils.rand_uuid()
self.assertRaises(lib_exc.NotFound, self.assertRaises(lib_exc.NotFound,
self.client.list_server_metadata, self.client.list_server_metadata,
@ -80,8 +84,10 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('0025fbd6-a4ba-4cde-b8c2-96805dcfdabc') @decorators.idempotent_id('0025fbd6-a4ba-4cde-b8c2-96805dcfdabc')
def test_wrong_key_passed_in_body(self): def test_wrong_key_passed_in_body(self):
# Raise BadRequest if key in uri does not match """Test setting server metadata item with wrong key in body
# the key passed in body.
Raise BadRequest if key in uri does not match the key passed in body.
"""
meta = {'testkey': 'testvalue'} meta = {'testkey': 'testvalue'}
self.assertRaises(lib_exc.BadRequest, self.assertRaises(lib_exc.BadRequest,
self.client.set_server_metadata_item, self.client.set_server_metadata_item,
@ -90,7 +96,7 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('0df38c2a-3d4e-4db5-98d8-d4d9fa843a12') @decorators.idempotent_id('0df38c2a-3d4e-4db5-98d8-d4d9fa843a12')
def test_set_metadata_non_existent_server(self): def test_set_metadata_non_existent_server(self):
# Set metadata on a non-existent server should not succeed """Test setting metadata for a non existent server should fail"""
non_existent_server_id = data_utils.rand_uuid() non_existent_server_id = data_utils.rand_uuid()
meta = {'meta1': 'data1'} meta = {'meta1': 'data1'}
self.assertRaises(lib_exc.NotFound, self.assertRaises(lib_exc.NotFound,
@ -101,7 +107,7 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('904b13dc-0ef2-4e4c-91cd-3b4a0f2f49d8') @decorators.idempotent_id('904b13dc-0ef2-4e4c-91cd-3b4a0f2f49d8')
def test_update_metadata_non_existent_server(self): def test_update_metadata_non_existent_server(self):
# An update should not happen for a non-existent server """Test updating metadata for a non existent server should fail"""
non_existent_server_id = data_utils.rand_uuid() non_existent_server_id = data_utils.rand_uuid()
meta = {'key1': 'value1', 'key2': 'value2'} meta = {'key1': 'value1', 'key2': 'value2'}
self.assertRaises(lib_exc.NotFound, self.assertRaises(lib_exc.NotFound,
@ -112,7 +118,7 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('a452f38c-05c2-4b47-bd44-a4f0bf5a5e48') @decorators.idempotent_id('a452f38c-05c2-4b47-bd44-a4f0bf5a5e48')
def test_update_metadata_with_blank_key(self): def test_update_metadata_with_blank_key(self):
# Blank key should trigger an error """Test updating server metadata to blank key should fail"""
meta = {'': 'data1'} meta = {'': 'data1'}
self.assertRaises(lib_exc.BadRequest, self.assertRaises(lib_exc.BadRequest,
self.client.update_server_metadata, self.client.update_server_metadata,
@ -121,7 +127,10 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('6bbd88e1-f8b3-424d-ba10-ae21c45ada8d') @decorators.idempotent_id('6bbd88e1-f8b3-424d-ba10-ae21c45ada8d')
def test_delete_metadata_non_existent_server(self): def test_delete_metadata_non_existent_server(self):
# Should not be able to delete metadata item from a non-existent server """Test deleting metadata item from a non existent server
Should not be able to delete metadata item from a non-existent server.
"""
non_existent_server_id = data_utils.rand_uuid() non_existent_server_id = data_utils.rand_uuid()
self.assertRaises(lib_exc.NotFound, self.assertRaises(lib_exc.NotFound,
self.client.delete_server_metadata_item, self.client.delete_server_metadata_item,
@ -131,9 +140,11 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('d8c0a210-a5c3-4664-be04-69d96746b547') @decorators.idempotent_id('d8c0a210-a5c3-4664-be04-69d96746b547')
def test_metadata_items_limit(self): def test_metadata_items_limit(self):
# A 403 Forbidden or 413 Overlimit (old behaviour) exception """Test set/update server metadata over limit should fail
# will be raised while exceeding metadata items limit for
# tenant. A 403 Forbidden or 413 Overlimit (old behaviour) exception
will be raised while exceeding metadata items limit for project.
"""
quota_set = self.quotas_client.show_quota_set( quota_set = self.quotas_client.show_quota_set(
self.tenant_id)['quota_set'] self.tenant_id)['quota_set']
quota_metadata = quota_set['metadata_items'] quota_metadata = quota_set['metadata_items']
@ -157,8 +168,7 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('96100343-7fa9-40d8-80fa-d29ef588ce1c') @decorators.idempotent_id('96100343-7fa9-40d8-80fa-d29ef588ce1c')
def test_set_server_metadata_blank_key(self): def test_set_server_metadata_blank_key(self):
# Raise a bad request error for blank key. """Test setting server metadata with blank key should fail"""
# set_server_metadata will replace all metadata with new value
meta = {'': 'data1'} meta = {'': 'data1'}
self.assertRaises(lib_exc.BadRequest, self.assertRaises(lib_exc.BadRequest,
self.client.set_server_metadata, self.client.set_server_metadata,
@ -167,8 +177,7 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('64a91aee-9723-4863-be44-4c9d9f1e7d0e') @decorators.idempotent_id('64a91aee-9723-4863-be44-4c9d9f1e7d0e')
def test_set_server_metadata_missing_metadata(self): def test_set_server_metadata_missing_metadata(self):
# Raise a bad request error for a missing metadata field """Test setting server metadata without metadata field should fail"""
# set_server_metadata will replace all metadata with new value
meta = {'meta1': 'data1'} meta = {'meta1': 'data1'}
self.assertRaises(lib_exc.BadRequest, self.assertRaises(lib_exc.BadRequest,
self.client.set_server_metadata, self.client.set_server_metadata,

View File

@ -19,6 +19,8 @@ from tempest.lib import decorators
class ServerPasswordTestJSON(base.BaseV2ComputeTest): class ServerPasswordTestJSON(base.BaseV2ComputeTest):
"""Test server password"""
create_default_network = True create_default_network = True
@classmethod @classmethod
@ -28,8 +30,10 @@ class ServerPasswordTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('f83b582f-62a8-4f22-85b0-0dee50ff783a') @decorators.idempotent_id('f83b582f-62a8-4f22-85b0-0dee50ff783a')
def test_get_server_password(self): def test_get_server_password(self):
"""Test getting password of a server"""
self.servers_client.show_password(self.server['id']) self.servers_client.show_password(self.server['id'])
@decorators.idempotent_id('f8229e8b-b625-4493-800a-bde86ac611ea') @decorators.idempotent_id('f8229e8b-b625-4493-800a-bde86ac611ea')
def test_delete_server_password(self): def test_delete_server_password(self):
"""Test deleting password from a server"""
self.servers_client.delete_password(self.server['id']) self.servers_client.delete_password(self.server['id'])

View File

@ -25,6 +25,7 @@ CONF = config.CONF
class ServersTestJSON(base.BaseV2ComputeTest): class ServersTestJSON(base.BaseV2ComputeTest):
"""Test servers API"""
create_default_network = True create_default_network = True
@classmethod @classmethod
@ -37,8 +38,11 @@ class ServersTestJSON(base.BaseV2ComputeTest):
enable_instance_password, enable_instance_password,
'Instance password not available.') 'Instance password not available.')
def test_create_server_with_admin_password(self): def test_create_server_with_admin_password(self):
# If an admin password is provided on server creation, the server's """Test creating server with admin password
# root password should be set to that password.
If an admin password is provided on server creation, the server's
root password should be set to that password.
"""
server = self.create_test_server(adminPass='testpassword') server = self.create_test_server(adminPass='testpassword')
self.addCleanup(self.delete_server, server['id']) self.addCleanup(self.delete_server, server['id'])
@ -47,8 +51,7 @@ class ServersTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('8fea6be7-065e-47cf-89b8-496e6f96c699') @decorators.idempotent_id('8fea6be7-065e-47cf-89b8-496e6f96c699')
def test_create_with_existing_server_name(self): def test_create_with_existing_server_name(self):
# Creating a server with a name that already exists is allowed """Test creating a server with already existing name is allowed"""
# TODO(sdague): clear out try, we do cleanup one layer up # TODO(sdague): clear out try, we do cleanup one layer up
server_name = data_utils.rand_name( server_name = data_utils.rand_name(
self.__class__.__name__ + '-server') self.__class__.__name__ + '-server')
@ -69,8 +72,7 @@ class ServersTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('f9e15296-d7f9-4e62-b53f-a04e89160833') @decorators.idempotent_id('f9e15296-d7f9-4e62-b53f-a04e89160833')
def test_create_specify_keypair(self): def test_create_specify_keypair(self):
# Specify a keypair while creating a server """Test creating server with keypair"""
key_name = data_utils.rand_name('key') key_name = data_utils.rand_name('key')
self.keypairs_client.create_keypair(name=key_name) self.keypairs_client.create_keypair(name=key_name)
self.addCleanup(self.keypairs_client.delete_keypair, key_name) self.addCleanup(self.keypairs_client.delete_keypair, key_name)
@ -97,7 +99,7 @@ class ServersTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('5e6ccff8-349d-4852-a8b3-055df7988dd2') @decorators.idempotent_id('5e6ccff8-349d-4852-a8b3-055df7988dd2')
def test_update_server_name(self): def test_update_server_name(self):
# The server name should be changed to the provided value """Test updating server name to the provided value"""
server = self.create_test_server(wait_until='ACTIVE') server = self.create_test_server(wait_until='ACTIVE')
self.addCleanup(self.delete_server, server['id']) self.addCleanup(self.delete_server, server['id'])
# Update instance name with non-ASCII characters # Update instance name with non-ASCII characters
@ -115,7 +117,7 @@ class ServersTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('89b90870-bc13-4b73-96af-f9d4f2b70077') @decorators.idempotent_id('89b90870-bc13-4b73-96af-f9d4f2b70077')
def test_update_access_server_address(self): def test_update_access_server_address(self):
# The server's access addresses should reflect the provided values """Test updating server's access addresses to the provided value"""
server = self.create_test_server(wait_until='ACTIVE') server = self.create_test_server(wait_until='ACTIVE')
self.addCleanup(self.delete_server, server['id']) self.addCleanup(self.delete_server, server['id'])
@ -132,7 +134,7 @@ class ServersTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('38fb1d02-c3c5-41de-91d3-9bc2025a75eb') @decorators.idempotent_id('38fb1d02-c3c5-41de-91d3-9bc2025a75eb')
def test_create_server_with_ipv6_addr_only(self): def test_create_server_with_ipv6_addr_only(self):
# Create a server without an IPv4 address(only IPv6 address). """Test creating server with ipv6 address only(no ipv4 address)"""
server = self.create_test_server(accessIPv6='2001:2001::3', server = self.create_test_server(accessIPv6='2001:2001::3',
wait_until='ACTIVE') wait_until='ACTIVE')
self.addCleanup(self.delete_server, server['id']) self.addCleanup(self.delete_server, server['id'])
@ -142,17 +144,22 @@ class ServersTestJSON(base.BaseV2ComputeTest):
@decorators.related_bug('1730756') @decorators.related_bug('1730756')
@decorators.idempotent_id('defbaca5-d611-49f5-ae21-56ee25d2db49') @decorators.idempotent_id('defbaca5-d611-49f5-ae21-56ee25d2db49')
def test_create_server_specify_multibyte_character_name(self): def test_create_server_specify_multibyte_character_name(self):
# prefix character is: """Test creating server with multi character name
# http://unicode.org/cldr/utility/character.jsp?a=20A1
# We use a string with 3 byte utf-8 character due to nova prefix character is:
# will return 400(Bad Request) if we attempt to send a name which has http://unicode.org/cldr/utility/character.jsp?a=20A1
# 4 byte utf-8 character.
We use a string with 3 byte utf-8 character due to nova
will return 400(Bad Request) if we attempt to send a name which has
4 byte utf-8 character.
"""
utf8_name = data_utils.rand_name(b'\xe2\x82\xa1'.decode('utf-8')) utf8_name = data_utils.rand_name(b'\xe2\x82\xa1'.decode('utf-8'))
self.create_test_server(name=utf8_name, wait_until='ACTIVE') self.create_test_server(name=utf8_name, wait_until='ACTIVE')
class ServerShowV247Test(base.BaseV2ComputeTest): class ServerShowV247Test(base.BaseV2ComputeTest):
"""Test servers API with compute microversion greater than 2.46"""
min_microversion = '2.47' min_microversion = '2.47'
max_microversion = 'latest' max_microversion = 'latest'
@ -164,12 +171,14 @@ class ServerShowV247Test(base.BaseV2ComputeTest):
@decorators.idempotent_id('88b0bdb2-494c-11e7-a919-92ebcb67fe33') @decorators.idempotent_id('88b0bdb2-494c-11e7-a919-92ebcb67fe33')
def test_show_server(self): def test_show_server(self):
"""Test getting server detail"""
server = self.create_test_server() server = self.create_test_server()
# All fields will be checked by API schema # All fields will be checked by API schema
self.servers_client.show_server(server['id']) self.servers_client.show_server(server['id'])
@decorators.idempotent_id('8de397c2-57d0-4b90-aa30-e5d668f21a8b') @decorators.idempotent_id('8de397c2-57d0-4b90-aa30-e5d668f21a8b')
def test_update_rebuild_list_server(self): def test_update_rebuild_list_server(self):
"""Test update/rebuild/list server"""
server = self.create_test_server() server = self.create_test_server()
# Checking update API response schema # Checking update API response schema
self.servers_client.update_server(server['id']) self.servers_client.update_server(server['id'])
@ -184,6 +193,8 @@ class ServerShowV247Test(base.BaseV2ComputeTest):
class ServerShowV263Test(base.BaseV2ComputeTest): class ServerShowV263Test(base.BaseV2ComputeTest):
"""Test servers API with compute microversion greater than 2.62"""
min_microversion = '2.63' min_microversion = '2.63'
max_microversion = 'latest' max_microversion = 'latest'
@ -195,6 +206,7 @@ class ServerShowV263Test(base.BaseV2ComputeTest):
'required to test image certificate validation.') 'required to test image certificate validation.')
@decorators.idempotent_id('71b8e3d5-11d2-494f-b917-b094a4afed3c') @decorators.idempotent_id('71b8e3d5-11d2-494f-b917-b094a4afed3c')
def test_show_update_rebuild_list_server(self): def test_show_update_rebuild_list_server(self):
"""Test show/update/rebuild/list server"""
trusted_certs = CONF.compute.certified_image_trusted_certs trusted_certs = CONF.compute.certified_image_trusted_certs
server = self.create_test_server( server = self.create_test_server(
image_id=CONF.compute.certified_image_ref, image_id=CONF.compute.certified_image_ref,

View File

@ -28,6 +28,8 @@ CONF = config.CONF
# TODO(mriedem): Remove this test class once the nova queens branch goes into # TODO(mriedem): Remove this test class once the nova queens branch goes into
# extended maintenance mode. # extended maintenance mode.
class VirtualInterfacesTestJSON(base.BaseV2ComputeTest): class VirtualInterfacesTestJSON(base.BaseV2ComputeTest):
"""Test virtual interfaces API with compute microversion less than 2.44"""
max_microversion = '2.43' max_microversion = '2.43'
depends_on_nova_network = True depends_on_nova_network = True
@ -47,9 +49,7 @@ class VirtualInterfacesTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('96c4e2ef-5e4d-4d7f-87f5-fed6dca18016') @decorators.idempotent_id('96c4e2ef-5e4d-4d7f-87f5-fed6dca18016')
@utils.services('network') @utils.services('network')
def test_list_virtual_interfaces(self): def test_list_virtual_interfaces(self):
# Positive test:Should be able to GET the virtual interfaces list """Test listing virtual interfaces of a server"""
# for a given server_id
if CONF.service_available.neutron: if CONF.service_available.neutron:
with testtools.ExpectedException(exceptions.BadRequest): with testtools.ExpectedException(exceptions.BadRequest):
self.client.list_virtual_interfaces(self.server['id']) self.client.list_virtual_interfaces(self.server['id'])

View File

@ -23,6 +23,12 @@ from tempest.lib import exceptions as lib_exc
# TODO(mriedem): Remove this test class once the nova queens branch goes into # TODO(mriedem): Remove this test class once the nova queens branch goes into
# extended maintenance mode. # extended maintenance mode.
class VirtualInterfacesNegativeTestJSON(base.BaseV2ComputeTest): class VirtualInterfacesNegativeTestJSON(base.BaseV2ComputeTest):
"""Negative tests of virtual interfaces API
Negative tests of virtual interfaces API for compute microversion less
than 2.44.
"""
max_microversion = '2.43' max_microversion = '2.43'
depends_on_nova_network = True depends_on_nova_network = True
@ -37,8 +43,7 @@ class VirtualInterfacesNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('64ebd03c-1089-4306-93fa-60f5eb5c803c') @decorators.idempotent_id('64ebd03c-1089-4306-93fa-60f5eb5c803c')
@utils.services('network') @utils.services('network')
def test_list_virtual_interfaces_invalid_server_id(self): def test_list_virtual_interfaces_invalid_server_id(self):
# Negative test: Should not be able to GET virtual interfaces """Test listing virtual interfaces of an invalid server should fail"""
# for an invalid server_id
invalid_server_id = data_utils.rand_uuid() invalid_server_id = data_utils.rand_uuid()
self.assertRaises(lib_exc.NotFound, self.assertRaises(lib_exc.NotFound,
self.servers_client.list_virtual_interfaces, self.servers_client.list_virtual_interfaces,