Merge "Set admin, member and reader gates to be the same"
diff --git a/.zuul.yaml b/.zuul.yaml
index 49b889f..8130657 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -95,11 +95,13 @@
 - job:
     name: patrole-member-ussuri
     parent: patrole-member
+    nodeset: openstack-single-node-bionic
     override-checkout: stable/ussuri
 
 - job:
     name: patrole-member-train
     parent: patrole-member
+    nodeset: openstack-single-node-bionic
     override-checkout: stable/train
     vars:
       devstack_localrc:
@@ -108,6 +110,7 @@
 - job:
     name: patrole-member-stein
     parent: patrole-member
+    nodeset: openstack-single-node-bionic
     override-checkout: stable/stein
     vars:
       devstack_localrc:
diff --git a/lower-constraints.txt b/lower-constraints.txt
index c874f08..c0da9ce 100644
--- a/lower-constraints.txt
+++ b/lower-constraints.txt
@@ -4,7 +4,7 @@
 Babel==2.5.3
 bcrypt==3.1.4
 certifi==2018.1.18
-cffi==1.11.5
+cffi==1.14.0
 chardet==3.0.4
 cliff==2.11.0
 cmd2==0.8.1
@@ -58,7 +58,7 @@
 python-mimeparse==1.6.0
 python-subunit==1.2.0
 pytz==2018.3
-PyYAML==3.12
+PyYAML==3.13
 requests==2.18.4
 requestsexceptions==1.4.0
 rfc3986==1.1.0
diff --git a/patrole_tempest_plugin/tests/api/compute/test_floating_ips_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_floating_ips_rbac.py
index d313494..ed3691e 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_floating_ips_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_floating_ips_rbac.py
@@ -23,6 +23,21 @@
 
 CONF = config.CONF
 
+# RBAC category or action was changed in Victoria release per
+# https://docs.openstack.org/api-ref/compute/#floating-ips-os-floating-ips-deprecated
+# and
+# https://github.com/openstack/nova/blob/master/nova/policies/floating_ips.py#L21
+if CONF.policy_feature_enabled.changed_nova_policies_victoria:
+    _FIP_GET = "os_compute_api:os-floating-ips:list"
+    _FIP_SHOW = "os_compute_api:os-floating-ips:show"
+    _FIP_CREATE = "os_compute_api:os-floating-ips:create"
+    _FIP_DELETE = "os_compute_api:os-floating-ips:delete"
+else:
+    _FIP_GET = "os_compute_api:os-floating-ips"
+    _FIP_SHOW = "os_compute_api:os-floating-ips"
+    _FIP_CREATE = "os_compute_api:os-floating-ips"
+    _FIP_DELETE = "os_compute_api:os-floating-ips"
+
 
 class FloatingIpsRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
@@ -44,7 +59,7 @@
     @decorators.idempotent_id('ac1b3053-f755-4cda-85a0-30e88b88d7ba')
     @rbac_rule_validation.action(
         service="nova",
-        rules=["os_compute_api:os-floating-ips"])
+        rules=[_FIP_GET])
     def test_list_floating_ips(self):
         with self.override_role():
             self.floating_ips_client.list_floating_ips()
@@ -52,7 +67,7 @@
     @decorators.idempotent_id('bebe52b3-5269-4e72-80c8-5a4a39c3bfa6')
     @rbac_rule_validation.action(
         service="nova",
-        rules=["os_compute_api:os-floating-ips"])
+        rules=[_FIP_SHOW])
     def test_show_floating_ip(self):
         body = self.floating_ips_client.create_floating_ip(
             pool=CONF.network.floating_network_name)['floating_ip']
@@ -64,7 +79,7 @@
     @decorators.idempotent_id('2bfb8745-c329-4ee9-95f6-c165a1989dbf')
     @rbac_rule_validation.action(
         service="nova",
-        rules=["os_compute_api:os-floating-ips"])
+        rules=[_FIP_CREATE])
     def test_create_floating_ips(self):
         with self.override_role():
             body = self.floating_ips_client.create_floating_ip(
@@ -75,7 +90,7 @@
     @decorators.idempotent_id('d3028373-5027-4e7a-b761-01c515403ecb')
     @rbac_rule_validation.action(
         service="nova",
-        rules=["os_compute_api:os-floating-ips"])
+        rules=[_FIP_DELETE])
     def test_delete_floating_ip(self):
         body = self.floating_ips_client.create_floating_ip(
             pool=CONF.network.floating_network_name)['floating_ip']
