aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJeff Peeler <jpeeler@redhat.com>2015-03-28 10:08:33 -0700
committerJeff Peeler <jpeeler@redhat.com>2015-05-13 15:38:07 -0400
commit21cd478cbd0bf14f9522e088c99399886a8fcf28 (patch)
treed36311fc82581e22db62b8993a1e1a8243ea0c28 /tests
parentabe4a9ccb25b171122f424e548215fe20eff459e (diff)
downloadkolla-21cd478cbd0bf14f9522e088c99399886a8fcf28.tar.gz
kolla-21cd478cbd0bf14f9522e088c99399886a8fcf28.zip
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
Diffstat (limited to 'tests')
-rw-r--r--tests/clients.py68
-rwxr-xr-xtests/setup_docker.sh7
-rw-r--r--tests/test_images.py42
-rw-r--r--tests/test_keystone.py25
4 files changed, 140 insertions, 2 deletions
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/setup_docker.sh b/tests/setup_docker.sh
index d5878c681..6be1ebeec 100755
--- a/tests/setup_docker.sh
+++ b/tests/setup_docker.sh
@@ -50,12 +50,15 @@ function start_docker() {
function create_group() {
getent group docker
- if [ $? -eq 2 ]; then # 2: key could not be found in database
+ result=$?
+ if [ $result -eq 0 ]; then # 0: key already exists, nothing to do
+ return
+ elif [ $result -eq 2 ]; then # 2: key could not be found in database
groupadd docker
chown root:docker /var/run/docker.sock
usermod -a -G docker ${SUDO_USER:-$USER}
else
- echo Unexpected failure: $?
+ echo Unexpected failure: $result
exit
fi
}
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))