From d4490ea2bc62bbd3715f9804e1395671854675b2 Mon Sep 17 00:00:00 2001 From: Jeffrey Zhang Date: Thu, 14 Jan 2016 11:36:32 +0800 Subject: [PATCH] add unittest code base * add a base TestCase class * load the tests from the project root rather than only tests dir * add a test case for WorkerThread builder function Change-Id: Icf878f9249b475a311123c8235c42b1212d02ca6 Partially-implements: bp add-ut-codebase --- .testr.conf | 2 +- kolla/tests/__init__.py | 0 kolla/tests/base.py | 36 +++++++++++++++++++++++ kolla/tests/common/__init__.py | 0 kolla/tests/common/test_config.py | 20 +++++++++++++ kolla/tests/etc/default.conf | 2 ++ kolla/tests/test_build.py | 48 +++++++++++++++++++++++++++++++ tests/test_keystone.py | 2 +- 8 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 kolla/tests/__init__.py create mode 100644 kolla/tests/base.py create mode 100644 kolla/tests/common/__init__.py create mode 100644 kolla/tests/common/test_config.py create mode 100644 kolla/tests/etc/default.conf create mode 100644 kolla/tests/test_build.py diff --git a/.testr.conf b/.testr.conf index 76e26f0c1f..0d11d15d0b 100644 --- a/.testr.conf +++ b/.testr.conf @@ -3,6 +3,6 @@ test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \ OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \ OS_LOG_CAPTURE=${OS_LOG_CAPTURE:-1} \ OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-7200} \ - ${PYTHON:-python} -m subunit.run discover ${OS_TEST_PATH:-./tests} $LISTOPT $IDOPTION + ${PYTHON:-python} -m subunit.run discover ${OS_TEST_PATH:-.} $LISTOPT $IDOPTION test_id_option=--load-list $IDFILE test_list_option=--list diff --git a/kolla/tests/__init__.py b/kolla/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/kolla/tests/base.py b/kolla/tests/base.py new file mode 100644 index 0000000000..e08adc39ba --- /dev/null +++ b/kolla/tests/base.py @@ -0,0 +1,36 @@ +# 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 oslo_config import cfg +from oslotest import base as oslotest_base + +from kolla.common import config as common_config + + +TESTS_ROOT = os.path.dirname(os.path.abspath(__file__)) + + +class TestCase(oslotest_base.BaseTestCase): + '''All unit test should inherit from this class''' + config_file = None + + def setUp(self): + super(TestCase, self).setUp() + self.conf = cfg.ConfigOpts() + default_config_files = self.get_default_config_files() + common_config.parse(self.conf, [], + default_config_files=default_config_files) + + def get_default_config_files(self): + if self.config_file: + return [os.path.join(TESTS_ROOT, 'etc', self.config_file)] diff --git a/kolla/tests/common/__init__.py b/kolla/tests/common/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/kolla/tests/common/test_config.py b/kolla/tests/common/test_config.py new file mode 100644 index 0000000000..28a9c8d8de --- /dev/null +++ b/kolla/tests/common/test_config.py @@ -0,0 +1,20 @@ +# 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 kolla.tests import base + + +class ConfigTest(base.TestCase): + config_file = 'default.conf' + + def test_debug_opt(self): + self.assertTrue(self.conf.debug) diff --git a/kolla/tests/etc/default.conf b/kolla/tests/etc/default.conf new file mode 100644 index 0000000000..cbdb487c3f --- /dev/null +++ b/kolla/tests/etc/default.conf @@ -0,0 +1,2 @@ +[DEFAULT] +debug=True diff --git a/kolla/tests/test_build.py b/kolla/tests/test_build.py new file mode 100644 index 0000000000..380e46021a --- /dev/null +++ b/kolla/tests/test_build.py @@ -0,0 +1,48 @@ +# 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 fixtures +import mock + +from kolla.cmd import build +from kolla.tests import base + + +FAKE_IMAGE = { + 'name': 'image-base', + 'status': 'matched', + 'parent': None, + 'path': '/fake/path', + 'plugins': [], + 'fullname': 'image-base:latest', +} + + +class WorkerThreadTest(base.TestCase): + + def setUp(self): + super(WorkerThreadTest, self).setUp() + # NOTE(jeffrey4l): use a real, temporary dir + FAKE_IMAGE['path'] = self.useFixture(fixtures.TempDir()).path + + @mock.patch('docker.Client') + def test_build_image(self, mock_client): + queue = mock.Mock() + push_queue = mock.Mock() + worker = build.WorkerThread(queue, + push_queue, + self.conf) + worker.builder(FAKE_IMAGE) + + mock_client().build.assert_called_once_with( + path=FAKE_IMAGE['path'], tag=FAKE_IMAGE['fullname'], + nocache=False, rm=True, pull=True, forcerm=True) diff --git a/tests/test_keystone.py b/tests/test_keystone.py index 683dc53dd5..5145a2cfa6 100644 --- a/tests/test_keystone.py +++ b/tests/test_keystone.py @@ -10,7 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. -from clients import OpenStackClients +from tests.clients import OpenStackClients import testtools