From 29f29e44d3ed894ebac5fe26d4410bd31149145a Mon Sep 17 00:00:00 2001 From: TerryHowe Date: Wed, 29 Apr 2015 05:11:58 -0600 Subject: [PATCH] Use format options for functional tests Use the format options for functional tests so we can have more assertEquals and less assertIn. Change-Id: I34e6c76b42964f7b596ea35e6b0354a242611cb4 --- .testr.conf | 1 + functional/common/test.py | 31 ++++++++++++++- functional/tests/object/v1/test_container.py | 42 ++++++++++++++++++++ 3 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 functional/tests/object/v1/test_container.py diff --git a/.testr.conf b/.testr.conf index 7388cc3c45..90c80c1873 100644 --- a/.testr.conf +++ b/.testr.conf @@ -6,3 +6,4 @@ test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \ test_id_option=--load-list $IDFILE test_list_option=--list +group_regex=([^\.]+\.)+ diff --git a/functional/common/test.py b/functional/common/test.py index 4a92def0d5..7beaf39aa4 100644 --- a/functional/common/test.py +++ b/functional/common/test.py @@ -28,12 +28,12 @@ EXAMPLE_DIR = os.path.join(ROOT_DIR, 'examples') def execute(cmd, fail_ok=False, merge_stderr=False): """Executes specified command for the given action.""" - cmd = shlex.split(cmd.encode('utf-8')) + cmdlist = shlex.split(cmd.encode('utf-8')) result = '' result_err = '' stdout = subprocess.PIPE stderr = subprocess.STDOUT if merge_stderr else subprocess.PIPE - proc = subprocess.Popen(cmd, stdout=stdout, stderr=stderr) + proc = subprocess.Popen(cmdlist, stdout=stdout, stderr=stderr) result, result_err = proc.communicate() if not fail_ok and proc.returncode != 0: raise exceptions.CommandFailed(proc.returncode, cmd, result, @@ -50,6 +50,33 @@ class TestCase(testtools.TestCase): """Executes openstackclient command for the given action.""" return execute('openstack ' + cmd, fail_ok=fail_ok) + @classmethod + def get_show_opts(cls, fields=[]): + return ' -f value ' + ' '.join(['-c ' + it for it in fields]) + + @classmethod + def get_list_opts(cls, headers=[]): + opts = ' -f csv --quote none ' + opts = opts + ' '.join(['-c ' + it for it in headers]) + return opts + + @classmethod + def assertOutput(cls, expected, actual): + if expected != actual: + raise Exception(expected + ' != ' + actual) + + @classmethod + def assertInOutput(cls, expected, actual): + if expected not in actual: + raise Exception(expected + ' not in ' + actual) + + @classmethod + def cleanup_tmpfile(cls, filename): + try: + os.remove(filename) + except OSError: + pass + def assert_table_structure(self, items, field_names): """Verify that all items have keys listed in field_names.""" for item in items: diff --git a/functional/tests/object/v1/test_container.py b/functional/tests/object/v1/test_container.py new file mode 100644 index 0000000000..9ea14cdec6 --- /dev/null +++ b/functional/tests/object/v1/test_container.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 uuid + +from functional.common import test + + +class ContainerTests(test.TestCase): + """Functional tests for object containers. """ + NAME = uuid.uuid4().hex + + @classmethod + def setUpClass(cls): + opts = cls.get_list_opts(['container']) + raw_output = cls.openstack('container create ' + cls.NAME + opts) + expected = 'container\n' + cls.NAME + '\n' + cls.assertOutput(expected, raw_output) + + @classmethod + def tearDownClass(cls): + raw_output = cls.openstack('container delete ' + cls.NAME) + cls.assertOutput('', raw_output) + + def test_container_list(self): + opts = self.get_list_opts(['Name']) + raw_output = self.openstack('container list' + opts) + self.assertIn(self.NAME, raw_output) + + def test_container_show(self): + opts = self.get_show_opts(['container']) + raw_output = self.openstack('container show ' + self.NAME + opts) + self.assertEqual(self.NAME + "\n", raw_output)