diff --git a/patrole_tempest_plugin/tests/api/compute/test_quota_class_sets_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_quota_class_sets_rbac.py
index d9022d4..b26ddc3 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_quota_class_sets_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_quota_class_sets_rbac.py
@@ -51,7 +51,7 @@
     def resource_setup(cls):
         super(QuotaClassesRbacTest, cls).resource_setup()
         # Create a project with its own quota.
-        project_name = data_utils.rand_name(cls.__name__ + '-project')
+        project_name = data_utils.rand_name(cls.__name__)
         project_desc = project_name + '-desc'
         project = identity.identity_utils(cls.os_admin).create_project(
             name=project_name, description=project_desc)
diff --git a/patrole_tempest_plugin/tests/api/compute/test_quota_sets_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_quota_sets_rbac.py
index 5835905..a41d0e0 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_quota_sets_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_quota_sets_rbac.py
@@ -90,7 +90,7 @@
         rules=["os_compute_api:os-quota-sets:delete"])
     def test_delete_quota_set(self):
         project_name = data_utils.rand_name(
-            self.__class__.__name__ + '-project')
+            self.__class__.__name__)
         project_desc = project_name + '-desc'
         project = identity.identity_utils(self.os_admin).create_project(
             name=project_name, description=project_desc)
diff --git a/patrole_tempest_plugin/tests/api/identity/rbac_base.py b/patrole_tempest_plugin/tests/api/identity/rbac_base.py
index 6e76a72..4321c60 100644
--- a/patrole_tempest_plugin/tests/api/identity/rbac_base.py
+++ b/patrole_tempest_plugin/tests/api/identity/rbac_base.py
@@ -204,7 +204,7 @@
     def setup_test_domain(cls):
         """Set up a test domain."""
         domain = cls.domains_client.create_domain(
-            name=data_utils.rand_name(cls.__name__ + '-test_domain'),
+            name=data_utils.rand_name(cls.__name__),
             description=data_utils.rand_name(
                 cls.__name__ + '-desc'))['domain']
         cls.domains.append(domain)
@@ -240,7 +240,7 @@
         """Set up a test project."""
         project = cls.projects_client.create_project(
             name=data_utils.rand_name(
-                cls.__name__ + '-testproject'),
+                cls.__name__),
             description=data_utils.rand_name(
                 cls.__name__ + '-desc'))['project']
         cls.projects.append(project)
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_domains_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_domains_rbac.py
index f97570f..2ad50cf 100644
--- a/patrole_tempest_plugin/tests/api/identity/v3/test_domains_rbac.py
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_domains_rbac.py
@@ -35,7 +35,7 @@
     def test_update_domain(self):
         domain = self.setup_test_domain()
         new_domain_name = data_utils.rand_name(
-            self.__class__.__name__ + '-test_update_domain')
+            self.__class__.__name__)
         with self.override_role():
             self.domains_client.update_domain(domain['id'],
                                               domain=domain,
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_oauth_consumers_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_oauth_consumers_rbac.py
index aaaddf7..4198a46 100644
--- a/patrole_tempest_plugin/tests/api/identity/v3/test_oauth_consumers_rbac.py
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_oauth_consumers_rbac.py
@@ -25,7 +25,7 @@
 
     def _create_consumer(self):
         description = data_utils.rand_name(
-            self.__class__.__name__ + '-IdentityConsumer')
+            self.__class__.__name__)
         consumer = self.consumers_client.create_consumer(
             description)['consumer']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -55,7 +55,7 @@
     def test_update_consumer(self):
         consumer = self._create_consumer()
         updated_description = data_utils.rand_name(
-            self.__class__.__name__ + '-IdentityConsumer')
+            self.__class__.__name__)
 
         with self.override_role():
             self.consumers_client.update_consumer(consumer['id'],