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>
diff --git a/tempest/api/compute/base.py b/tempest/api/compute/base.py
index 3b44ded..635685f 100644
--- a/tempest/api/compute/base.py
+++ b/tempest/api/compute/base.py
@@ -99,6 +99,16 @@
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
diff --git a/tempest/api/compute/volumes/test_attach_volume.py b/tempest/api/compute/volumes/test_attach_volume.py
index e267b0f..72df5e3 100644
--- a/tempest/api/compute/volumes/test_attach_volume.py
+++ b/tempest/api/compute/volumes/test_attach_volume.py
@@ -42,6 +42,15 @@
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 @@
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 @@
# 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]
diff --git a/tempest/api/compute/volumes/test_volume_snapshots.py b/tempest/api/compute/volumes/test_volume_snapshots.py
index 5b06a86..698504b 100644
--- a/tempest/api/compute/volumes/test_volume_snapshots.py
+++ b/tempest/api/compute/volumes/test_volume_snapshots.py
@@ -46,6 +46,7 @@
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 @@
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))
diff --git a/tempest/api/compute/volumes/test_volumes_get.py b/tempest/api/compute/volumes/test_volumes_get.py
index 2a4189e..8e5838b 100644
--- a/tempest/api/compute/volumes/test_volumes_get.py
+++ b/tempest/api/compute/volumes/test_volumes_get.py
@@ -43,6 +43,7 @@
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 @@
"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,
diff --git a/tempest/api/compute/volumes/test_volumes_list.py b/tempest/api/compute/volumes/test_volumes_list.py
index 0b37264..142555a 100644
--- a/tempest/api/compute/volumes/test_volumes_list.py
+++ b/tempest/api/compute/volumes/test_volumes_list.py
@@ -45,6 +45,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
(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 @@
(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'],
diff --git a/tempest/api/compute/volumes/test_volumes_negative.py b/tempest/api/compute/volumes/test_volumes_negative.py
index c386497..bfd29ab 100644
--- a/tempest/api/compute/volumes/test_volumes_negative.py
+++ b/tempest/api/compute/volumes/test_volumes_negative.py
@@ -41,6 +41,7 @@
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 @@
"""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 @@
@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')