d25fd5b447
Partial bug: 1405884 Change-Id: I43cb7440b7b2a284ff08538860b1f85c1da0925d
115 lines
4.2 KiB
Python
115 lines
4.2 KiB
Python
# Copyright 2013: Mirantis Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# 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 mock
|
|
|
|
from rally import consts
|
|
from rally import deploy
|
|
from tests.unit import fakes
|
|
from tests.unit import test
|
|
|
|
MOD = "rally.deploy.engines.multihost."
|
|
|
|
|
|
class TestMultihostEngine(test.TestCase):
|
|
def setUp(self):
|
|
super(TestMultihostEngine, self).setUp()
|
|
self.config = {
|
|
"type": "MultihostEngine",
|
|
"controller": {
|
|
"type": "DummyEngine",
|
|
"endpoint": {"auth_url": "http://h1.net"}
|
|
},
|
|
"nodes": [
|
|
{
|
|
"type": "DummyEngine",
|
|
"endpoint": {"auth_url": "endpoint1"},
|
|
},
|
|
{
|
|
"type": "DummyEngine",
|
|
"endpoint": {"auth_url": "endpoint2",
|
|
"cnt": "{controller_ip}"}
|
|
}
|
|
]
|
|
}
|
|
self.deployment = fakes.FakeDeployment(
|
|
uuid="905b2f16-6453-4b86-8ba5-6d32025fcfa6",
|
|
config=self.config,
|
|
)
|
|
self.engine = deploy.engine.EngineFactory.get_engine("MultihostEngine",
|
|
self.deployment)
|
|
|
|
@mock.patch(MOD + "objects.Deployment")
|
|
@mock.patch(MOD + "engine.EngineFactory")
|
|
def test__deploy_node(self, fakeEngineFactory, fakeDeployment):
|
|
fake_endpoint = mock.Mock()
|
|
fake_deployment = mock.Mock()
|
|
fake_engine = mock.Mock()
|
|
fake_engine.__enter__ = mock.Mock()
|
|
fake_engine.__exit__ = mock.Mock()
|
|
fake_engine.make_deploy = mock.Mock(return_value=fake_endpoint)
|
|
|
|
fakeDeployment.return_value = fake_deployment
|
|
fakeEngineFactory.get_engine = mock.Mock(return_value=fake_engine)
|
|
|
|
engine, endpoint = self.engine._deploy_node(self.config["nodes"][0])
|
|
|
|
self.assertEqual(fake_engine, engine)
|
|
self.assertEqual(fake_endpoint, endpoint)
|
|
|
|
fakeDeployment.assert_called_once_with(
|
|
config=self.config["nodes"][0],
|
|
parent_uuid=self.deployment["uuid"])
|
|
fake_engine.__enter__.assert_called_once_with()
|
|
fake_engine.__exit__.assert_called_once_with(None, None, None)
|
|
|
|
def test__update_controller_ip(self):
|
|
self.engine.controller_ip = "1.2.3.4"
|
|
self.engine._update_controller_ip(self.config)
|
|
expected = {"auth_url": "endpoint2", "cnt": "1.2.3.4"}
|
|
self.assertEqual(expected, self.config["nodes"][1]["endpoint"])
|
|
|
|
@mock.patch(MOD + "MultihostEngine._deploy_node")
|
|
@mock.patch(MOD + "MultihostEngine._update_controller_ip")
|
|
def test_deploy(self, update_ip, deploy_node):
|
|
fake_endpoints = [mock.Mock()]
|
|
fake_endpoints[0].auth_url = "http://h1.net"
|
|
deploy_node.return_value = [mock.Mock(), fake_endpoints]
|
|
|
|
endpoints = self.engine.deploy()
|
|
|
|
self.assertEqual(self.engine.controller_ip, "h1.net")
|
|
self.assertEqual(fake_endpoints, endpoints)
|
|
expected = [
|
|
mock.call(self.config["nodes"][0]),
|
|
mock.call(self.config["nodes"][1]),
|
|
]
|
|
self.assertEqual(expected, update_ip.mock_calls)
|
|
self.deployment.update_status.assert_called_once_with(
|
|
consts._DeployStatus.DEPLOY_SUBDEPLOY)
|
|
|
|
@mock.patch("rally.api")
|
|
@mock.patch(MOD + "db")
|
|
def test_cleanup(self, m_db, m_api):
|
|
m_db.deployment_list.return_value = [{"uuid": "uuid1"},
|
|
{"uuid": "uuid2"}]
|
|
self.engine.cleanup()
|
|
api_calls = [
|
|
mock.call.Deployment.destroy("uuid1"),
|
|
mock.call.Deployment.destroy("uuid2"),
|
|
]
|
|
self.assertEqual(api_calls, m_api.mock_calls)
|