Merge "Fix tempest router creation"
diff --git a/neutron/tests/tempest/api/base.py b/neutron/tests/tempest/api/base.py
index 8213277..46b2849 100644
--- a/neutron/tests/tempest/api/base.py
+++ b/neutron/tests/tempest/api/base.py
@@ -328,7 +328,7 @@
         ext_gw_info = {}
         if external_network_id:
             ext_gw_info['network_id'] = external_network_id
-        if enable_snat:
+        if enable_snat is not None:
             ext_gw_info['enable_snat'] = enable_snat
         body = client.create_router(
             router_name, external_gateway_info=ext_gw_info,
diff --git a/neutron/tests/tempest/api/test_qos.py b/neutron/tests/tempest/api/test_qos.py
index 93f96b7..0a9bcda 100644
--- a/neutron/tests/tempest/api/test_qos.py
+++ b/neutron/tests/tempest/api/test_qos.py
@@ -156,29 +156,21 @@
 
     def _test_list_rule_types(self, client):
         # List supported rule types
-        # TODO(QoS): since in gate we run both ovs and linuxbridge ml2 drivers,
-        # and since Linux Bridge ml2 driver does not have QoS support yet, ml2
-        # plugin reports no rule types are supported. Once linuxbridge will
-        # receive support for QoS, the list of expected rule types will change.
+        # Since returned rule types depends on loaded backend drivers this test
+        # is checking only if returned keys are same as expected keys
         #
         # In theory, we could make the test conditional on which ml2 drivers
         # are enabled in gate (or more specifically, on which supported qos
         # rules are claimed by core plugin), but that option doesn't seem to be
         # available through tempest.lib framework
-        expected_rule_types = []
-        expected_rule_details = ['type']
+        expected_rule_keys = ['type']
 
         rule_types = client.list_qos_rule_types()
         actual_list_rule_types = rule_types['rule_types']
-        actual_rule_types = [rule['type'] for rule in actual_list_rule_types]
 
         # Verify that only required fields present in rule details
         for rule in actual_list_rule_types:
-            self.assertEqual(tuple(rule.keys()), tuple(expected_rule_details))
-
-        # Verify if expected rules are present in the actual rules list
-        for rule in expected_rule_types:
-            self.assertIn(rule, actual_rule_types)
+            self.assertEqual(tuple(expected_rule_keys), tuple(rule.keys()))
 
     def _disassociate_network(self, client, network_id):
         updated_network = client.update_network(network_id,
diff --git a/neutron/tests/tempest/api/test_routers_negative.py b/neutron/tests/tempest/api/test_routers_negative.py
index 26f7298..21b5a25 100644
--- a/neutron/tests/tempest/api/test_routers_negative.py
+++ b/neutron/tests/tempest/api/test_routers_negative.py
@@ -54,7 +54,7 @@
     @test.attr(type='negative')
     @decorators.idempotent_id('159f576d-a423-46b5-b501-622694c02f6b')
     def test_add_interface_wrong_tenant(self):
-        client2 = self.alt_manager.network_client
+        client2 = self.os_alt.network_client
         network = client2.create_network()['network']
         self.addCleanup(client2.delete_network, network['id'])
         subnet = self.create_subnet(network, client=client2)
diff --git a/neutron/tests/tempest/api/test_trunk.py b/neutron/tests/tempest/api/test_trunk.py
index 3e035a0..aef82e7 100644
--- a/neutron/tests/tempest/api/test_trunk.py
+++ b/neutron/tests/tempest/api/test_trunk.py
@@ -108,18 +108,18 @@
     @decorators.idempotent_id('4ce46c22-a2b6-4659-bc5a-0ef2463cab32')
     def test_create_update_trunk(self):
         trunk = self._create_trunk_with_network_and_parent(None)
-        self.assertEqual(1, trunk['trunk']['revision_number'])
+        rev = trunk['trunk']['revision_number']
         trunk_id = trunk['trunk']['id']
         res = self._show_trunk(trunk_id)
         self.assertTrue(res['trunk']['admin_state_up'])
-        self.assertEqual(1, res['trunk']['revision_number'])
+        self.assertEqual(rev, res['trunk']['revision_number'])
         self.assertEqual("", res['trunk']['name'])
         self.assertEqual("", res['trunk']['description'])
         res = self.client.update_trunk(
             trunk_id, name='foo', admin_state_up=False)
         self.assertFalse(res['trunk']['admin_state_up'])
         self.assertEqual("foo", res['trunk']['name'])
-        self.assertGreater(res['trunk']['revision_number'], 1)
+        self.assertGreater(res['trunk']['revision_number'], rev)
         # enable the trunk so that it can be managed
         self.client.update_trunk(trunk_id, admin_state_up=True)
 
diff --git a/neutron/tests/tempest/scenario/base.py b/neutron/tests/tempest/scenario/base.py
index 1e20c74..15a722a 100644
--- a/neutron/tests/tempest/scenario/base.py
+++ b/neutron/tests/tempest/scenario/base.py
@@ -71,7 +71,7 @@
         if not security_groups:
             security_groups = [{'name': 'default'}]
 
-        server = self.manager.servers_client.create_server(
+        server = self.os_primary.servers_client.create_server(
             name=name,
             flavorRef=flavor_ref,
             imageRef=image_ref,
@@ -81,9 +81,9 @@
 
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
             waiters.wait_for_server_termination,
-            self.manager.servers_client, server['server']['id'])
+            self.os_primary.servers_client, server['server']['id'])
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        self.manager.servers_client.delete_server,
+                        self.os_primary.servers_client.delete_server,
                         server['server']['id'])
         return server
 
@@ -155,7 +155,7 @@
         return router
 
     def create_and_associate_floatingip(self, port_id):
-        fip = self.manager.network_client.create_floatingip(
+        fip = self.os_primary.network_client.create_floatingip(
             CONF.network.public_network_id,
             port_id=port_id)['floatingip']
         self.floating_ips.append(fip)
@@ -172,7 +172,7 @@
         self.subnet = self.create_subnet(self.network)
         LOG.debug("Created subnet %s", self.subnet['id'])
 
-        secgroup = self.manager.network_client.create_security_group(
+        secgroup = self.os_primary.network_client.create_security_group(
             name=data_utils.rand_name('secgroup-'))
         LOG.debug("Created security group %s",
                   secgroup['security_group']['name'])
@@ -189,7 +189,7 @@
             key_name=self.keypair['name'],
             networks=[{'uuid': self.network['id']}],
             security_groups=[{'name': secgroup['security_group']['name']}])
-        waiters.wait_for_server_status(self.manager.servers_client,
+        waiters.wait_for_server_status(self.os_primary.servers_client,
                                        self.server['server']['id'],
                                        constants.SERVER_STATUS_ACTIVE)
         port = self.client.list_ports(network_id=self.network['id'],
@@ -211,12 +211,12 @@
             LOG.debug('Console output not supported, cannot log')
             return
         if not servers:
-            servers = self.manager.servers_client.list_servers()
+            servers = self.os_primary.servers_client.list_servers()
             servers = servers['servers']
         for server in servers:
             try:
                 console_output = (
-                    self.manager.servers_client.get_console_output(
+                    self.os_primary.servers_client.get_console_output(
                         server['id'])['output'])
                 LOG.debug('Console output for %s\nbody=\n%s',
                           server['id'], console_output)
diff --git a/neutron/tests/tempest/scenario/test_qos.py b/neutron/tests/tempest/scenario/test_qos.py
index 616ecb5..97f8ce1 100644
--- a/neutron/tests/tempest/scenario/test_qos.py
+++ b/neutron/tests/tempest/scenario/test_qos.py
@@ -153,19 +153,19 @@
         ssh_client = ssh.Client(self.fip['floating_ip_address'],
                                 CONF.validation.image_ssh_user,
                                 pkey=self.keypair['private_key'])
-        policy = self.admin_manager.network_client.create_qos_policy(
+        policy = self.os_admin.network_client.create_qos_policy(
                                         name='test-policy',
                                         description='test-qos-policy',
                                         shared=True)
         policy_id = policy['policy']['id']
-        self.admin_manager.network_client.create_bandwidth_limit_rule(
+        self.os_admin.network_client.create_bandwidth_limit_rule(
             policy_id, max_kbps=constants.LIMIT_KILO_BITS_PER_SECOND,
             max_burst_kbps=constants.LIMIT_KILO_BITS_PER_SECOND)
         port = self.client.list_ports(network_id=self.network['id'],
                                       device_id=self.server[
                                       'server']['id'])['ports'][0]
-        self.admin_manager.network_client.update_port(port['id'],
-                                                      qos_policy_id=policy_id)
+        self.os_admin.network_client.update_port(port['id'],
+                                                 qos_policy_id=policy_id)
         self._create_file_for_bw_tests(ssh_client)
         utils.wait_until_true(lambda: self._check_bw(
             ssh_client,
diff --git a/neutron/tests/tempest/scenario/test_trunk.py b/neutron/tests/tempest/scenario/test_trunk.py
index c857f3f..8ad9078 100644
--- a/neutron/tests/tempest/scenario/test_trunk.py
+++ b/neutron/tests/tempest/scenario/test_trunk.py
@@ -86,7 +86,7 @@
     def _detach_and_delete_trunk(self, server, trunk):
         # we have to detach the interface from the server before
         # the trunk can be deleted.
-        self.manager.compute.InterfacesClient().delete_interface(
+        self.os_primary.compute.InterfacesClient().delete_interface(
             server['id'], trunk['port_id'])
 
         def is_port_detached():
@@ -137,7 +137,7 @@
         }
 
     def _wait_for_server(self, server):
-        waiters.wait_for_server_status(self.manager.servers_client,
+        waiters.wait_for_server_status(self.os_primary.servers_client,
                                        server['server']['id'],
                                        constants.SERVER_STATUS_ACTIVE)
         self.check_connectivity(server['fip']['floating_ip_address'],