Add functional test cases for swarm baymodel/bay

This patch adds TestSwarmAPIs test class, aimed to test Docker API/and
swarm related api function, we create a bay while setupClass, and destroy
it after test cases finished. Even without any cased added, at least we can
ensure swarm bay can be created successfully.

This will help to ensure any HOT/yml change won't break swarm's cluster
basic functions.

I leave a todo, we need more works to test container actions.

Since we have created a bay, so we can add more case using magnum client to
test container actions, will do this by followed patch.

Depends-On: Ifa028f6f30b7c2bb7b1dd32b22669379e162c7c5
Partially implements: blueprint swarm-functional-testing
Change-Id: I5c3bc5d7735cce17a45887359d1fb44d12dbba48
This commit is contained in:
Eli Qiao 2015-11-12 09:45:49 +08:00
parent 58cbafdc87
commit 9f95010246
4 changed files with 92 additions and 3 deletions

View File

@ -205,9 +205,6 @@ class BayTest(BaseMagnumClient):
class BayAPITLSTest(BaseMagnumClient):
"""Base class of TLS enabled test case."""
def setUp(self):
super(BayAPITLSTest, self).setUp()
@classmethod
def tearDownClass(cls):
@ -224,6 +221,8 @@ class BayAPITLSTest(BaseMagnumClient):
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

@ -0,0 +1,80 @@
# 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.
from magnum.common import docker_utils
from magnum.conductor.handlers.common import docker_client
from magnum.tests.functional.python_client_base import BayAPITLSTest
from magnum.tests.functional.python_client_base import BayTest
class TestBayModelResource(BayTest):
coe = 'swarm'
def test_baymodel_create_and_delete(self):
self._test_baymodel_create_and_delete(
'test_swarm_baymodel',
network_driver=None)
class TestSwarmAPIs(BayAPITLSTest):
"""This class will cover swarm bay basic functional testing.
Will test all kinds of container action with tls_disabled=False mode.
"""
@classmethod
def setUpClass(cls):
super(TestSwarmAPIs, cls).setUpClass()
cls.baymodel = cls._create_baymodel('testSwarmApi',
coe='swarm',
tls_disabled=False,
network_driver=None,
docker_volume_size=5,
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)
cls.docker_client = docker_client.DockerHTTPClient(
url,
docker_utils.CONF.docker.docker_remote_api_version,
docker_utils.CONF.docker.default_timeout,
client_key=cls.key_file,
client_cert=cls.cert_file,
ca_cert=cls.ca_file)
def _create_container(self, **kwargs):
name = kwargs.get('name', 'test_container')
image = kwargs.get('image', 'docker.io/cirros:latest')
command = kwargs.get('command', 'ping -c 1000 8.8.8.8')
return self.docker_client.create_container(name=name,
image=image,
command=command)
def test_start_stop_container_from_api(self):
# TODO(eliqiao): add test case here
pass

10
tox.ini
View File

@ -37,6 +37,16 @@ commands =
find . -type f -name "*.pyc" -delete
bash tools/pretty_tox.sh '{posargs}'
[testenv:functional-swarm]
sitepackages = True
setenv = OS_TEST_PATH=./magnum/tests/functional/swarm
OS_TEST_TIMEOUT=7200
deps =
{[testenv]deps}
commands =
find . -type f -name "*.pyc" -delete
bash tools/pretty_tox.sh '{posargs}'
[testenv:pep8]
commands =
doc8 -e .rst specs/ doc/source/ contrib/ CONTRIBUTING.rst HACKING.rst README.rst