From b89da9be28172319a16bece42f068e2d7f359c67 Mon Sep 17 00:00:00 2001 From: Joe Gordon Date: Tue, 27 Jan 2015 13:11:09 -0800 Subject: [PATCH] First pass at tempest_lib based functional testing Begin moving tempest nova CLI tests out of tempest and into this repo using tempest-lib. This patch adds the framework to run the functional tests, later patches will port the existing tempest tests. Use standard OpenStack environment variables to get keystone auth Change-Id: Ie957bd450bfed97b63788cfb488f92988fbbc889 --- novaclient/tests/functional/__init__.py | 0 novaclient/tests/functional/base.py | 44 ++++++++++++++++ .../tests/functional/test_readonly_nova.py | 51 +++++++++++++++++++ test-requirements.txt | 1 + tox.ini | 4 ++ 5 files changed, 100 insertions(+) create mode 100644 novaclient/tests/functional/__init__.py create mode 100644 novaclient/tests/functional/base.py create mode 100644 novaclient/tests/functional/test_readonly_nova.py diff --git a/novaclient/tests/functional/__init__.py b/novaclient/tests/functional/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/novaclient/tests/functional/base.py b/novaclient/tests/functional/base.py new file mode 100644 index 000000000..27015bda8 --- /dev/null +++ b/novaclient/tests/functional/base.py @@ -0,0 +1,44 @@ +# 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 os + +from tempest_lib.cli import base + + +class ClientTestBase(base.ClientTestBase): + """ + This is a first pass at a simple read only python-novaclient test. This + only exercises client commands that are read only. + + This should test commands: + * as a regular user + * as a admin user + * with and without optional parameters + * initially just check return codes, and later test command outputs + + """ + def _get_clients(self): + cli_dir = os.environ.get( + 'OS_NOVACLIENT_EXEC_DIR', + os.path.join(os.path.abspath('.'), '.tox/functional/bin')) + + return base.CLIClient( + username=os.environ.get('OS_USERNAME'), + password=os.environ.get('OS_PASSWORD'), + tenant_name=os.environ.get('OS_TENANT_NAME'), + uri=os.environ.get('OS_AUTH_URL'), + cli_dir=cli_dir) + + def nova(self, *args, **kwargs): + return self.clients.nova(*args, + **kwargs) diff --git a/novaclient/tests/functional/test_readonly_nova.py b/novaclient/tests/functional/test_readonly_nova.py new file mode 100644 index 000000000..bc0589780 --- /dev/null +++ b/novaclient/tests/functional/test_readonly_nova.py @@ -0,0 +1,51 @@ +# 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 tempest_lib import exceptions + +from novaclient.tests.functional import base + + +class SimpleReadOnlyNovaClientTest(base.ClientTestBase): + + """ + This is a first pass at a simple read only python-novaclient test. This + only exercises client commands that are read only. + + This should test commands: + * as a regular user + * as a admin user + * with and without optional parameters + * initially just check return codes, and later test command outputs + + """ + + def test_admin_fake_action(self): + self.assertRaises(exceptions.CommandFailed, + self.nova, + 'this-does-nova-exist') + + # NOTE(jogo): Commands in order listed in 'nova help' + + # Optional arguments: + + def test_admin_version(self): + self.nova('', flags='--version') + + def test_admin_debug_list(self): + self.nova('list', flags='--debug') + + def test_admin_timeout(self): + self.nova('list', flags='--timeout %d' % 10) + + def test_admin_timing(self): + self.nova('list', flags='--timing') diff --git a/test-requirements.txt b/test-requirements.txt index d6628ed82..f15d3beac 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -14,3 +14,4 @@ oslosphinx>=2.2.0 # Apache-2.0 testrepository>=0.0.18 testscenarios>=0.4 testtools>=0.9.36,!=1.2.0 +tempest-lib>=0.1.0 diff --git a/tox.ini b/tox.ini index a8e9a6f34..0ea5da95b 100644 --- a/tox.ini +++ b/tox.ini @@ -23,6 +23,10 @@ commands = flake8 {posargs} [testenv:venv] commands = {posargs} +[testenv:functional] +setenv = + OS_TEST_PATH = ./novaclient/tests/functional + [testenv:cover] commands = python setup.py testr --coverage --testr-args='{posargs}'