Adding description for testcases - compute part10

When Tempest is used in customer site, often we are required to
provide a testcase list including testcase names and descriptions.
Now no this kind of doc is available, so we can add descriptions
with the format of doc string for every testcase, so later we
can generata such a testcase description list.

There are hundreds of testcases missing descriptions, so we can
add them gradually, and limit the modified files in one patch
for the convenience of reviewing.

Change-Id: I0ca6cbed5b2f8517096ed95e40c5e5766862c012
partially-implements: blueprint testcase-description
This commit is contained in:
zhufl 2020-08-13 10:38:40 +08:00
parent 24961f6244
commit ef323632da
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,