Change testools to unittest2
This commit is contained in:
parent
913cf2a131
commit
3494289e29
|
@ -184,12 +184,12 @@ ComputeGroup = [
|
||||||
default=[],
|
default=[],
|
||||||
help="If false, skip config tests regardless of the "
|
help="If false, skip config tests regardless of the "
|
||||||
"extension status"),
|
"extension status"),
|
||||||
cfg.StrOpt('controller_node',
|
cfg.ListOpt('controller_node',
|
||||||
default='127.0.0.1',
|
default= [],
|
||||||
help="IP address of one of the controller nodes"),
|
help="IP address of one of the controller nodes"),
|
||||||
cfg.StrOpt('controller_node_name',
|
cfg.ListOpt('controller_node_name',
|
||||||
default='',
|
default= [],
|
||||||
help="DNS name of one of the controller nodes"),
|
help="DNS name of one of the controller nodes"),
|
||||||
cfg.StrOpt('controller_node_ssh_user',
|
cfg.StrOpt('controller_node_ssh_user',
|
||||||
default='ssh_user',
|
default='ssh_user',
|
||||||
help="ssh user of one of the controller nodes"),
|
help="ssh user of one of the controller nodes"),
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# This section contains configuration options that a variety of
|
# This section contains configuration options that a variety of
|
||||||
# test clients use when authenticating with different user/tenant
|
# test clients use when authenticating with different user/tenant
|
||||||
# combinations
|
# combinations
|
||||||
url = http://172.18.164.200/
|
url = http://172.18.198.75:8088/
|
||||||
# The type of endpoint for a Identity service. Unless you have a
|
# The type of endpoint for a Identity service. Unless you have a
|
||||||
# custom Keystone service catalog implementation, you probably want to leave
|
# custom Keystone service catalog implementation, you probably want to leave
|
||||||
# this value as "identity"
|
# this value as "identity"
|
||||||
|
@ -11,7 +11,7 @@ catalog_type = identity
|
||||||
# environments that have self-signed SSL certs.
|
# environments that have self-signed SSL certs.
|
||||||
disable_ssl_certificate_validation = False
|
disable_ssl_certificate_validation = False
|
||||||
# URL for where to find the OpenStack Identity API endpoint (Keystone)
|
# URL for where to find the OpenStack Identity API endpoint (Keystone)
|
||||||
uri = http://172.18.164.200:5000/v2.0
|
uri = http://172.18.198.75:8088/v2.0
|
||||||
# URL for where to find the OpenStack V3 Identity API endpoint (Keystone)
|
# URL for where to find the OpenStack V3 Identity API endpoint (Keystone)
|
||||||
#uri_v3 = http://127.0.0.1:5000/v3/
|
#uri_v3 = http://127.0.0.1:5000/v3/
|
||||||
# Should typically be left as keystone unless you have a non-Keystone
|
# Should typically be left as keystone unless you have a non-Keystone
|
||||||
|
@ -27,13 +27,6 @@ password = admin
|
||||||
# The above non-administrative user's tenant name
|
# The above non-administrative user's tenant name
|
||||||
tenant_name = admin
|
tenant_name = admin
|
||||||
|
|
||||||
# This should be the username of an alternate user WITHOUT
|
|
||||||
# administrative privileges
|
|
||||||
alt_username = alt_demo
|
|
||||||
# The above non-administrative user's password
|
|
||||||
alt_password = nova
|
|
||||||
# The above non-administrative user's tenant name
|
|
||||||
alt_tenant_name = alt_demo
|
|
||||||
|
|
||||||
# This should be the username of a user WITH administrative privileges
|
# This should be the username of a user WITH administrative privileges
|
||||||
admin_username = admin
|
admin_username = admin
|
||||||
|
@ -47,14 +40,14 @@ admin_tenant_name = admin
|
||||||
# against the OpenStack Compute API.
|
# against the OpenStack Compute API.
|
||||||
|
|
||||||
#One of the controller nodes
|
#One of the controller nodes
|
||||||
controller_node = 10.50.3.134
|
controller_node = 10.60.0.135
|
||||||
controller_node_name = controller-20.domain.tld.
|
controller_node_name = controller-7
|
||||||
|
|
||||||
#Controller node user who able connect via ssh
|
#Controller node user who able connect via ssh
|
||||||
controller_node_ssh_user = root
|
controller_node_ssh_user = root
|
||||||
|
|
||||||
#Controller node ssh user's password
|
#Controller node ssh user's password
|
||||||
controller_node_ssh_password =
|
controller_node_ssh_password = r00t
|
||||||
controller_node_ssh_key_path = ~/.ssh/id_rsa
|
controller_node_ssh_key_path = ~/.ssh/id_rsa
|
||||||
|
|
||||||
#The list of the services should be enabled
|
#The list of the services should be enabled
|
||||||
|
@ -75,7 +68,6 @@ allow_tenant_reuse = true
|
||||||
# Reference data for tests. The ref and ref_alt should be
|
# Reference data for tests. The ref and ref_alt should be
|
||||||
# distinct images/flavors.
|
# distinct images/flavors.
|
||||||
image_name = TestVM
|
image_name = TestVM
|
||||||
image_ref_alt = 53734a0d-60a8-4689-b7c8-3c14917a7197
|
|
||||||
flavor_ref = 1
|
flavor_ref = 1
|
||||||
flavor_ref_alt = 2
|
flavor_ref_alt = 2
|
||||||
|
|
||||||
|
@ -109,7 +101,7 @@ network_for_ssh = private
|
||||||
ip_version_for_ssh = 4
|
ip_version_for_ssh = 4
|
||||||
|
|
||||||
# Number of seconds to wait to authenticate to an instance
|
# Number of seconds to wait to authenticate to an instance
|
||||||
ssh_timeout = 300
|
ssh_timeout = 220
|
||||||
|
|
||||||
# Number of seconds to wait for output from ssh channel
|
# Number of seconds to wait for output from ssh channel
|
||||||
ssh_channel_timeout = 60
|
ssh_channel_timeout = 60
|
||||||
|
@ -191,13 +183,13 @@ tenant_network_mask_bits = 28
|
||||||
tenant_networks_reachable = true
|
tenant_networks_reachable = true
|
||||||
|
|
||||||
# Id of the public network that provides external connectivity.
|
# Id of the public network that provides external connectivity.
|
||||||
public_network_id = cdb94175-2002-449f-be41-6b8afce8de13
|
public_network_id =
|
||||||
|
|
||||||
# Id of a shared public router that provides external connectivity.
|
# Id of a shared public router that provides external connectivity.
|
||||||
# A shared public router would commonly be used where IP namespaces
|
# A shared public router would commonly be used where IP namespaces
|
||||||
# were disabled. If namespaces are enabled, it would be preferable
|
# were disabled. If namespaces are enabled, it would be preferable
|
||||||
# for each tenant to have their own router.
|
# for each tenant to have their own router.
|
||||||
public_router_id = 2a6bf65b-01f7-4c91-840a-2b5f676e7016
|
public_router_id =
|
||||||
|
|
||||||
# Whether or not quantum is expected to be available
|
# Whether or not quantum is expected to be available
|
||||||
quantum_available = false
|
quantum_available = false
|
||||||
|
@ -260,7 +252,6 @@ allow_tenant_reuse = true
|
||||||
# Reference data for tests. The ref and ref_alt should be
|
# Reference data for tests. The ref and ref_alt should be
|
||||||
# distinct images/flavors.
|
# distinct images/flavors.
|
||||||
image_name = TestVM
|
image_name = TestVM
|
||||||
image_ref_alt = 53734a0d-60a8-4689-b7c8-3c14917a7197
|
|
||||||
flavor_ref = 1
|
flavor_ref = 1
|
||||||
flavor_ref_alt = 2
|
flavor_ref_alt = 2
|
||||||
|
|
||||||
|
@ -294,7 +285,7 @@ network_for_ssh = net04
|
||||||
ip_version_for_ssh = 4
|
ip_version_for_ssh = 4
|
||||||
|
|
||||||
# Number of seconds to wait to authenticate to an instance
|
# Number of seconds to wait to authenticate to an instance
|
||||||
ssh_timeout = 320
|
ssh_timeout = 220
|
||||||
|
|
||||||
# Number of seconds to wait for output from ssh channel
|
# Number of seconds to wait for output from ssh channel
|
||||||
ssh_channel_timeout = 60
|
ssh_channel_timeout = 60
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import testtools
|
import unittest2
|
||||||
|
|
||||||
|
|
||||||
class FuelException(Exception):
|
class FuelException(Exception):
|
||||||
|
@ -53,7 +53,7 @@ class InvalidConfiguration(FuelException):
|
||||||
|
|
||||||
|
|
||||||
class RestClientException(FuelException,
|
class RestClientException(FuelException,
|
||||||
testtools.TestCase.failureException):
|
unittest2.TestCase.failureException):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -55,11 +55,11 @@ class OfficialClientManager(fuel_health.manager.Manager):
|
||||||
# identified user, so a new client needs to be created for
|
# identified user, so a new client needs to be created for
|
||||||
# each user that operations need to be performed for.
|
# each user that operations need to be performed for.
|
||||||
if not username:
|
if not username:
|
||||||
username = self.config.identity.username
|
username = self.config.identity.admin_username
|
||||||
if not password:
|
if not password:
|
||||||
password = self.config.identity.password
|
password = self.config.identity.admin_password
|
||||||
if not tenant_name:
|
if not tenant_name:
|
||||||
tenant_name = self.config.identity.tenant_name
|
tenant_name = self.config.identity.admin_tenant_name
|
||||||
|
|
||||||
if None in (username, password, tenant_name):
|
if None in (username, password, tenant_name):
|
||||||
msg = ("Missing required credentials for compute client. "
|
msg = ("Missing required credentials for compute client. "
|
||||||
|
@ -92,11 +92,11 @@ class OfficialClientManager(fuel_health.manager.Manager):
|
||||||
def _get_volume_client(self, username=None, password=None,
|
def _get_volume_client(self, username=None, password=None,
|
||||||
tenant_name=None):
|
tenant_name=None):
|
||||||
if not username:
|
if not username:
|
||||||
username = self.config.identity.username
|
username = self.config.identity.admin_username
|
||||||
if not password:
|
if not password:
|
||||||
password = self.config.identity.password
|
password = self.config.identity.admin_password
|
||||||
if not tenant_name:
|
if not tenant_name:
|
||||||
tenant_name = self.config.identity.tenant_name
|
tenant_name = self.config.identity.admin_tenant_name
|
||||||
|
|
||||||
auth_url = self.config.identity.uri
|
auth_url = self.config.identity.uri
|
||||||
return cinderclient.client.Client(self.CINDERCLIENT_VERSION,
|
return cinderclient.client.Client(self.CINDERCLIENT_VERSION,
|
||||||
|
@ -223,9 +223,9 @@ class NovaNetworkScenarioTest(OfficialClientTest):
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
super(NovaNetworkScenarioTest, cls).setUpClass()
|
super(NovaNetworkScenarioTest, cls).setUpClass()
|
||||||
cls.tenant_id = cls.manager._get_identity_client(
|
cls.tenant_id = cls.manager._get_identity_client(
|
||||||
cls.config.identity.username,
|
cls.config.identity.admin_username,
|
||||||
cls.config.identity.password,
|
cls.config.identity.admin_password,
|
||||||
cls.config.identity.tenant_name).tenant_id
|
cls.config.identity.admin_tenant_name).tenant_id
|
||||||
cls.network = []
|
cls.network = []
|
||||||
cls.floating_ips = []
|
cls.floating_ips = []
|
||||||
|
|
||||||
|
|
|
@ -17,12 +17,9 @@
|
||||||
|
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import signal
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
import nose.plugins.attrib
|
|
||||||
import testresources
|
import testresources
|
||||||
import testtools
|
import unittest2
|
||||||
|
|
||||||
from fuel_health import config
|
from fuel_health import config
|
||||||
from fuel_health import manager
|
from fuel_health import manager
|
||||||
|
@ -33,74 +30,7 @@ from fuel_health.common.test_mixins import FuelTestAssertMixin
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class TimeOutError(Exception):
|
class BaseTestCase(unittest2.TestCase,
|
||||||
def __init__(self):
|
|
||||||
Exception.__init__(self)
|
|
||||||
|
|
||||||
|
|
||||||
def _raise_TimeOut(sig, stack):
|
|
||||||
raise TimeOutError()
|
|
||||||
|
|
||||||
|
|
||||||
class ExecutionTimeout(object):
|
|
||||||
"""
|
|
||||||
Timeout context that will stop code running within context
|
|
||||||
if timeout (sec) is reached
|
|
||||||
|
|
||||||
>>with timeout(2):
|
|
||||||
... requests.get("http://msdn.com")
|
|
||||||
"""
|
|
||||||
def __init__(self, timeout):
|
|
||||||
self.timeout = timeout
|
|
||||||
|
|
||||||
def __enter__(self):
|
|
||||||
signal.signal(signal.SIGALRM, _raise_TimeOut)
|
|
||||||
signal.alarm(self.timeout)
|
|
||||||
|
|
||||||
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
||||||
signal.alarm(0) # disable the alarm
|
|
||||||
if exc_type is not TimeOutError:
|
|
||||||
return False # never swallow other exceptions
|
|
||||||
else:
|
|
||||||
call_that_caused_timeout = traceback.extract_tb(exc_tb)[0][-1]
|
|
||||||
msg = '''
|
|
||||||
{call} terminated with the timeout of {timeout} seconds.
|
|
||||||
Please check that this service timeout meets your expectation.
|
|
||||||
'''.format(call=call_that_caused_timeout, timeout=self.timeout)
|
|
||||||
raise AssertionError(msg)
|
|
||||||
|
|
||||||
|
|
||||||
def attr(*args, **kwargs):
|
|
||||||
"""A decorator which applies the nose and testtools attr decorator
|
|
||||||
|
|
||||||
This decorator applies the nose attr decorator as well as the
|
|
||||||
the testtools.testcase.attr if it is in the list of attributes
|
|
||||||
to testtools we want to apply.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def decorator(f):
|
|
||||||
if 'type' in kwargs and isinstance(kwargs['type'], str):
|
|
||||||
f = testtools.testcase.attr(kwargs['type'])(f)
|
|
||||||
if kwargs['type'] == 'smoke':
|
|
||||||
f = testtools.testcase.attr('smoke')(f)
|
|
||||||
elif 'type' in kwargs and isinstance(kwargs['type'], str):
|
|
||||||
f = testtools.testcase.attr(kwargs['type'])(f)
|
|
||||||
if kwargs['type'] == 'sanity':
|
|
||||||
f = testtools.testcase.attr('sanity')(f)
|
|
||||||
elif 'type' in kwargs and isinstance(kwargs['type'], list):
|
|
||||||
for attr in kwargs['type']:
|
|
||||||
f = testtools.testcase.attr(attr)(f)
|
|
||||||
if attr == 'sanity':
|
|
||||||
f = testtools.testcase.attr('sanity')(f)
|
|
||||||
elif attr == 'smoke':
|
|
||||||
f = testtools.testcase.attr('smoke')(f)
|
|
||||||
return nose.plugins.attrib.attr(*args, **kwargs)(f)
|
|
||||||
|
|
||||||
return decorator
|
|
||||||
|
|
||||||
|
|
||||||
class BaseTestCase(testtools.TestCase,
|
|
||||||
testtools.testcase.WithAttributes,
|
|
||||||
testresources.ResourcedTestCase,
|
testresources.ResourcedTestCase,
|
||||||
FuelTestAssertMixin):
|
FuelTestAssertMixin):
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
from fuel_health.test import attr
|
from nose.plugins.attrib import attr
|
||||||
|
from nose.tools import timed
|
||||||
|
|
||||||
from fuel_health.tests.sanity import base
|
from fuel_health.tests.sanity import base
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,6 +11,7 @@ class SanityComputeTest(base.BaseComputeTest):
|
||||||
_interface = 'json'
|
_interface = 'json'
|
||||||
|
|
||||||
@attr(type=['sanity', 'fuel'])
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(5.5)
|
||||||
def test_list_instances(self):
|
def test_list_instances(self):
|
||||||
"""Test checks that existing instances can be listed."""
|
"""Test checks that existing instances can be listed."""
|
||||||
resp, body = self.servers_client.list_servers()
|
resp, body = self.servers_client.list_servers()
|
||||||
|
@ -18,6 +21,7 @@ class SanityComputeTest(base.BaseComputeTest):
|
||||||
'Looks like something is broken in Nova.')
|
'Looks like something is broken in Nova.')
|
||||||
|
|
||||||
@attr(type=['sanity', 'fuel'])
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(5.5)
|
||||||
def test_list_images(self):
|
def test_list_images(self):
|
||||||
"""Test checks that existing images can be listed."""
|
"""Test checks that existing images can be listed."""
|
||||||
resp, body = self.images_client.list_images()
|
resp, body = self.images_client.list_images()
|
||||||
|
@ -27,6 +31,7 @@ class SanityComputeTest(base.BaseComputeTest):
|
||||||
'Looks like something is broken in Glance.')
|
'Looks like something is broken in Glance.')
|
||||||
|
|
||||||
@attr(type=['sanity', 'fuel'])
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(5.5)
|
||||||
def test_list_volumes(self):
|
def test_list_volumes(self):
|
||||||
"""Test checks that existing volumes can be listed."""
|
"""Test checks that existing volumes can be listed."""
|
||||||
resp, body = self.volumes_client.list_volumes()
|
resp, body = self.volumes_client.list_volumes()
|
||||||
|
@ -36,6 +41,7 @@ class SanityComputeTest(base.BaseComputeTest):
|
||||||
'Looks like something is broken in Swift.')
|
'Looks like something is broken in Swift.')
|
||||||
|
|
||||||
@attr(type=['sanity', 'fuel'])
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(5.5)
|
||||||
def test_list_snapshots(self):
|
def test_list_snapshots(self):
|
||||||
"""Test checks that existing snapshots can be listed."""
|
"""Test checks that existing snapshots can be listed."""
|
||||||
resp, body = self.snapshots_client.list_snapshots()
|
resp, body = self.snapshots_client.list_snapshots()
|
||||||
|
@ -45,6 +51,7 @@ class SanityComputeTest(base.BaseComputeTest):
|
||||||
'Looks like something is broken in Swift.')
|
'Looks like something is broken in Swift.')
|
||||||
|
|
||||||
@attr(type=['sanity', 'fuel'])
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(5.5)
|
||||||
def test_list_flavors(self):
|
def test_list_flavors(self):
|
||||||
"""Test checks that existing flavors can be listed."""
|
"""Test checks that existing flavors can be listed."""
|
||||||
resp, body = self.flavors_client.list_flavors()
|
resp, body = self.flavors_client.list_flavors()
|
||||||
|
@ -54,6 +61,7 @@ class SanityComputeTest(base.BaseComputeTest):
|
||||||
'Looks like something is broken in Nova.')
|
'Looks like something is broken in Nova.')
|
||||||
|
|
||||||
@attr(type=['sanity', 'fuel'])
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(5.5)
|
||||||
def test_list_rate_limits(self):
|
def test_list_rate_limits(self):
|
||||||
"""Test checks that absolute limits can be listed."""
|
"""Test checks that absolute limits can be listed."""
|
||||||
resp, body = self.limits_client.get_absolute_limits()
|
resp, body = self.limits_client.get_absolute_limits()
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
|
from nose.plugins.attrib import attr
|
||||||
|
from nose.tools import timed
|
||||||
|
|
||||||
from fuel_health.tests.sanity import base
|
from fuel_health.tests.sanity import base
|
||||||
from fuel_health.test import attr
|
|
||||||
|
|
||||||
|
|
||||||
class ServicesTestJSON(base.BaseIdentityAdminTest):
|
class ServicesTestJSON(base.BaseIdentityAdminTest):
|
||||||
|
@ -10,6 +12,7 @@ class ServicesTestJSON(base.BaseIdentityAdminTest):
|
||||||
_interface = 'json'
|
_interface = 'json'
|
||||||
|
|
||||||
@attr(type=['sanity', 'fuel'])
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(5.5)
|
||||||
def test_list_services(self):
|
def test_list_services(self):
|
||||||
"""Test checks that active services can be listed."""
|
"""Test checks that active services can be listed."""
|
||||||
resp, body = self.client.list_services()
|
resp, body = self.client.list_services()
|
||||||
|
@ -19,6 +22,7 @@ class ServicesTestJSON(base.BaseIdentityAdminTest):
|
||||||
u'Looks like something is broken in Nova.')
|
u'Looks like something is broken in Nova.')
|
||||||
|
|
||||||
@attr(type=['sanity', 'fuel'])
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(5.5)
|
||||||
def test_list_users(self):
|
def test_list_users(self):
|
||||||
"""Test checks that existing users can be listed."""
|
"""Test checks that existing users can be listed."""
|
||||||
resp, body = self.client.get_users()
|
resp, body = self.client.get_users()
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
|
from nose.plugins.attrib import attr
|
||||||
|
from nose.tools import timed
|
||||||
|
|
||||||
from fuel_health.common.ssh import Client as SSHClient
|
from fuel_health.common.ssh import Client as SSHClient
|
||||||
from fuel_health.exceptions import SSHExecCommandFailed
|
from fuel_health.exceptions import SSHExecCommandFailed
|
||||||
from fuel_health.test import attr
|
|
||||||
from fuel_health.test import ExecutionTimeout
|
|
||||||
from fuel_health.tests.sanity import base
|
from fuel_health.tests.sanity import base
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,37 +30,55 @@ class SanityInfrastructureTest(base.BaseComputeAdminTest):
|
||||||
cls.pwd = cls.config.compute.controller_node_ssh_password
|
cls.pwd = cls.config.compute.controller_node_ssh_password
|
||||||
cls.key = cls.config.compute.controller_node_ssh_key_path
|
cls.key = cls.config.compute.controller_node_ssh_key_path
|
||||||
cls.hostname = cls.config.compute.controller_node_name
|
cls.hostname = cls.config.compute.controller_node_name
|
||||||
|
cls.timeout = cls.config.compute.ssh_timeout
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def tearDownClass(cls):
|
def tearDownClass(cls):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@attr(type=['sanity', 'fuel'])
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(5.5)
|
||||||
def test_services_state(self):
|
def test_services_state(self):
|
||||||
"""Test all of the expected services are on."""
|
"""Test all of the expected services are on."""
|
||||||
output_msg = ''
|
output_msg = ''
|
||||||
try:
|
cmd = 'nova-manage service list'
|
||||||
output = SSHClient(self.host, self.usr, self.pwd,
|
if len(self.hostname) and len(self.host):
|
||||||
pkey=self.key).exec_command('nova-manage '
|
|
||||||
'service list')
|
|
||||||
except SSHExecCommandFailed:
|
|
||||||
output_msg = "Error: 'nova-manage' command execution failed."
|
|
||||||
|
|
||||||
output_msg = output_msg or ('Some service has not been started:' +
|
try:
|
||||||
str(self.list_of_expected_services))
|
output = SSHClient(self.host[0],
|
||||||
self.assertFalse(u'XXX' in output, output_msg)
|
self.usr, self.pwd,
|
||||||
self.assertTrue(len(self.list_of_expected_services) <=
|
pkey=self.key,
|
||||||
output.count(u':-)'),
|
timeout=self.timeout).exec_command(cmd)
|
||||||
output_msg)
|
except SSHExecCommandFailed:
|
||||||
|
output_msg = "Error: 'nova-manage' command execution failed."
|
||||||
|
|
||||||
|
output_msg = output_msg or (
|
||||||
|
'Some service has not been started:' + str(
|
||||||
|
self.list_of_expected_services))
|
||||||
|
self.assertFalse(u'XXX' in output, output_msg)
|
||||||
|
self.assertTrue(len(self.list_of_expected_services) <=
|
||||||
|
output.count(u':-)'),
|
||||||
|
output_msg)
|
||||||
|
else:
|
||||||
|
self.fail('Wrong tests configurations, one from the next '
|
||||||
|
'parameters are empty controller_node_name or '
|
||||||
|
'controller_node_ip ')
|
||||||
|
|
||||||
@attr(type=['sanity', 'fuel'])
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(5.5)
|
||||||
def test_dns_state(self):
|
def test_dns_state(self):
|
||||||
"""Test dns is available."""
|
"""Test dns is available."""
|
||||||
expected_output = "in-addr.arpa domain name pointer " + self.hostname
|
if len(self.hostname) and len(self.host):
|
||||||
try:
|
expected_output = "in-addr.arpa domain name pointer"
|
||||||
output = SSHClient(self.host, self.usr, self.pwd,
|
cmd = "host " + self.host[0]
|
||||||
pkey=self.key).exec_command("host " + self.host)
|
try:
|
||||||
except SSHExecCommandFailed:
|
output = SSHClient(self.host[0], self.usr, self.pwd,
|
||||||
output = "'host' command failed."
|
pkey=self.key, timeout=self.timeout).exec_command(cmd)
|
||||||
self.assertTrue(expected_output in output,
|
except SSHExecCommandFailed:
|
||||||
'DNS name cannot be resolved')
|
output = "'host' command failed."
|
||||||
|
self.assertTrue(expected_output in output,
|
||||||
|
'DNS name cannot be resolved')
|
||||||
|
else:
|
||||||
|
self.fail('Wrong tests configurations, one from the next '
|
||||||
|
'parameters are empty controller_node_name or '
|
||||||
|
'controller_node_ip ')
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
from fuel_health.test import attr
|
from nose.plugins.attrib import attr
|
||||||
|
from nose.tools import timed
|
||||||
|
|
||||||
from fuel_health.tests.sanity import base
|
from fuel_health.tests.sanity import base
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,6 +10,7 @@ class NetworksTest(base.BaseNetworkTest):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@attr(type=['sanity', 'fuel'])
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(5.5)
|
||||||
def test_list_networks(self):
|
def test_list_networks(self):
|
||||||
"""Test checks that available networks can be listed."""
|
"""Test checks that available networks can be listed."""
|
||||||
resp, body = self.client.list_networks()
|
resp, body = self.client.list_networks()
|
||||||
|
@ -18,6 +21,7 @@ class NetworksTest(base.BaseNetworkTest):
|
||||||
"(Neutron or Nova).")
|
"(Neutron or Nova).")
|
||||||
|
|
||||||
@attr(type=['sanity', 'fuel'])
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(5.5)
|
||||||
def test_list_ports(self):
|
def test_list_ports(self):
|
||||||
"""Test checks that existing ports can be listed."""
|
"""Test checks that existing ports can be listed."""
|
||||||
resp, body = self.client.list_ports()
|
resp, body = self.client.list_ports()
|
||||||
|
|
|
@ -154,7 +154,7 @@ class BaseComputeAdminTest(BaseComputeTest):
|
||||||
cls.client = cls.os_adm.flavors_client
|
cls.client = cls.os_adm.flavors_client
|
||||||
cls.user_client = cls.os.flavors_client
|
cls.user_client = cls.os.flavors_client
|
||||||
new_flavor_id = rand_int_id(start=1000)
|
new_flavor_id = rand_int_id(start=1000)
|
||||||
name = 'ost1_test-flavor' + cls.__name__
|
name = rand_name('ost1_test-flavor' + cls.__name__)
|
||||||
|
|
||||||
f_params = {'name': name,
|
f_params = {'name': name,
|
||||||
'ram': 256,
|
'ram': 256,
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
from nose.plugins.attrib import attr
|
||||||
|
from nose.tools import timed
|
||||||
|
|
||||||
from fuel_health.test import attr
|
|
||||||
from fuel_health.tests.smoke import base
|
from fuel_health.tests.smoke import base
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,16 +13,16 @@ class FlavorsAdminTest(base.BaseComputeAdminTest):
|
||||||
_interface = 'json'
|
_interface = 'json'
|
||||||
|
|
||||||
@attr(type=["fuel", "smoke"])
|
@attr(type=["fuel", "smoke"])
|
||||||
|
@timed(10.9)
|
||||||
def test_create_flavor(self):
|
def test_create_flavor(self):
|
||||||
"""Test low requirements flavor can be created."""
|
"""Test low requirements flavor can be created."""
|
||||||
resp, flavor = self.create_flavor(ram=255,
|
resp, flavor = self.create_flavor(ram=255,
|
||||||
name='ost1_test-flavor-smoke-test',
|
|
||||||
disk=1)
|
disk=1)
|
||||||
|
|
||||||
self.verify_response_status(
|
self.verify_response_status(
|
||||||
resp.status, appl="Nova")
|
resp.status, appl="Nova")
|
||||||
self.verify_response_body_value(
|
self.verify_response_body(
|
||||||
flavor['name'], u'ost1_test-flavor-smoke-test',
|
flavor['name'], u'ost1_test-flavor',
|
||||||
msg="Flavor name is not the same as requested.")
|
msg="Flavor name is not the same as requested.")
|
||||||
self.verify_response_body_value(
|
self.verify_response_body_value(
|
||||||
flavor['disk'], 1,
|
flavor['disk'], 1,
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
|
from nose.plugins.attrib import attr
|
||||||
|
from nose.tools import timed
|
||||||
|
|
||||||
from fuel_health.common.utils.data_utils import rand_name
|
from fuel_health.common.utils.data_utils import rand_name
|
||||||
from fuel_health.test import attr
|
|
||||||
from fuel_health.tests.smoke import base
|
from fuel_health.tests.smoke import base
|
||||||
|
|
||||||
class VolumesTest(base.BaseComputeTest):
|
class VolumesTest(base.BaseComputeTest):
|
||||||
|
@ -23,6 +25,7 @@ class VolumesTest(base.BaseComputeTest):
|
||||||
super(VolumesTest, cls).tearDownClass()
|
super(VolumesTest, cls).tearDownClass()
|
||||||
|
|
||||||
@attr(type=["fuel", "smoke"])
|
@attr(type=["fuel", "smoke"])
|
||||||
|
@timed(60.5)
|
||||||
def test_volume_create(self):
|
def test_volume_create(self):
|
||||||
"""Test volume can be created, attached to an instance, detached and deleted."""
|
"""Test volume can be created, attached to an instance, detached and deleted."""
|
||||||
v_name = rand_name('ost1_test-test')
|
v_name = rand_name('ost1_test-test')
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
import logging
|
import logging
|
||||||
|
from nose.plugins.attrib import attr
|
||||||
|
from nose.tools import timed
|
||||||
|
|
||||||
|
|
||||||
from fuel_health.common.utils.data_utils import rand_name
|
from fuel_health.common.utils.data_utils import rand_name
|
||||||
from fuel_health import nmanager
|
from fuel_health import nmanager
|
||||||
|
@ -63,6 +66,8 @@ class TestImageAction(nmanager.OfficialClientTest):
|
||||||
msg="Looks like Glance service doesn`t work properly.")
|
msg="Looks like Glance service doesn`t work properly.")
|
||||||
return image_id
|
return image_id
|
||||||
|
|
||||||
|
@attr(type=['sanity', 'fuel'])
|
||||||
|
@timed(130.9)
|
||||||
def test_snapshot(self):
|
def test_snapshot(self):
|
||||||
"""Test instance can be booted and snapshoted from new image."""
|
"""Test instance can be booted and snapshoted from new image."""
|
||||||
# prepare for booting a instance
|
# prepare for booting a instance
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
|
from nose.plugins.attrib import attr
|
||||||
|
from nose.tools import timed
|
||||||
|
|
||||||
from fuel_health.common.utils.data_utils import rand_name
|
from fuel_health.common.utils.data_utils import rand_name
|
||||||
from fuel_health import nmanager
|
from fuel_health import nmanager
|
||||||
from fuel_health.test import attr
|
|
||||||
|
|
||||||
|
|
||||||
class TestNovaNetwork(nmanager.NovaNetworkScenarioTest):
|
class TestNovaNetwork(nmanager.NovaNetworkScenarioTest):
|
||||||
|
@ -21,7 +23,7 @@ class TestNovaNetwork(nmanager.NovaNetworkScenarioTest):
|
||||||
super(TestNovaNetwork, cls).check_preconditions()
|
super(TestNovaNetwork, cls).check_preconditions()
|
||||||
cfg = cls.config.network
|
cfg = cls.config.network
|
||||||
if not cfg.tenant_networks_reachable:
|
if not cfg.tenant_networks_reachable:
|
||||||
msg = 'Either tenant_networks_reachable must be "true.'
|
msg = 'Either tenant networks reachable must be "true.'
|
||||||
cls.enabled = False
|
cls.enabled = False
|
||||||
raise cls.skipException(msg)
|
raise cls.skipException(msg)
|
||||||
|
|
||||||
|
@ -30,9 +32,9 @@ class TestNovaNetwork(nmanager.NovaNetworkScenarioTest):
|
||||||
super(TestNovaNetwork, cls).setUpClass()
|
super(TestNovaNetwork, cls).setUpClass()
|
||||||
cls.check_preconditions()
|
cls.check_preconditions()
|
||||||
cls.tenant_id = cls.manager._get_identity_client(
|
cls.tenant_id = cls.manager._get_identity_client(
|
||||||
cls.config.identity.username,
|
cls.config.identity.admin_username,
|
||||||
cls.config.identity.password,
|
cls.config.identity.admin_password,
|
||||||
cls.config.identity.tenant_name).tenant_id
|
cls.config.identity.admin_tenant_name).tenant_id
|
||||||
|
|
||||||
cls.keypairs = {}
|
cls.keypairs = {}
|
||||||
cls.security_groups = {}
|
cls.security_groups = {}
|
||||||
|
@ -41,24 +43,21 @@ class TestNovaNetwork(nmanager.NovaNetworkScenarioTest):
|
||||||
cls.floating_ips = []
|
cls.floating_ips = []
|
||||||
|
|
||||||
@attr(type=['fuel', 'smoke'])
|
@attr(type=['fuel', 'smoke'])
|
||||||
|
@timed(20.5)
|
||||||
def test_001_create_keypairs(self):
|
def test_001_create_keypairs(self):
|
||||||
""" Test verifies keypair creation """
|
""" Test verifies keypair creation """
|
||||||
self.keypairs[self.tenant_id] = self._create_keypair(
|
self.keypairs[self.tenant_id] = self._create_keypair(
|
||||||
self.compute_client)
|
self.compute_client)
|
||||||
|
|
||||||
@attr(type=['fuel', 'smoke'])
|
@attr(type=['fuel', 'smoke'])
|
||||||
|
@timed(20.5)
|
||||||
def test_002_create_security_groups(self):
|
def test_002_create_security_groups(self):
|
||||||
"""Test verifies security group creation"""
|
"""Test verifies security group creation"""
|
||||||
self.security_groups[self.tenant_id] = self._create_security_group(
|
self.security_groups[self.tenant_id] = self._create_security_group(
|
||||||
self.compute_client)
|
self.compute_client)
|
||||||
|
|
||||||
@attr(type=['fuel', 'smoke'])
|
@attr(type=['fuel', 'smoke'])
|
||||||
def test_003_create_networks(self):
|
@timed(45.5)
|
||||||
"""Test verifies network creation"""
|
|
||||||
networks = self._create_network()
|
|
||||||
self.network.append(networks)
|
|
||||||
|
|
||||||
@attr(type=['fuel', 'smoke'])
|
|
||||||
def test_004_check_networks(self):
|
def test_004_check_networks(self):
|
||||||
"""Test verifies created network"""
|
"""Test verifies created network"""
|
||||||
seen_nets = self._list_networks()
|
seen_nets = self._list_networks()
|
||||||
|
@ -71,10 +70,11 @@ class TestNovaNetwork(nmanager.NovaNetworkScenarioTest):
|
||||||
'properly'))
|
'properly'))
|
||||||
self.verify_response_body(seen_ids,
|
self.verify_response_body(seen_ids,
|
||||||
mynet.id,
|
mynet.id,
|
||||||
('Network does is created'
|
('Network is not created'
|
||||||
' properly '))
|
' properly '))
|
||||||
|
|
||||||
@attr(type=['fuel', 'smoke'])
|
@attr(type=['fuel', 'smoke'])
|
||||||
|
@timed(60.7)
|
||||||
def test_005_create_servers(self):
|
def test_005_create_servers(self):
|
||||||
"""
|
"""
|
||||||
Test verifies instance creation
|
Test verifies instance creation
|
||||||
|
@ -94,7 +94,6 @@ class TestNovaNetwork(nmanager.NovaNetworkScenarioTest):
|
||||||
self.fail("Necessary resources for booting instance"
|
self.fail("Necessary resources for booting instance"
|
||||||
" has not been created")
|
" has not been created")
|
||||||
|
|
||||||
#for i, network in enumerate(self.networks):
|
|
||||||
name = rand_name('ost1_test-server-smoke-')
|
name = rand_name('ost1_test-server-smoke-')
|
||||||
keypair_name = self.keypairs[self.tenant_id].name
|
keypair_name = self.keypairs[self.tenant_id].name
|
||||||
security_groups = [self.security_groups[self.tenant_id].name]
|
security_groups = [self.security_groups[self.tenant_id].name]
|
||||||
|
@ -104,6 +103,7 @@ class TestNovaNetwork(nmanager.NovaNetworkScenarioTest):
|
||||||
self.servers.append(server)
|
self.servers.append(server)
|
||||||
|
|
||||||
@attr(type=['fuel', 'smoke'])
|
@attr(type=['fuel', 'smoke'])
|
||||||
|
@timed(45.9)
|
||||||
def test_006_check_tenant_network_connectivity(self):
|
def test_006_check_tenant_network_connectivity(self):
|
||||||
"""
|
"""
|
||||||
Test verifies created network connectivity
|
Test verifies created network connectivity
|
||||||
|
@ -146,7 +146,9 @@ class TestNovaNetwork(nmanager.NovaNetworkScenarioTest):
|
||||||
private_key)
|
private_key)
|
||||||
|
|
||||||
@attr(type=['fuel', 'smoke'])
|
@attr(type=['fuel', 'smoke'])
|
||||||
|
@timed(49.9)
|
||||||
def test_007_assign_floating_ips(self):
|
def test_007_assign_floating_ips(self):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Test verifies assignment of floating ip to created instance
|
Test verifies assignment of floating ip to created instance
|
||||||
"""
|
"""
|
||||||
|
@ -181,6 +183,7 @@ class TestNovaNetwork(nmanager.NovaNetworkScenarioTest):
|
||||||
self.floating_ips.append(floating_ip)
|
self.floating_ips.append(floating_ip)
|
||||||
|
|
||||||
@attr(type=['fuel', 'smoke'])
|
@attr(type=['fuel', 'smoke'])
|
||||||
|
@timed(49.9)
|
||||||
def test_008_check_public_network_connectivity(self):
|
def test_008_check_public_network_connectivity(self):
|
||||||
"""
|
"""
|
||||||
Test verifies network connectivity trough floating ip
|
Test verifies network connectivity trough floating ip
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import requests
|
import requests
|
||||||
|
from nose.plugins.attrib import attr
|
||||||
|
from nose.tools import timed
|
||||||
|
|
||||||
from fuel_health.common.utils import data_utils
|
from fuel_health.common.utils import data_utils
|
||||||
from fuel_health.test import attr
|
|
||||||
from fuel_health.tests.smoke import base
|
from fuel_health.tests.smoke import base
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,6 +24,7 @@ class TestUserTenantRole(base.BaseIdentityAdminTest):
|
||||||
alt_role = data_utils.rand_name('ost1_test-role_')
|
alt_role = data_utils.rand_name('ost1_test-role_')
|
||||||
|
|
||||||
@attr(type=["fuel", "smoke"])
|
@attr(type=["fuel", "smoke"])
|
||||||
|
@timed(30.9)
|
||||||
def test_create_user(self):
|
def test_create_user(self):
|
||||||
""" Test verifies user creation and auth in Horizon """
|
""" Test verifies user creation and auth in Horizon """
|
||||||
# Create a tenant:
|
# Create a tenant:
|
||||||
|
|
|
@ -29,6 +29,6 @@ setuptools-git==1.0
|
||||||
simplejson==3.3.0
|
simplejson==3.3.0
|
||||||
six==1.3.0
|
six==1.3.0
|
||||||
testresources==0.2.7
|
testresources==0.2.7
|
||||||
testtools==0.9.32
|
|
||||||
warlock==1.0.1
|
warlock==1.0.1
|
||||||
wsgiref==0.1.2
|
wsgiref==0.1.2
|
||||||
|
unittest2==0.5.1
|
||||||
|
|
1
setup.py
1
setup.py
|
@ -31,6 +31,7 @@ requirements = ['argparse==1.2.1',
|
||||||
'requests==1.2.3',
|
'requests==1.2.3',
|
||||||
'setuptools-git==1.0',
|
'setuptools-git==1.0',
|
||||||
'simplejson==3.3.0',
|
'simplejson==3.3.0',
|
||||||
|
'unittest2',
|
||||||
'six==1.3.0',
|
'six==1.3.0',
|
||||||
'testresources==0.2.7',
|
'testresources==0.2.7',
|
||||||
'testtools==0.9.32',
|
'testtools==0.9.32',
|
||||||
|
|
Loading…
Reference in New Issue