Bay test cleanup

Removed some COE tests that duplicate the functional-api tests.
Consolidated duplicate code around certificates and made BayTest
always create and delete a bay so that the COE api tests can all
work off of a single bay per class.

Change-Id: I2ff7e2fd587657fb4dd171c1470c5bb208c331b5
Closes-Bug: 1544196
This commit is contained in:
Corey O'Brien 2016-02-05 15:41:08 -05:00
parent 547780e22b
commit 7dff331a96
5 changed files with 69 additions and 152 deletions

View File

@ -27,7 +27,7 @@ from magnum import objects
docker_opts = [
cfg.StrOpt('docker_remote_api_version',
default='1.17',
default='1.20',
help='Docker remote api version. Override it according to '
'specific docker api version in your environment.'),
cfg.IntOpt('default_timeout',

View File

@ -12,50 +12,21 @@
from magnum.common.pythonk8sclient.swagger_client import api_client
from magnum.common.pythonk8sclient.swagger_client.apis import apiv_api
from magnum.tests.functional.python_client_base import BayAPITLSTest
from magnum.tests.functional.python_client_base import BayTest
class TestBayModelResource(BayTest):
class TestKubernetesAPIs(BayTest):
coe = 'kubernetes'
baymodel_kwargs = {
"tls_disabled": False,
"network_driver": 'flannel',
"volume_driver": 'cinder',
"fixed_network": '192.168.0.0/24'
}
def test_baymodel_create_and_delete(self):
self._test_baymodel_create_and_delete('test_k8s_baymodel')
class TestBayResource(BayTest):
coe = 'kubernetes'
def test_bay_create_and_delete(self):
baymodel_uuid = self._test_baymodel_create_and_delete(
'test_k8s_baymodel', delete=False, tls_disabled=True)
self._test_bay_create_and_delete('test_k8s_bay', baymodel_uuid)
class TestKubernetesAPIs(BayAPITLSTest):
@classmethod
def setUpClass(cls):
super(TestKubernetesAPIs, cls).setUpClass()
cls.baymodel = cls._create_baymodel('testk8sAPI',
coe='kubernetes',
tls_disabled=False,
network_driver='flannel',
volume_driver='cinder',
fixed_network='192.168.0.0/24',
)
cls.bay = cls._create_bay('testk8sAPI', cls.baymodel.uuid)
config_contents = """[req]
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[req_distinguished_name]
CN = Your Name
[req_ext]
extendedKeyUsage = clientAuth
"""
cls._create_tls_ca_files(config_contents)
cls.kube_api_url = cls.cs.bays.get(cls.bay.uuid).api_address
k8s_client = api_client.ApiClient(cls.kube_api_url,
key_file=cls.key_file,

View File

@ -13,20 +13,13 @@
from magnum.tests.functional.python_client_base import BayTest
class TestBayModelResource(BayTest):
coe = 'mesos'
def test_baymodel_create_and_delete(self):
self._test_baymodel_create_and_delete('test_mesos_baymodel',
network_driver='docker',
volume_driver='rexray')
class TestBayResource(BayTest):
coe = 'mesos'
baymodel_kwargs = {
"tls_disabled": True,
"network_driver": 'docker',
"volume_driver": 'rexray'
}
def test_bay_create_and_delete(self):
baymodel_uuid = self._test_baymodel_create_and_delete(
'test_mesos_baymodel', delete=False, tls_disabled=True,
network_driver='docker', volume_driver='rexray')
self._test_bay_create_and_delete('test_mesos_bay', baymodel_uuid)
pass

View File

@ -160,6 +160,17 @@ class BaseMagnumClient(base.TestCase):
def _delete_bay(cls, bay_uuid):
cls.cs.bays.delete(bay_uuid)
try:
cls._wait_on_status(cls.bay,
["CREATE_COMPLETE",
"DELETE_IN_PROGRESS", "CREATE_FAILED"],
["DELETE_FAILED", "DELETE_COMPLETE"])
except exceptions.NotFound:
pass
else:
if cls._show_bay(cls.bay.uuid).status == 'DELETE_FAILED':
raise Exception("bay %s delete failed" % cls.bay.uuid)
def _copy_logs(self, exec_info):
if not self.copy_logs:
return
@ -181,6 +192,39 @@ class BayTest(BaseMagnumClient):
# NOTE (eliqiao) coe should be specified in subclasses
coe = None
baymodel_kwargs = {}
config_contents = """[req]
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[req_distinguished_name]
CN = Your Name
[req_ext]
extendedKeyUsage = clientAuth
"""
ca_dir = None
bay = None
baymodel = None
@classmethod
def setUpClass(cls):
super(BayTest, cls).setUpClass()
cls.baymodel = cls._create_baymodel(
cls.__name__, coe=cls.coe, **cls.baymodel_kwargs)
cls.bay = cls._create_bay(cls.__name__, cls.baymodel.uuid)
if not cls.baymodel_kwargs.get('tls_disabled', False):
cls._create_tls_ca_files(cls.config_contents)
@classmethod
def tearDownClass(cls):
if cls.ca_dir:
rmtree_without_raise(cls.ca_dir)
if cls.bay:
cls._delete_bay(cls.bay.uuid)
if cls.baymodel:
cls._delete_baymodel(cls.baymodel.uuid)
super(BayTest, cls).tearDownClass()
def setUp(self):
super(BayTest, self).setUp()
@ -194,73 +238,6 @@ class BayTest(BaseMagnumClient):
if test_timeout > 0:
self.useFixture(fixtures.Timeout(test_timeout, gentle=True))
def _test_baymodel_create_and_delete(self, baymodel_name,
delete=True, **kwargs):
baymodel = self._create_baymodel(baymodel_name, coe=self.coe, **kwargs)
list = [item.uuid for item in self.cs.baymodels.list()]
self.assertIn(baymodel.uuid, list)
if not delete:
return baymodel
else:
self.cs.baymodels.delete(baymodel.uuid)
list = [item.uuid for item in self.cs.baymodels.list()]
self.assertNotIn(baymodel.uuid, list)
def _test_bay_create_and_delete(self, bay_name, baymodel):
# NOTE(eliqiao): baymodel will be deleted after this testing
bay = self._create_bay(bay_name, baymodel.uuid)
list = [item.uuid for item in self.cs.bays.list()]
self.assertIn(bay.uuid, list)
try:
self.assertIn(self.cs.bays.get(bay.uuid).status,
["CREATED", "CREATE_COMPLETE"])
finally:
# Ensure we delete whether the assert above is true or false
self.cs.bays.delete(bay.uuid)
try:
self._wait_on_status(bay,
["CREATE_COMPLETE",
"DELETE_IN_PROGRESS", "CREATE_FAILED"],
["DELETE_FAILED",
"DELETE_COMPLETE"])
except exceptions.NotFound:
# if bay/get fails, the bay has been deleted already
pass
try:
self.cs.baymodels.delete(baymodel.uuid)
except exceptions.BadRequest:
pass
class BayAPITLSTest(BaseMagnumClient):
"""Base class of TLS enabled test case."""
def setUp(self):
super(BayAPITLSTest, self).setUp()
self.addOnException(self._copy_logs)
@classmethod
def tearDownClass(cls):
if cls.ca_dir:
rmtree_without_raise(cls.ca_dir)
cls._delete_bay(cls.bay.uuid)
try:
cls._wait_on_status(cls.bay,
["CREATE_COMPLETE",
"DELETE_IN_PROGRESS", "CREATE_FAILED"],
["DELETE_FAILED", "DELETE_COMPLETE"])
except exceptions.NotFound:
pass
cls._delete_baymodel(cls.baymodel.uuid)
super(BayAPITLSTest, cls).tearDownClass()
@classmethod
def _create_tls_ca_files(cls, client_conf_contents):
"""Creates ca files by client_conf_contents."""

View File

@ -15,7 +15,6 @@ from requests import exceptions as req_exceptions
import time
from magnum.common import docker_utils
from magnum.tests.functional.python_client_base import BayAPITLSTest
from magnum.tests.functional.python_client_base import BayTest
from magnumclient.openstack.common.apiclient import exceptions
@ -27,49 +26,26 @@ CONF.import_opt('default_timeout', 'magnum.common.docker_utils',
group='docker')
class TestBayModelResource(BayTest):
coe = 'swarm'
def test_baymodel_create_and_delete(self):
self._test_baymodel_create_and_delete(
'test_swarm_baymodel',
network_driver=None,
volume_driver=None)
class TestSwarmAPIs(BayAPITLSTest):
class TestSwarmAPIs(BayTest):
"""This class will cover swarm bay basic functional testing.
Will test all kinds of container action with tls_disabled=False mode.
"""
coe = "swarm"
baymodel_kwargs = {
"tls_disabled": False,
"network_driver": None,
"volume_driver": None,
"fixed_network": '192.168.0.0/24',
"dns_nameserver": '8.8.8.8',
"labels": {}
}
@classmethod
def setUpClass(cls):
super(TestSwarmAPIs, cls).setUpClass()
cls.baymodel = cls._create_baymodel('testSwarmApi',
coe='swarm',
tls_disabled=False,
network_driver=None,
volume_driver=None,
docker_volume_size=3,
labels={},
fixed_network='192.168.0.0/24',
dns_nameserver='8.8.8.8')
cls.bay = cls._create_bay('testSwarmApi', cls.baymodel.uuid)
config_contents = """[req]
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[req_distinguished_name]
CN = Your Name
[req_ext]
extendedKeyUsage = clientAuth
"""
url = cls.cs.bays.get(cls.bay.uuid).api_address
cls._create_tls_ca_files(config_contents)
# Note(eliqiao): docker_utils.CONF.docker.default_timeout is 10,
# tested this default configure option not works on gate, it will