diff --git a/tripleoclient/tests/test_plugin.py b/tripleoclient/tests/test_plugin.py new file mode 100644 index 000000000..d81aa55a3 --- /dev/null +++ b/tripleoclient/tests/test_plugin.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +# 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 tripleoclient import plugin +from tripleoclient.tests import base +from tripleoclient.tests import fakes + +import mock + + +class TestPlugin(base.TestCase): + + @mock.patch('ironicclient.client.get_client') + def test_make_client(self, ironic_get_client): + clientmgr = mock.MagicMock() + clientmgr._api_version.__getitem__.return_value = '1' + clientmgr.get_endpoint_for_service_type.return_value = fakes.AUTH_URL + + client = plugin.make_client(clientmgr) + + # The client should have a baremetal property. Accessing it should + # fetch it from the clientmanager: + baremetal = client.baremetal + orchestration = client.orchestration + # The second access should return the same clients: + self.assertIs(client.baremetal, baremetal) + self.assertIs(client.orchestration, orchestration) + + # And the functions should only be called per property: + self.assertEqual(clientmgr.get_endpoint_for_service_type.call_count, 2) + self.assertEqual(clientmgr.auth.get_token.call_count, 2) diff --git a/tripleoclient/tests/test_utils.py b/tripleoclient/tests/test_utils.py index 858ff0495..4d6deb330 100644 --- a/tripleoclient/tests/test_utils.py +++ b/tripleoclient/tests/test_utils.py @@ -18,6 +18,8 @@ import os.path import tempfile from tripleoclient import exceptions +from tripleoclient.tests.v1.utils import ( + generate_overcloud_passwords_mock) from tripleoclient import utils from unittest import TestCase @@ -177,7 +179,8 @@ class TestWaitForStackUtil(TestCase): 'CREATE_FAILED', '2015-10-14T02:25:43Z'), ]] - complete = utils.wait_for_stack_ready(self.mock_orchestration, 'stack') + complete = utils.wait_for_stack_ready(self.mock_orchestration, 'stack', + verbose=True) self.assertFalse(complete) @@ -452,3 +455,63 @@ class TestEnsureRunAsNormalUser(TestCase): os_geteuid_mock.return_value = 0 self.assertRaises(exceptions.RootUserExecution, utils.ensure_run_as_normal_user) + + +class TestCreateOvercloudRC(TestCase): + + @mock.patch('tripleoclient.utils.generate_overcloud_passwords', + new=generate_overcloud_passwords_mock) + def test_create_overcloudrc(self): + stack = mock.MagicMock() + stack.stack_name = 'teststack' + stack.to_dict.return_value = { + 'outputs': [{'output_key': 'KeystoneURL', + 'output_value': 'http://foo:8000/'}] + } + + tempdir = tempfile.mkdtemp() + rcfile = os.path.join(tempdir, 'teststackrc') + try: + utils.create_overcloudrc(stack=stack, + no_proxy='127.0.0.1', + config_directory=tempdir) + rc = open(rcfile, 'rt').read() + self.assertIn('export OS_AUTH_URL=http://foo:8000/', rc) + self.assertIn('export no_proxy=127.0.0.1', rc) + self.assertIn('export OS_CLOUDNAME=teststack', rc) + finally: + if os.path.exists(rcfile): + os.unlink(rcfile) + os.rmdir(tempdir) + + +class TestCreateTempestDeployerInput(TestCase): + + def test_create_tempest_deployer_input(self): + with tempfile.NamedTemporaryFile() as cfgfile: + filepath = cfgfile.name + utils.create_tempest_deployer_input(filepath) + cfg = open(filepath, 'rt').read() + # Just make a simple test, to make sure it created a proper file: + self.assertIn( + '[orchestration]\nstack_owner_role = heat_stack_user', cfg) + + +class TestGetServiceIps(TestCase): + + def test_get_service_ips(self): + stack = mock.MagicMock() + stack.to_dict.return_value = { + 'outputs': [{'output_key': 'KeystoneURL', + 'output_value': 'http://foo:8000/'}] + } + + ips = utils.get_service_ips(stack) + self.assertEqual(ips, {'KeystoneURL': 'http://foo:8000/'}) + + +class TestCreateCephxKey(TestCase): + + def test_create_cephx_key(self): + key = utils.create_cephx_key() + self.assertEqual(len(key), 40)