From d353472857bcf9b035fd0a443227c668bd9780ec Mon Sep 17 00:00:00 2001 From: Jeff Peeler Date: Sat, 28 Mar 2015 10:08:33 -0700 Subject: Add functional tests to tox This adds functional tests to tox, along with a number of prerequisite steps. Since this is primarily a bash project, pbr usage has been avoided. Tests are to be written in python and put in the tests directory. Running tox -e setupenv will execute a setup script (tests/setup_docker.sh) to ensure the running instance of docker meets the minimum version requirement. Running tox -e images will execute the image building script (tools/build-all-docker-images) and will parse the resulting output to report failures. Running tox -e startenv will generate the environment file, run "tools/kolla start", and run first time initialization (eventually). Running tox -e functional is for actually testing the deployed OpenStack environment via a series of tests utilizing the client APIs. Change-Id: Iff6dfdca43f0c44d471e7540a7836e56a0de4507 (cherry picked from commit 21cd478cbd0bf14f9522e088c99399886a8fcf28) --- tests/clients.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/test_images.py | 42 +++++++++++++++++++++++++++++++ tests/test_keystone.py | 25 +++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 tests/clients.py create mode 100644 tests/test_images.py create mode 100644 tests/test_keystone.py (limited to 'tests') diff --git a/tests/clients.py b/tests/clients.py new file mode 100644 index 000000000..9ac977479 --- /dev/null +++ b/tests/clients.py @@ -0,0 +1,68 @@ +# 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 logging +from keystoneclient.v2_0 import client as ksclient + +logging.basicConfig(level=logging.WARNING) +LOG = logging.getLogger(__name__) + +class OpenStackClients(object): + + def __init__(self): + self._connected_clients = {} + self._supported_clients = self.__class__.__subclasses__() + self.client = None + + def get_client(self, name): + if name in self._connected_clients: + return self._connected_clients[name] + try: + aclass = next(s for s in self._supported_clients if name in + s.__name__) + sclient = aclass() + connected_client = sclient.create() + self._connected_clients[name] = connected_client + return connected_client + + except StopIteration: + LOG.warn("Requested client %s not found", name) + raise + + def create(self): + pass + + +class KeystoneClient(OpenStackClients): + + def __init__(self): + super(KeystoneClient, self).__init__() + # TODO: this shouldn't be hard coded + self.creds = {'auth_url': 'http://10.0.0.4:5000/v2.0', + 'username': 'admin', + 'password': 'steakfordinner', + 'tenant_name': 'admin'} + + def create(self): + if self.client is None: + self.client = ksclient.Client(**self.creds) + return self.client + + +if __name__ == '__main__': + # TODO: mox this + client_mgr = OpenStackClients() + ks = client_mgr.get_client('KeystoneClient') + LOG.info(ks) + ks2 = client_mgr.get_client('KeystoneClient') + LOG.info(ks2) diff --git a/tests/test_images.py b/tests/test_images.py new file mode 100644 index 000000000..f0e45368d --- /dev/null +++ b/tests/test_images.py @@ -0,0 +1,42 @@ +# 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 testtools +from subprocess import check_output + +class ImagesTest(testtools.TestCase): + def setUp(self): + super(ImagesTest, self).setUp() + + def test_builds(self): + build_output = check_output(["tools/build-all-docker-images", + "--release", + "--pull", + "--testmode"]) + + # these are images that are known to not build properly + excluded_images = ["kollaglue/centos-rdo-swift-proxy-server", + "kollaglue/centos-rdo-swift-container", + "kollaglue/centos-rdo-swift-base", + "kollaglue/centos-rdo-swift-account", + "kollaglue/centos-rdo-swift-object", + "kollaglue/centos-rdo-barbican", + "kollaglue/fedora-rdo-base", + "kollaglue/centos-rdo-rhel-osp-base"] + + results = eval(build_output.splitlines()[-1]) + + for image, result in results.iteritems(): + if image in excluded_images: + self.assertEqual(result, 'fail') + else: + self.assertNotEqual(result, 'fail') diff --git a/tests/test_keystone.py b/tests/test_keystone.py new file mode 100644 index 000000000..6c23a203c --- /dev/null +++ b/tests/test_keystone.py @@ -0,0 +1,25 @@ +# 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 testtools +from clients import OpenStackClients + + +class KeystoneTest(testtools.TestCase): + def setUp(self): + super(KeystoneTest, self).setUp() + self.kc = OpenStackClients().get_client('KeystoneClient') + + def test_tenants(self): + result = self.kc.tenants.list() + # only admin tenant + self.assertEqual(1, len(result)) -- cgit v1.2.3