From 49e333af6a50b53e546064e7b86050570283c1ea Mon Sep 17 00:00:00 2001 From: Jason Paroly Date: Mon, 8 Dec 2025 09:19:09 -0500 Subject: [PATCH] Use project_reader in list servers filters tests We have project_reader credentials in tempest and they use the same project as member role creds. Nova support the project reader role in get server API. Moving the list servers filters tests to use project reader creds in GET server API calls. Change-Id: Ife7b1551c5c948071f38639c442508b1da4b6595 Signed-off-by: Jason Paroly --- .../servers/test_list_server_filters.py | 56 ++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/tempest/api/compute/servers/test_list_server_filters.py b/tempest/api/compute/servers/test_list_server_filters.py index 78732963a5..45f3348530 100644 --- a/tempest/api/compute/servers/test_list_server_filters.py +++ b/tempest/api/compute/servers/test_list_server_filters.py @@ -28,6 +28,8 @@ CONF = config.CONF class ListServerFiltersTestJSON(base.BaseV2ComputeTest): """Test listing servers filtered by specified attribute""" + credentials = ['primary', 'project_reader'] + @classmethod def setup_credentials(cls): cls.set_network_resources(network=True, subnet=True, dhcp=True) @@ -37,6 +39,10 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): def setup_clients(cls): super(ListServerFiltersTestJSON, cls).setup_clients() cls.client = cls.servers_client + if CONF.enforce_scope.nova: + cls.reader_client = cls.os_project_reader.servers_client + else: + cls.reader_client = cls.client @classmethod def resource_setup(cls): @@ -80,7 +86,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): def test_list_servers_filter_by_image(self): """Filter the list of servers by image""" params = {'image': self.image_ref} - body = self.client.list_servers(**params) + body = self.reader_client.list_servers(**params) servers = body['servers'] self.assertIn(self.s1['id'], map(lambda x: x['id'], servers)) @@ -91,7 +97,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): def test_list_servers_filter_by_flavor(self): """Filter the list of servers by flavor""" params = {'flavor': self.flavor_ref_alt} - body = self.client.list_servers(**params) + body = self.reader_client.list_servers(**params) servers = body['servers'] self.assertNotIn(self.s1['id'], map(lambda x: x['id'], servers)) @@ -102,7 +108,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): def test_list_servers_filter_by_server_name(self): """Filter the list of servers by server name""" params = {'name': self.s1_name} - body = self.client.list_servers(**params) + body = self.reader_client.list_servers(**params) servers = body['servers'] self.assertIn(self.s1_name, map(lambda x: x['name'], servers)) @@ -113,7 +119,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): def test_list_servers_filter_by_active_status(self): """Filter the list of servers by server active status""" params = {'status': 'active'} - body = self.client.list_servers(**params) + body = self.reader_client.list_servers(**params) servers = body['servers'] self.assertIn(self.s1['id'], map(lambda x: x['id'], servers)) @@ -127,7 +133,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): self.client.stop_server(self.s1['id']) waiters.wait_for_server_status(self.client, self.s1['id'], 'SHUTOFF') - body = self.client.list_servers(**params) + body = self.reader_client.list_servers(**params) self.client.start_server(self.s1['id']) waiters.wait_for_server_status(self.client, self.s1['id'], 'ACTIVE') @@ -144,7 +150,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): Verify only the expected number of servers are returned (one server) """ params = {'limit': 1} - servers = self.client.list_servers(**params) + servers = self.reader_client.list_servers(**params) self.assertEqual(1, len([x for x in servers['servers'] if 'id' in x])) @decorators.idempotent_id('b1495414-2d93-414c-8019-849afe8d319e') @@ -154,7 +160,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): Verify only the expected number of servers are returned (no server) """ params = {'limit': 0} - servers = self.client.list_servers(**params) + servers = self.reader_client.list_servers(**params) self.assertEmpty(servers['servers']) @decorators.idempotent_id('37791bbd-90c0-4de0-831e-5f38cba9c6b3') @@ -164,8 +170,8 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): Verify only the expected number of servers are returned (all servers) """ params = {'limit': 100000} - servers = self.client.list_servers(**params) - all_servers = self.client.list_servers() + servers = self.reader_client.list_servers(**params) + all_servers = self.reader_client.list_servers() self.assertEqual(len([x for x in all_servers['servers'] if 'id' in x]), len([x for x in servers['servers'] if 'id' in x])) @@ -175,7 +181,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): def test_list_servers_detailed_filter_by_image(self): """"Filter the detailed list of servers by image""" params = {'image': self.image_ref} - body = self.client.list_servers(detail=True, **params) + body = self.reader_client.list_servers(detail=True, **params) servers = body['servers'] self.assertIn(self.s1['id'], map(lambda x: x['id'], servers)) @@ -186,7 +192,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): def test_list_servers_detailed_filter_by_flavor(self): """Filter the detailed list of servers by flavor""" params = {'flavor': self.flavor_ref_alt} - body = self.client.list_servers(detail=True, **params) + body = self.reader_client.list_servers(detail=True, **params) servers = body['servers'] self.assertNotIn(self.s1['id'], map(lambda x: x['id'], servers)) @@ -197,7 +203,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): def test_list_servers_detailed_filter_by_server_name(self): """Filter the detailed list of servers by server name""" params = {'name': self.s1_name} - body = self.client.list_servers(detail=True, **params) + body = self.reader_client.list_servers(detail=True, **params) servers = body['servers'] self.assertIn(self.s1_name, map(lambda x: x['name'], servers)) @@ -208,7 +214,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): def test_list_servers_detailed_filter_by_server_status(self): """Filter the detailed list of servers by server status""" params = {'status': 'active'} - body = self.client.list_servers(detail=True, **params) + body = self.reader_client.list_servers(detail=True, **params) servers = body['servers'] test_ids = [s['id'] for s in (self.s1, self.s2, self.s3)] @@ -223,7 +229,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): """Filter the list of servers by part of server name""" # List all servers that contains '-instance' in name params = {'name': '-instance'} - body = self.client.list_servers(**params) + body = self.reader_client.list_servers(**params) servers = body['servers'] self.assertIn(self.s1_name, map(lambda x: x['name'], servers)) @@ -234,7 +240,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): part_name = self.s1_name[6:-1] params = {'name': part_name} - body = self.client.list_servers(**params) + body = self.reader_client.list_servers(**params) servers = body['servers'] self.assertIn(self.s1_name, map(lambda x: x['name'], servers)) @@ -248,7 +254,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): regexes = [r'^.*\-instance\-[0-9]+$', r'^.*\-instance\-.*$'] for regex in regexes: params = {'name': regex} - body = self.client.list_servers(**params) + body = self.reader_client.list_servers(**params) servers = body['servers'] self.assertIn(self.s1_name, map(lambda x: x['name'], servers)) @@ -259,7 +265,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): part_name = self.s1_name[-10:] params = {'name': part_name} - body = self.client.list_servers(**params) + body = self.reader_client.list_servers(**params) servers = body['servers'] self.assertIn(self.s1_name, map(lambda x: x['name'], servers)) @@ -279,22 +285,22 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): # so here look for the longest server ip, and filter by that ip, # so as to ensure only one server is returned. ip_list = {} - self.s1 = self.client.show_server(self.s1['id'])['server'] + self.s1 = self.reader_client.show_server(self.s1['id'])['server'] # Get first ip address in spite of v4 or v6 ip_addr = self.s1['addresses'][self.fixed_network_name][0]['addr'] ip_list[ip_addr] = self.s1['id'] - self.s2 = self.client.show_server(self.s2['id'])['server'] + self.s2 = self.reader_client.show_server(self.s2['id'])['server'] ip_addr = self.s2['addresses'][self.fixed_network_name][0]['addr'] ip_list[ip_addr] = self.s2['id'] - self.s3 = self.client.show_server(self.s3['id'])['server'] + self.s3 = self.reader_client.show_server(self.s3['id'])['server'] ip_addr = self.s3['addresses'][self.fixed_network_name][0]['addr'] ip_list[ip_addr] = self.s3['id'] longest_ip = max([[len(ip), ip] for ip in ip_list])[1] params = {'ip': longest_ip} - body = self.client.list_servers(**params) + body = self.reader_client.list_servers(**params) servers = body['servers'] self.assertIn(ip_list[longest_ip], map(lambda x: x['id'], servers)) @@ -311,7 +317,7 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): # query addresses of the 3 servers addrs = [] for s in [self.s1, self.s2, self.s3]: - s_show = self.client.show_server(s['id'])['server'] + s_show = self.reader_client.show_server(s['id'])['server'] addr_spec = s_show['addresses'][self.fixed_network_name][0] addrs.append(addr_spec['addr']) # find common part of the 3 ip addresses @@ -329,8 +335,8 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): else: params = {'ip6': prefix} # capture all servers in case something goes wrong - all_servers = self.client.list_servers(detail=True) - body = self.client.list_servers(**params) + all_servers = self.reader_client.list_servers(detail=True) + body = self.reader_client.list_servers(**params) servers = body['servers'] self.assertIn(self.s1_name, map(lambda x: x['name'], servers), @@ -350,5 +356,5 @@ class ListServerFiltersTestJSON(base.BaseV2ComputeTest): Verify only the expected number of servers are returned (one server) """ params = {'limit': 1} - servers = self.client.list_servers(detail=True, **params) + servers = self.reader_client.list_servers(detail=True, **params) self.assertEqual(1, len(servers['servers']))