Merge "Ensure package-wide test init is done with testr"
diff --git a/tempest/common/utils/data_utils.py b/tempest/common/utils/data_utils.py
index 7c6a58b..82982b8 100644
--- a/tempest/common/utils/data_utils.py
+++ b/tempest/common/utils/data_utils.py
@@ -27,6 +27,10 @@
return name + str(random.randint(1, 999999))
+def rand_int_id(start=0, end=999999):
+ return random.randint(start, end)
+
+
def build_url(host, port, api_version=None, path=None,
params=None, use_ssl=False):
"""Build the request URL from given host, port, path and parameters."""
diff --git a/tempest/services/compute/json/flavors_client.py b/tempest/services/compute/json/flavors_client.py
index bd339b2..955068f 100644
--- a/tempest/services/compute/json/flavors_client.py
+++ b/tempest/services/compute/json/flavors_client.py
@@ -87,3 +87,22 @@
if flavor['id'] == id:
return False
return True
+
+ def set_flavor_extra_spec(self, flavor_id, specs):
+ """Sets extra Specs to the mentioned flavor."""
+ post_body = json.dumps({'extra_specs': specs})
+ resp, body = self.post('flavors/%s/os-extra_specs' % flavor_id,
+ post_body, self.headers)
+ body = json.loads(body)
+ return resp, body['extra_specs']
+
+ def get_flavor_extra_spec(self, flavor_id):
+ """Gets extra Specs details of the mentioned flavor."""
+ resp, body = self.get('flavors/%s/os-extra_specs' % flavor_id)
+ body = json.loads(body)
+ return resp, body['extra_specs']
+
+ def unset_flavor_extra_spec(self, flavor_id, key):
+ """Unsets extra Specs from the mentioned flavor."""
+ return self.delete('flavors/%s/os-extra_specs/%s' % (str(flavor_id),
+ key))
diff --git a/tempest/services/compute/xml/flavors_client.py b/tempest/services/compute/xml/flavors_client.py
index c011fe4..ece362b 100644
--- a/tempest/services/compute/xml/flavors_client.py
+++ b/tempest/services/compute/xml/flavors_client.py
@@ -125,3 +125,25 @@
if flavor['id'] == id:
return False
return True
+
+ def set_flavor_extra_spec(self, flavor_id, specs):
+ """Sets extra Specs to the mentioned flavor."""
+ extra_specs = Element("extra_specs")
+ for key in specs.keys():
+ extra_specs.add_attr(key, specs[key])
+ resp, body = self.post('flavors/%s/os-extra_specs' % flavor_id,
+ str(Document(extra_specs)), self.headers)
+ body = xml_to_json(etree.fromstring(body))
+ return resp, body
+
+ def get_flavor_extra_spec(self, flavor_id):
+ """Gets extra Specs of the mentioned flavor."""
+ resp, body = self.get('flavors/%s/os-extra_specs' % flavor_id,
+ self.headers)
+ body = xml_to_json(etree.fromstring(body))
+ return resp, body
+
+ def unset_flavor_extra_spec(self, flavor_id, key):
+ """Unsets an extra spec based on the mentioned flavor and key."""
+ return self.delete('flavors/%s/os-extra_specs/%s' % (str(flavor_id),
+ key))
diff --git a/tempest/tests/boto/test_ec2_volumes.py b/tempest/tests/boto/test_ec2_volumes.py
index 7898926..ee7fa3f 100644
--- a/tempest/tests/boto/test_ec2_volumes.py
+++ b/tempest/tests/boto/test_ec2_volumes.py
@@ -62,7 +62,7 @@
self.cancelResourceCleanUp(cuk)
@attr(type='smoke')
- def test_create_volme_from_snapshot(self):
+ def test_create_volume_from_snapshot(self):
# EC2 Create volume from snapshot
volume = self.client.create_volume(1, self.zone)
self.addResourceCleanUp(self.client.delete_volume, volume.id)
diff --git a/tempest/tests/compute/admin/test_flavors.py b/tempest/tests/compute/admin/test_flavors.py
index 8172bd4..4859308 100644
--- a/tempest/tests/compute/admin/test_flavors.py
+++ b/tempest/tests/compute/admin/test_flavors.py
@@ -19,6 +19,8 @@
from nose.plugins.attrib import attr
import unittest2 as unittest
+from tempest.common.utils.data_utils import rand_int_id
+from tempest.common.utils.data_utils import rand_name
from tempest.tests import compute
from tempest.tests.compute import base
@@ -36,12 +38,11 @@
raise nose.SkipTest(msg)
cls.client = cls.os.flavors_client
- cls.flavor_name = 'test_flavor'
+ cls.flavor_name_prefix = 'test_flavor_'
cls.ram = 512
cls.vcpus = 1
cls.disk = 10
cls.ephemeral = 10
- cls.new_flavor_id = 1234
cls.swap = 1024
cls.rxtx = 2
@@ -49,21 +50,24 @@
def test_create_flavor(self):
# Create a flavor and ensure it is listed
# This operation requires the user to have 'admin' role
+ flavor_name = rand_name(self.flavor_name_prefix)
+ new_flavor_id = rand_int_id(start=1000)
+
try:
#Create the flavor
- resp, flavor = self.client.create_flavor(self.flavor_name,
+ resp, flavor = self.client.create_flavor(flavor_name,
self.ram, self.vcpus,
self.disk,
- self.new_flavor_id,
+ new_flavor_id,
ephemeral=self.ephemeral,
swap=self.swap,
rxtx=self.rxtx)
self.assertEqual(200, resp.status)
- self.assertEqual(flavor['name'], self.flavor_name)
+ self.assertEqual(flavor['name'], flavor_name)
self.assertEqual(flavor['vcpus'], self.vcpus)
self.assertEqual(flavor['disk'], self.disk)
self.assertEqual(flavor['ram'], self.ram)
- self.assertEqual(int(flavor['id']), self.new_flavor_id)
+ self.assertEqual(int(flavor['id']), new_flavor_id)
self.assertEqual(flavor['swap'], self.swap)
self.assertEqual(flavor['rxtx_factor'], self.rxtx)
self.assertEqual(flavor['OS-FLV-EXT-DATA:ephemeral'],
@@ -77,26 +81,29 @@
self.assertEqual(flavor['os-flavor-access:is_public'], True)
#Verify flavor is retrieved
- resp, flavor = self.client.get_flavor_details(self.new_flavor_id)
+ resp, flavor = self.client.get_flavor_details(new_flavor_id)
self.assertEqual(resp.status, 200)
- self.assertEqual(flavor['name'], self.flavor_name)
+ self.assertEqual(flavor['name'], flavor_name)
finally:
#Delete the flavor
- resp, body = self.client.delete_flavor(self.new_flavor_id)
+ resp, body = self.client.delete_flavor(new_flavor_id)
self.assertEqual(resp.status, 202)
- self.client.wait_for_resource_deletion(self.new_flavor_id)
+ self.client.wait_for_resource_deletion(new_flavor_id)
@attr(type='positive')
def test_create_flavor_verify_entry_in_list_details(self):
# Create a flavor and ensure it's details are listed
# This operation requires the user to have 'admin' role
+ flavor_name = rand_name(self.flavor_name_prefix)
+ new_flavor_id = rand_int_id(start=1000)
+
try:
#Create the flavor
- resp, flavor = self.client.create_flavor(self.flavor_name,
+ resp, flavor = self.client.create_flavor(flavor_name,
self.ram, self.vcpus,
self.disk,
- self.new_flavor_id,
+ new_flavor_id,
ephemeral=self.ephemeral,
swap=self.swap,
rxtx=self.rxtx)
@@ -105,62 +112,68 @@
resp, flavors = self.client.list_flavors_with_detail()
self.assertEqual(resp.status, 200)
for flavor in flavors:
- if flavor['name'] == self.flavor_name:
+ if flavor['name'] == flavor_name:
flag = True
self.assertTrue(flag)
finally:
#Delete the flavor
- resp, body = self.client.delete_flavor(self.new_flavor_id)
+ resp, body = self.client.delete_flavor(new_flavor_id)
self.assertEqual(resp.status, 202)
- self.client.wait_for_resource_deletion(self.new_flavor_id)
+ self.client.wait_for_resource_deletion(new_flavor_id)
@attr(type='negative')
def test_get_flavor_details_for_deleted_flavor(self):
# Delete a flavor and ensure it is not listed
# Create a test flavor
- resp, flavor = self.client.create_flavor(self.flavor_name,
+ flavor_name = rand_name(self.flavor_name_prefix)
+ new_flavor_id = rand_int_id(start=1000)
+
+ resp, flavor = self.client.create_flavor(flavor_name,
self.ram,
self.vcpus, self.disk,
- self.new_flavor_id,
+ new_flavor_id,
ephemeral=self.ephemeral,
swap=self.swap,
rxtx=self.rxtx)
self.assertEquals(200, resp.status)
# Delete the flavor
- resp, _ = self.client.delete_flavor(self.new_flavor_id)
+ resp, _ = self.client.delete_flavor(new_flavor_id)
self.assertEqual(resp.status, 202)
# Deleted flavors can be seen via detailed GET
- resp, flavor = self.client.get_flavor_details(self.new_flavor_id)
+ resp, flavor = self.client.get_flavor_details(new_flavor_id)
self.assertEqual(resp.status, 200)
- self.assertEqual(flavor['name'], self.flavor_name)
+ self.assertEqual(flavor['name'], flavor_name)
# Deleted flavors should not show up in a list however
resp, flavors = self.client.list_flavors_with_detail()
self.assertEqual(resp.status, 200)
flag = True
for flavor in flavors:
- if flavor['name'] == self.flavor_name:
+ if flavor['name'] == flavor_name:
flag = False
self.assertTrue(flag)
def test_create_list_flavor_without_extra_data(self):
#Create a flavor and ensure it is listed
#This operation requires the user to have 'admin' role
+ flavor_name = rand_name(self.flavor_name_prefix)
+ new_flavor_id = rand_int_id(start=1000)
+
try:
#Create the flavor
- resp, flavor = self.client.create_flavor(self.flavor_name,
+ resp, flavor = self.client.create_flavor(flavor_name,
self.ram, self.vcpus,
self.disk,
- self.new_flavor_id)
+ new_flavor_id)
self.assertEqual(200, resp.status)
- self.assertEqual(flavor['name'], self.flavor_name)
+ self.assertEqual(flavor['name'], flavor_name)
self.assertEqual(flavor['ram'], self.ram)
self.assertEqual(flavor['vcpus'], self.vcpus)
self.assertEqual(flavor['disk'], self.disk)
- self.assertEqual(int(flavor['id']), self.new_flavor_id)
+ self.assertEqual(int(flavor['id']), new_flavor_id)
self.assertEqual(flavor['swap'], '')
self.assertEqual(int(flavor['rxtx_factor']), 1)
self.assertEqual(int(flavor['OS-FLV-EXT-DATA:ephemeral']), 0)
@@ -173,57 +186,63 @@
self.assertEqual(flavor['os-flavor-access:is_public'], True)
#Verify flavor is retrieved
- resp, flavor = self.client.get_flavor_details(self.new_flavor_id)
+ resp, flavor = self.client.get_flavor_details(new_flavor_id)
self.assertEqual(resp.status, 200)
- self.assertEqual(flavor['name'], self.flavor_name)
+ self.assertEqual(flavor['name'], flavor_name)
#Check if flavor is present in list
resp, flavors = self.client.list_flavors_with_detail()
self.assertEqual(resp.status, 200)
for flavor in flavors:
- if flavor['name'] == self.flavor_name:
+ if flavor['name'] == flavor_name:
flag = True
self.assertTrue(flag)
finally:
#Delete the flavor
- resp, body = self.client.delete_flavor(self.new_flavor_id)
+ resp, body = self.client.delete_flavor(new_flavor_id)
self.assertEqual(resp.status, 202)
- self.client.wait_for_resource_deletion(self.new_flavor_id)
+ self.client.wait_for_resource_deletion(new_flavor_id)
@attr(type='positive')
def test_flavor_not_public_verify_entry_not_in_list_details(self):
#Create a flavor with os-flavor-access:is_public false should not
#be present in list_details.
#This operation requires the user to have 'admin' role
+ flavor_name = rand_name(self.flavor_name_prefix)
+ new_flavor_id = rand_int_id(start=1000)
+
try:
#Create the flavor
- resp, flavor = self.client.create_flavor(self.flavor_name,
+ resp, flavor = self.client.create_flavor(flavor_name,
self.ram, self.vcpus,
self.disk,
- self.new_flavor_id,
+ new_flavor_id,
is_public="False")
flag = False
#Verify flavor is retrieved
resp, flavors = self.client.list_flavors_with_detail()
self.assertEqual(resp.status, 200)
for flavor in flavors:
- if flavor['name'] == self.flavor_name:
+ if flavor['name'] == flavor_name:
flag = True
self.assertFalse(flag)
finally:
#Delete the flavor
- resp, body = self.client.delete_flavor(self.new_flavor_id)
+ resp, body = self.client.delete_flavor(new_flavor_id)
self.assertEqual(resp.status, 202)
def test_list_public_flavor_with_other_user(self):
#Create a Flavor with public access.
#Try to List/Get flavor with another user
+ flavor_name = rand_name(self.flavor_name_prefix)
+ new_flavor_id = rand_int_id(start=1000)
+
try:
#Create the flavor
- resp, flavor = self.client.create_flavor(self.flavor_name,
+ resp, flavor = self.client.create_flavor(flavor_name,
self.ram, self.vcpus,
self.disk,
- self.new_flavor_id,
+ new_flavor_id,
is_public="True")
flag = False
self.new_client = self.flavors_client
@@ -231,14 +250,14 @@
resp, flavors = self.new_client.list_flavors_with_detail()
self.assertEqual(resp.status, 200)
for flavor in flavors:
- if flavor['name'] == self.flavor_name:
+ if flavor['name'] == flavor_name:
flag = True
self.assertTrue(flag)
finally:
#Delete the flavor
- resp, body = self.client.delete_flavor(self.new_flavor_id)
+ resp, body = self.client.delete_flavor(new_flavor_id)
self.assertEqual(resp.status, 202)
- self.client.wait_for_resource_deletion(self.new_flavor_id)
+ self.client.wait_for_resource_deletion(new_flavor_id)
class FlavorsAdminTestXML(base.BaseComputeAdminTestXML,
diff --git a/tempest/tests/compute/admin/test_flavors_extra_specs.py b/tempest/tests/compute/admin/test_flavors_extra_specs.py
new file mode 100644
index 0000000..2645153
--- /dev/null
+++ b/tempest/tests/compute/admin/test_flavors_extra_specs.py
@@ -0,0 +1,158 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack, LLC
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import nose
+from nose.plugins.attrib import attr
+
+from tempest import exceptions
+from tempest.tests import compute
+from tempest.tests.compute import base
+import unittest2 as unittest
+
+
+class FlavorsExtraSpecsTestBase(object):
+
+ """
+ Tests Flavor Extra Spec API extension.
+ SET, UNSET Flavor Extra specs require admin privileges.
+ GET Flavor Extra specs can be performed even by without admin privileges.
+ """
+
+ @classmethod
+ def setUpClass(self, cls):
+ if not compute.FLAVOR_EXTRA_DATA_ENABLED:
+ msg = "FlavorExtraData extension not enabled."
+ raise nose.SkipTest(msg)
+
+ cls.client = cls.os.flavors_client
+ flavor_name = 'test_flavor2'
+ ram = 512
+ vcpus = 1
+ disk = 10
+ ephemeral = 10
+ cls.new_flavor_id = 12345
+ swap = 1024
+ rxtx = 1
+ #Create a flavor so as to set/get/unset extra specs
+ resp, cls.flavor = cls.client.create_flavor(flavor_name,
+ ram, vcpus,
+ disk,
+ cls.new_flavor_id,
+ ephemeral=ephemeral,
+ swap=swap, rxtx=rxtx)
+
+ @classmethod
+ def tearDownClass(self, cls):
+ resp, body = cls.client.delete_flavor(cls.flavor['id'])
+
+ def test_flavor_set_get_unset_keys(self):
+ #Test to SET, GET UNSET flavor extra spec as a user
+ #with admin privileges.
+ #Assigning extra specs values that are to be set
+ specs = {"key1": "value1", "key2": "value2"}
+ #SET extra specs to the flavor created in setUp
+ set_resp, set_body = \
+ self.client.set_flavor_extra_spec(self.flavor['id'], specs)
+ self.assertEqual(set_resp.status, 200)
+ self.assertEqual(set_body, specs)
+ #GET extra specs and verify
+ get_resp, get_body = \
+ self.client.get_flavor_extra_spec(self.flavor['id'])
+ self.assertEqual(get_resp.status, 200)
+ self.assertEqual(get_body, specs)
+ #UNSET extra specs that were set in this test
+ unset_resp, _ = \
+ self.client.unset_flavor_extra_spec(self.flavor['id'], "key1")
+ self.assertEqual(unset_resp.status, 200)
+
+ @unittest.skip('Until bug 1094142 is resolved.')
+ def test_flavor_non_admin_set_get_unset_keys(self):
+ #Test to SET, GET UNSET flavor extra spec as a user
+ #with out admin privileges.
+ self.nonadmin_client = self.flavors_client
+ #Assigning extra specs values that are to be set
+ specs = {"key1": "value1", "key2": "value2"}
+ msg = None
+
+ #Verify if able to SET flavor extraspec with non-admin user
+ try:
+ set_resp, set_body = \
+ self.nonadmin_client.set_flavor_extra_spec(
+ self.flavor['id'], specs)
+ except exceptions.Unauthorized:
+ pass
+ else:
+ msg = "Flavor extra specs is being SET"
+ msg += " by unauthorized non-admin user.\n"
+ #SET flavor extra specs with admin user
+ #so as to check GET/UNSET flavor extra specs with non-admin
+ set_resp, set_body =\
+ self.client.set_flavor_extra_spec(self.flavor['id'], specs)
+ #Verify if able to GET flavor extraspec with non-admin user
+ try:
+ get_resp, get_body = \
+ self.nonadmin_client.get_flavor_extra_spec('')
+ self.assertEqual(get_resp.status, 200)
+ except Exception as e:
+ msg += "Got an exception when GET Flavor extra specs"
+ msg += " by non-admin user. Exception is: %s\n" % e
+ #Verify if able to UNSET flavor extraspec with non-admin user
+ try:
+ unset_resp, _ = \
+ self.nonadmin_client.unset_flavor_extra_spec(self.flavor['id'],
+ "key1")
+ except exceptions.Unauthorized:
+ pass
+ else:
+ msg += "Flavor extra specs is being UNSET"
+ msg += " by unauthorized non-admin user.\n"
+ #Verification to check if actions failed.
+ #msg variable would contain the message according to the failures.
+ if msg is not None:
+ self.fail(msg)
+
+
+class FlavorsExtraSpecsTestXML(base.BaseComputeAdminTestXML,
+ base.BaseComputeTestXML,
+ FlavorsExtraSpecsTestBase):
+
+ @classmethod
+ def setUpClass(cls):
+ super(FlavorsExtraSpecsTestXML, cls).setUpClass()
+ base.BaseComputeTestXML.setUpClass()
+ FlavorsExtraSpecsTestBase.setUpClass(cls)
+
+ @classmethod
+ def tearDownClass(cls):
+ FlavorsExtraSpecsTestBase.tearDownClass(cls)
+ super(FlavorsExtraSpecsTestXML, cls).tearDownClass()
+
+
+class FlavorsExtraSpecsTestJSON(base.BaseComputeAdminTestJSON,
+ base.BaseComputeTestJSON,
+ FlavorsExtraSpecsTestBase):
+
+ @classmethod
+ def setUpClass(cls):
+ super(FlavorsExtraSpecsTestJSON, cls).setUpClass()
+ base.BaseComputeTestJSON.setUpClass()
+ FlavorsExtraSpecsTestBase.setUpClass(cls)
+
+ @classmethod
+ def tearDownClass(cls):
+ FlavorsExtraSpecsTestBase.tearDownClass(cls)
+ super(FlavorsExtraSpecsTestJSON, cls).tearDownClass()
diff --git a/tempest/tests/compute/flavors/test_flavors.py b/tempest/tests/compute/flavors/test_flavors.py
index 53cad65..298984f 100644
--- a/tempest/tests/compute/flavors/test_flavors.py
+++ b/tempest/tests/compute/flavors/test_flavors.py
@@ -104,7 +104,7 @@
flavors = sorted(flavors, key=lambda k: k['ram'])
flavor_id = flavors[0]['id']
- params = {'minRam': flavors[1]['ram']}
+ params = {'minRam': flavors[0]['ram'] + 1}
resp, flavors = self.client.list_flavors_with_detail(params)
self.assertFalse(any([i for i in flavors if i['id'] == flavor_id]))
@@ -126,7 +126,7 @@
flavors = sorted(flavors, key=lambda k: k['ram'])
flavor_id = flavors[0]['id']
- params = {'minRam': flavors[1]['ram']}
+ params = {'minRam': flavors[0]['ram'] + 1}
resp, flavors = self.client.list_flavors(params)
self.assertFalse(any([i for i in flavors if i['id'] == flavor_id]))
diff --git a/tempest/tests/network/test_network_basic_ops.py b/tempest/tests/network/test_network_basic_ops.py
index 1d88759..3c99f77 100644
--- a/tempest/tests/network/test_network_basic_ops.py
+++ b/tempest/tests/network/test_network_basic_ops.py
@@ -195,6 +195,8 @@
cls.keypairs = {}
cls.security_groups = {}
cls.networks = []
+ cls.subnets = []
+ cls.routers = []
cls.servers = []
cls.floating_ips = {}
@@ -301,6 +303,18 @@
self.set_resource(name, network)
return network
+ def _list_networks(self):
+ nets = self.network_client.list_networks()
+ return nets['networks']
+
+ def _list_subnets(self):
+ subnets = self.network_client.list_subnets()
+ return subnets['subnets']
+
+ def _list_routers(self):
+ routers = self.network_client.list_routers()
+ return routers['routers']
+
def _create_subnet(self, network):
"""
Create a subnet for the given network within the cidr block
@@ -406,8 +420,43 @@
subnet = self._create_subnet(network)
subnet.add_to_router(router.id)
self.networks.append(network)
+ self.subnets.append(subnet)
+ self.routers.append(router)
- def test_004_create_servers(self):
+ def test_004_check_networks(self):
+ #Checks that we see the newly created network/subnet/router via
+ #checking the result of list_[networks,routers,subnets]
+ seen_nets = self._list_networks()
+ seen_names = [n['name'] for n in seen_nets]
+ seen_ids = [n['id'] for n in seen_nets]
+ for mynet in self.networks:
+ assert mynet.name in seen_names, \
+ "Did not see expected network with name %s" % mynet.name
+ assert mynet.id in seen_ids, \
+ "Did not see expected network with id %s" % mynet.id
+ seen_subnets = self._list_subnets()
+ seen_net_ids = [n['network_id'] for n in seen_subnets]
+ seen_subnet_ids = [n['id'] for n in seen_subnets]
+ for mynet in self.networks:
+ assert mynet.id in seen_net_ids, \
+ "Did not see subnet belonging to network %s/%s" % \
+ (mynet.name, mynet.id)
+ for mysubnet in self.subnets:
+ assert mysubnet.id in seen_subnet_ids, \
+ "Did not see expected subnet with id %s" % \
+ mysubnet.id
+ seen_routers = self._list_routers()
+ seen_router_ids = [n['id'] for n in seen_routers]
+ seen_router_names = [n['name'] for n in seen_routers]
+ for myrouter in self.routers:
+ assert myrouter.name in seen_router_names, \
+ "Did not see expected router with name %s" % \
+ myrouter.name
+ assert myrouter.id in seen_router_ids, \
+ "Did not see expected router with id %s" % \
+ myrouter.id
+
+ def test_005_create_servers(self):
if not (self.keypairs or self.security_groups or self.networks):
raise nose.SkipTest('Necessary resources have not been defined')
for i, network in enumerate(self.networks):
@@ -419,7 +468,7 @@
name, keypair_name, security_groups)
self.servers.append(server)
- def test_005_check_tenant_network_connectivity(self):
+ def test_006_check_tenant_network_connectivity(self):
if not self.config.network.tenant_networks_reachable:
msg = 'Tenant networks not configured to be reachable.'
raise nose.SkipTest(msg)
@@ -432,7 +481,7 @@
"Timed out waiting for %s's ip to become "
"reachable" % server.name)
- def test_006_assign_floating_ips(self):
+ def test_007_assign_floating_ips(self):
public_network_id = self.config.network.public_network_id
if not public_network_id:
raise nose.SkipTest('Public network not configured')
@@ -443,7 +492,7 @@
self.floating_ips.setdefault(server, [])
self.floating_ips[server].append(floating_ip)
- def test_007_check_public_network_connectivity(self):
+ def test_008_check_public_network_connectivity(self):
if not self.floating_ips:
raise nose.SkipTest('No floating ips have been allocated.')
for server, floating_ips in self.floating_ips.iteritems():