Use project_reader in compute volumes tests
Add reader client setup for volumes_extensions_client and snapshots_extensions_client to BaseV2ComputeTest.setup_clients() in tempest/api/compute/base.py. Update test files to use reader clients for read operations. Change-Id: I24feaaced466e7539895b45ff35ebc10229acc73 Signed-off-by: Jason Paroly <jparoly@redhat.com> Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -99,6 +99,16 @@ class BaseV2ComputeTest(api_version_utils.BaseMicroversionTest,
|
||||
cls.os_primary.volumes_extensions_client
|
||||
cls.snapshots_extensions_client =\
|
||||
cls.os_primary.snapshots_extensions_client
|
||||
if CONF.enforce_scope.nova and hasattr(cls, 'os_project_reader'):
|
||||
cls.reader_volumes_extensions_client = (
|
||||
cls.os_project_reader.volumes_extensions_client)
|
||||
cls.reader_snapshots_extensions_client = (
|
||||
cls.os_project_reader.snapshots_extensions_client)
|
||||
else:
|
||||
cls.reader_volumes_extensions_client = (
|
||||
cls.volumes_extensions_client)
|
||||
cls.reader_snapshots_extensions_client = (
|
||||
cls.snapshots_extensions_client)
|
||||
cls.interfaces_client = cls.os_primary.interfaces_client
|
||||
cls.availability_zone_client = cls.os_primary.availability_zone_client
|
||||
cls.agents_client = cls.os_primary.agents_client
|
||||
|
||||
@@ -42,6 +42,15 @@ class BaseAttachVolumeTest(base.BaseV2ComputeTest):
|
||||
cls.prepare_instance_network()
|
||||
super(BaseAttachVolumeTest, cls).setup_credentials()
|
||||
|
||||
@classmethod
|
||||
def setup_clients(cls):
|
||||
super(BaseAttachVolumeTest, cls).setup_clients()
|
||||
if CONF.enforce_scope.nova and hasattr(cls, 'os_project_reader'):
|
||||
cls.reader_volumes_client = (
|
||||
cls.os_project_reader.volumes_client_latest)
|
||||
else:
|
||||
cls.reader_volumes_client = cls.volumes_client
|
||||
|
||||
def _create_server(self):
|
||||
# Start a server and wait for it to become ready
|
||||
validation_resources = self.get_test_validation_resources(
|
||||
@@ -356,7 +365,7 @@ class AttachVolumeMultiAttachTest(BaseAttachVolumeTest):
|
||||
more attachments or 'available' state if there are no more attachments.
|
||||
"""
|
||||
# Count the number of attachments before starting the detach.
|
||||
volume = self.volumes_client.show_volume(volume_id)['volume']
|
||||
volume = self.reader_volumes_client.show_volume(volume_id)['volume']
|
||||
attachments = volume['attachments']
|
||||
wait_status = 'in-use' if len(attachments) > 1 else 'available'
|
||||
# Now detach the volume from the given server.
|
||||
@@ -418,7 +427,7 @@ class AttachVolumeMultiAttachTest(BaseAttachVolumeTest):
|
||||
|
||||
# List attachments from the volume and make sure the server uuids
|
||||
# are in that list.
|
||||
vol_attachments = self.volumes_client.show_volume(
|
||||
vol_attachments = self.reader_volumes_client.show_volume(
|
||||
volume['id'])['volume']['attachments']
|
||||
attached_server_ids = [attachment['server_id']
|
||||
for attachment in vol_attachments]
|
||||
|
||||
@@ -46,6 +46,7 @@ class VolumesSnapshotsTestJSON(base.BaseV2ComputeTest):
|
||||
super(VolumesSnapshotsTestJSON, cls).setup_clients()
|
||||
cls.volumes_client = cls.volumes_extensions_client
|
||||
cls.snapshots_client = cls.snapshots_extensions_client
|
||||
cls.reader_snapshots_client = cls.reader_snapshots_extensions_client
|
||||
|
||||
@decorators.idempotent_id('cd4ec87d-7825-450d-8040-6e2068f2da8f')
|
||||
def test_volume_snapshot_create_get_list_delete(self):
|
||||
@@ -72,10 +73,10 @@ class VolumesSnapshotsTestJSON(base.BaseV2ComputeTest):
|
||||
self.addCleanup(delete_snapshot, snapshot['id'])
|
||||
self.assertEqual(volume['id'], snapshot['volumeId'])
|
||||
# Get snapshot
|
||||
fetched_snapshot = self.snapshots_client.show_snapshot(
|
||||
fetched_snapshot = self.reader_snapshots_client.show_snapshot(
|
||||
snapshot['id'])['snapshot']
|
||||
self.assertEqual(s_name, fetched_snapshot['displayName'])
|
||||
self.assertEqual(volume['id'], fetched_snapshot['volumeId'])
|
||||
# Fetch all snapshots
|
||||
snapshots = self.snapshots_client.list_snapshots()['snapshots']
|
||||
snapshots = self.reader_snapshots_client.list_snapshots()['snapshots']
|
||||
self.assertIn(snapshot['id'], map(lambda x: x['id'], snapshots))
|
||||
|
||||
@@ -43,6 +43,7 @@ class VolumesGetTestJSON(base.BaseV2ComputeTest):
|
||||
def setup_clients(cls):
|
||||
super(VolumesGetTestJSON, cls).setup_clients()
|
||||
cls.volumes_client = cls.volumes_extensions_client
|
||||
cls.reader_volumes_client = cls.reader_volumes_extensions_client
|
||||
|
||||
@decorators.idempotent_id('f10f25eb-9775-4d9d-9cbe-1cf54dae9d5f')
|
||||
def test_volume_create_get_delete(self):
|
||||
@@ -59,7 +60,7 @@ class VolumesGetTestJSON(base.BaseV2ComputeTest):
|
||||
"The created volume name is not equal "
|
||||
"to the requested name")
|
||||
# GET Volume
|
||||
fetched_volume = self.volumes_client.show_volume(
|
||||
fetched_volume = self.reader_volumes_client.show_volume(
|
||||
volume['id'])['volume']
|
||||
# Verification of details of fetched Volume
|
||||
self.assertEqual(v_name,
|
||||
|
||||
@@ -45,6 +45,7 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
||||
def setup_clients(cls):
|
||||
super(VolumesTestJSON, cls).setup_clients()
|
||||
cls.client = cls.volumes_extensions_client
|
||||
cls.reader_client = cls.reader_volumes_extensions_client
|
||||
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
@@ -61,7 +62,7 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
||||
def test_volume_list(self):
|
||||
"""Test listing volumes should return all volumes"""
|
||||
# Fetch all Volumes
|
||||
fetched_list = self.client.list_volumes()['volumes']
|
||||
fetched_list = self.reader_client.list_volumes()['volumes']
|
||||
# Now check if all the Volumes created in setup are in fetched list
|
||||
missing_volumes = [
|
||||
v for v in self.volume_list if v not in fetched_list
|
||||
@@ -76,7 +77,7 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
||||
def test_volume_list_with_details(self):
|
||||
"""Test listing volumes with detail should return all volumes"""
|
||||
# Fetch all Volumes
|
||||
fetched_list = self.client.list_volumes(detail=True)['volumes']
|
||||
fetched_list = self.reader_client.list_volumes(detail=True)['volumes']
|
||||
# Now check if all the Volumes created in setup are in fetched list
|
||||
missing_volumes = [
|
||||
v for v in self.volume_list if v not in fetched_list
|
||||
@@ -95,7 +96,7 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
||||
returned.
|
||||
"""
|
||||
params = {'limit': 2}
|
||||
fetched_vol_list = self.client.list_volumes(**params)['volumes']
|
||||
fetched_vol_list = self.reader_client.list_volumes(**params)['volumes']
|
||||
|
||||
self.assertEqual(len(fetched_vol_list), params['limit'],
|
||||
"Failed to list volumes by limit set")
|
||||
@@ -108,8 +109,8 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
||||
detail should be returned.
|
||||
"""
|
||||
params = {'limit': 2}
|
||||
fetched_vol_list = self.client.list_volumes(detail=True,
|
||||
**params)['volumes']
|
||||
fetched_vol_list = self.reader_client.list_volumes(detail=True,
|
||||
**params)['volumes']
|
||||
|
||||
self.assertEqual(len(fetched_vol_list), params['limit'],
|
||||
"Failed to list volume details by limit set")
|
||||
@@ -123,9 +124,9 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
||||
(The items in the all volumes list start from position 0.)
|
||||
"""
|
||||
# get all volumes list
|
||||
all_vol_list = self.client.list_volumes()['volumes']
|
||||
all_vol_list = self.reader_client.list_volumes()['volumes']
|
||||
params = {'offset': 1, 'limit': 1}
|
||||
fetched_vol_list = self.client.list_volumes(**params)['volumes']
|
||||
fetched_vol_list = self.reader_client.list_volumes(**params)['volumes']
|
||||
|
||||
# Validating length of the fetched volumes
|
||||
self.assertEqual(len(fetched_vol_list), params['limit'],
|
||||
@@ -146,10 +147,10 @@ class VolumesTestJSON(base.BaseV2ComputeTest):
|
||||
(The items in the all volumes list start from position 0.)
|
||||
"""
|
||||
# get all volumes list
|
||||
all_vol_list = self.client.list_volumes(detail=True)['volumes']
|
||||
all_vol_list = self.reader_client.list_volumes(detail=True)['volumes']
|
||||
params = {'offset': 1, 'limit': 1}
|
||||
fetched_vol_list = self.client.list_volumes(detail=True,
|
||||
**params)['volumes']
|
||||
fetched_vol_list = self.reader_client.list_volumes(detail=True,
|
||||
**params)['volumes']
|
||||
|
||||
# Validating length of the fetched volumes
|
||||
self.assertEqual(len(fetched_vol_list), params['limit'],
|
||||
|
||||
@@ -41,6 +41,7 @@ class VolumesNegativeTest(base.BaseV2ComputeTest):
|
||||
def setup_clients(cls):
|
||||
super(VolumesNegativeTest, cls).setup_clients()
|
||||
cls.client = cls.volumes_extensions_client
|
||||
cls.reader_client = cls.reader_volumes_extensions_client
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('c03ea686-905b-41a2-8748-9635154b7c57')
|
||||
@@ -48,7 +49,7 @@ class VolumesNegativeTest(base.BaseV2ComputeTest):
|
||||
"""Test getting details of a non existent volume should fail"""
|
||||
# Creating a nonexistent volume id
|
||||
# Trying to GET a non existent volume
|
||||
self.assertRaises(lib_exc.NotFound, self.client.show_volume,
|
||||
self.assertRaises(lib_exc.NotFound, self.reader_client.show_volume,
|
||||
data_utils.rand_uuid())
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@@ -97,7 +98,7 @@ class VolumesNegativeTest(base.BaseV2ComputeTest):
|
||||
@decorators.idempotent_id('62bab09a-4c03-4617-8cca-8572bc94af9b')
|
||||
def test_get_volume_without_passing_volume_id(self):
|
||||
"""Test getting volume details without volume id should fail"""
|
||||
self.assertRaises(lib_exc.NotFound, self.client.show_volume, '')
|
||||
self.assertRaises(lib_exc.NotFound, self.reader_client.show_volume, '')
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('62972737-124b-4513-b6cf-2f019f178494')
|
||||
|
||||
Reference in New Issue
Block a user