rally/tests/unit/cmd/commands/test_deployment.py
Yair Fried 8207d9dd43 Adds endpoint to --fromenv deployment creation
Will read os-endpoint from environment variables.
Fixes some typos in related docstring as well.

Change-Id: I853a181130b7da885392211515784bdf93249774
2015-04-02 16:02:37 +03:00

274 lines
13 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 os
import mock
from rally.cmd.commands import deployment
from rally.cmd import envutils
from rally import consts
from rally import exceptions
from tests.unit import fakes
from tests.unit import test
class DeploymentCommandsTestCase(test.TestCase):
def setUp(self):
super(DeploymentCommandsTestCase, self).setUp()
self.deployment = deployment.DeploymentCommands()
@mock.patch.dict(os.environ, {"RALLY_DEPLOYMENT": "my_deployment_id"})
@mock.patch("rally.cmd.commands.deployment.DeploymentCommands.list")
@mock.patch("rally.cmd.commands.deployment.api.Deployment.create")
@mock.patch("rally.cmd.commands.deployment.open",
mock.mock_open(read_data="{\"some\": \"json\"}"),
create=True)
def test_create(self, mock_create, mock_list):
self.deployment.create("fake_deploy", False, "path_to_config.json")
mock_create.assert_called_once_with({"some": "json"}, "fake_deploy")
@mock.patch.dict(os.environ, {"OS_AUTH_URL": "fake_auth_url",
"OS_USERNAME": "fake_username",
"OS_PASSWORD": "fake_password",
"OS_TENANT_NAME": "fake_tenant_name",
"OS_REGION_NAME": "fake_region_name",
"OS_ENDPOINT": "fake_endpoint",
"RALLY_DEPLOYMENT": "fake_deployment_id"})
@mock.patch("rally.cmd.commands.deployment.api.Deployment.create")
@mock.patch("rally.cmd.commands.deployment.DeploymentCommands.list")
def test_createfromenv(self, mock_list, mock_create):
self.deployment.create("from_env", True)
mock_create.assert_called_once_with(
{
"type": "ExistingCloud",
"auth_url": "fake_auth_url",
"region_name": "fake_region_name",
"endpoint": "fake_endpoint",
"admin": {
"username": "fake_username",
"password": "fake_password",
"tenant_name": "fake_tenant_name"
}
},
"from_env"
)
@mock.patch("rally.cmd.commands.deployment.DeploymentCommands.list")
@mock.patch("rally.cmd.commands.deployment.DeploymentCommands.use")
@mock.patch("rally.cmd.commands.deployment.api.Deployment.create",
return_value=dict(uuid="uuid"))
@mock.patch("rally.cmd.commands.deployment.open",
mock.mock_open(read_data="{\"uuid\": \"uuid\"}"),
create=True)
def test_create_and_use(self, mock_create, mock_use_deployment,
mock_list):
self.deployment.create("fake_deploy", False, "path_to_config.json",
True)
mock_create.assert_called_once_with({"uuid": "uuid"}, "fake_deploy")
mock_use_deployment.assert_called_once_with("uuid")
@mock.patch("rally.cmd.commands.deployment.api.Deployment.recreate")
def test_recreate(self, mock_recreate):
deployment_id = "43924f8b-9371-4152-af9f-4cf02b4eced4"
self.deployment.recreate(deployment_id)
mock_recreate.assert_called_once_with(deployment_id)
@mock.patch("rally.cmd.commands.deployment.envutils.get_global")
def test_recreate_no_deployment_id(self, mock_default):
mock_default.side_effect = exceptions.InvalidArgumentsException
self.assertRaises(exceptions.InvalidArgumentsException,
self.deployment.recreate, None)
@mock.patch("rally.cmd.commands.deployment.api.Deployment.destroy")
def test_destroy(self, mock_destroy):
deployment_id = "53fd0273-60ce-42e5-a759-36f1a683103e"
self.deployment.destroy(deployment_id)
mock_destroy.assert_called_once_with(deployment_id)
@mock.patch("rally.cmd.commands.deployment.envutils.get_global")
def test_destroy_no_deployment_id(self, mock_default):
mock_default.side_effect = exceptions.InvalidArgumentsException
self.assertRaises(exceptions.InvalidArgumentsException,
self.deployment.destroy, None)
@mock.patch("rally.cmd.commands.deployment.cliutils.print_list")
@mock.patch("rally.cmd.commands.deployment.utils.Struct")
@mock.patch("rally.cmd.commands.deployment.envutils.get_global")
@mock.patch("rally.cmd.commands.deployment.db.deployment_list")
def test_list_different_deployment_id(self, mock_deployments,
mock_default, mock_struct,
mock_print_list):
current_deployment_id = "26a3ce76-0efa-40e4-86e5-514574bd1ff6"
mock_default.return_value = current_deployment_id
fake_deployment_list = [
{"uuid": "fa34aea2-ae2e-4cf7-a072-b08d67466e3e",
"created_at": "03-12-2014",
"name": "dep1",
"status": "deploy->started",
"active": "False"}]
mock_deployments.return_value = fake_deployment_list
self.deployment.list()
fake_deployment = fake_deployment_list[0]
fake_deployment["active"] = ""
mock_struct.assert_called_once_with(**fake_deployment)
headers = ["uuid", "created_at", "name", "status", "active"]
mock_print_list.assert_called_once_with([mock_struct()], headers,
sortby_index=headers.index(
"created_at"))
@mock.patch("rally.cmd.commands.deployment.cliutils.print_list")
@mock.patch("rally.cmd.commands.deployment.utils.Struct")
@mock.patch("rally.cmd.commands.deployment.envutils.get_global")
@mock.patch("rally.cmd.commands.deployment.db.deployment_list")
def test_list_current_deployment_id(self, mock_deployments,
mock_default, mock_struct,
mock_print_list):
current_deployment_id = "64258e84-ffa1-4011-9e4c-aba07bdbcc6b"
mock_default.return_value = current_deployment_id
fake_deployment_list = [{"uuid": current_deployment_id,
"created_at": "13-12-2014",
"name": "dep2",
"status": "deploy->finished",
"active": "True"}]
mock_deployments.return_value = fake_deployment_list
self.deployment.list()
fake_deployment = fake_deployment_list[0]
fake_deployment["active"] = "*"
mock_struct.assert_called_once_with(**fake_deployment)
headers = ["uuid", "created_at", "name", "status", "active"]
mock_print_list.assert_called_once_with([mock_struct()], headers,
sortby_index=headers.index(
"created_at"))
@mock.patch("rally.cmd.commands.deployment.db.deployment_get")
@mock.patch("json.dumps")
def test_config(self, mock_json_dumps, mock_deployment):
deployment_id = "fa4a423e-f15d-4d83-971a-89574f892999"
value = {"config": "config"}
mock_deployment.return_value = value
self.deployment.config(deployment_id)
mock_json_dumps.assert_called_once_with(value["config"],
sort_keys=True, indent=4)
mock_deployment.assert_called_once_with(deployment_id)
@mock.patch("rally.cmd.commands.deployment.envutils.get_global")
def test_config_no_deployment_id(self, mock_default):
mock_default.side_effect = exceptions.InvalidArgumentsException
self.assertRaises(exceptions.InvalidArgumentsException,
self.deployment.config, None)
@mock.patch("rally.cmd.commands.deployment.cliutils.print_list")
@mock.patch("rally.cmd.commands.deployment.utils.Struct")
@mock.patch("rally.cmd.commands.deployment.db.deployment_get")
def test_show(self, mock_deployment, mock_struct, mock_print_list):
deployment_id = "b1a6153e-a314-4cb3-b63b-cf08c1a416c3"
value = {
"admin": {
"auth_url": "url",
"username": "u",
"password": "p",
"tenant_name": "t",
"region_name": "r",
"endpoint_type": consts.EndpointType.INTERNAL
},
"users": []
}
mock_deployment.return_value = value
self.deployment.show(deployment_id)
mock_deployment.assert_called_once_with(deployment_id)
headers = ["auth_url", "username", "password", "tenant_name",
"region_name", "endpoint_type"]
fake_data = ["url", "u", "p", "t", "r", consts.EndpointType.INTERNAL]
mock_struct.assert_called_once_with(**dict(zip(headers, fake_data)))
mock_print_list.assert_called_once_with([mock_struct()], headers)
@mock.patch("rally.cmd.commands.deployment.envutils.get_global")
def test_deploy_no_deployment_id(self, mock_default):
mock_default.side_effect = exceptions.InvalidArgumentsException
self.assertRaises(exceptions.InvalidArgumentsException,
self.deployment.show, None)
@mock.patch("os.remove")
@mock.patch("os.symlink")
@mock.patch("rally.cmd.commands.deployment.db.deployment_get",
return_value=fakes.FakeDeployment(
uuid="593b683c-4b16-4b2b-a56b-e162bd60f10b"))
@mock.patch("os.path.exists", return_value=True)
@mock.patch("rally.common.fileutils.update_env_file")
def test_use(self, mock_env, mock_path, mock_deployment,
mock_symlink, mock_remove):
deployment_id = mock_deployment.return_value["uuid"]
mock_deployment.return_value["admin"] = {
"auth_url": "fake_auth_url",
"username": "fake_username",
"password": "fake_password",
"tenant_name": "fake_tenant_name",
"endpoint": "fake_endpoint",
"region_name": None}
with mock.patch("rally.cmd.commands.deployment.open", mock.mock_open(),
create=True) as mock_file:
self.deployment.use(deployment_id)
self.assertEqual(2, mock_path.call_count)
mock_env.assert_called_once_with(os.path.expanduser(
"~/.rally/globals"),
"RALLY_DEPLOYMENT", "%s\n" % deployment_id)
mock_file.return_value.write.assert_any_call(
"export OS_ENDPOINT=fake_endpoint\n")
mock_file.return_value.write.assert_any_call(
"export OS_AUTH_URL=fake_auth_url\n"
"export OS_USERNAME=fake_username\n"
"export OS_PASSWORD=fake_password\n"
"export OS_TENANT_NAME=fake_tenant_name\n")
mock_symlink.assert_called_once_with(
os.path.expanduser("~/.rally/openrc-%s" % deployment_id),
os.path.expanduser("~/.rally/openrc"))
mock_remove.assert_called_once_with(os.path.expanduser(
"~/.rally/openrc"))
@mock.patch("rally.cmd.commands.deployment.DeploymentCommands."
"_update_openrc_deployment_file")
@mock.patch("rally.common.fileutils.update_globals_file")
@mock.patch("rally.cmd.commands.deployment.db")
def test_use_by_name(self, mock_db, mock_update_openrc,
mock_update_globals):
fake_deployment = fakes.FakeDeployment(
uuid="fake_uuid",
admin="fake_endpoints")
mock_db.deployment_list.return_value = [fake_deployment]
mock_db.deployment_get.return_value = fake_deployment
status = self.deployment.use(deployment="fake_name")
self.assertIsNone(status)
mock_db.deployment_get.assert_called_once_with("fake_name")
mock_update_openrc.assert_called_once_with(
envutils.ENV_DEPLOYMENT, "fake_uuid")
mock_update_globals.assert_called_once_with(
"fake_uuid", "fake_endpoints")
@mock.patch("rally.cmd.commands.deployment.db.deployment_get")
def test_deployment_not_found(self, mock_deployment_get):
deployment_id = "e87e4dca-b515-4477-888d-5f6103f13b42"
mock_deployment_get.side_effect = exceptions.DeploymentNotFound(
uuid=deployment_id)
self.assertEqual(1, self.deployment.use(deployment_id))