5bdb5b83fc
Unify specifying api info process, save api info in credential. Change-Id: Id673da173bd9005aaee5deb9b7949a6662ff6c50
167 lines
6.6 KiB
Python
167 lines
6.6 KiB
Python
# 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 ddt
|
|
import fixtures
|
|
import mock
|
|
|
|
from rally_openstack.credential import OpenStackCredential
|
|
from rally_openstack import scenario as base_scenario
|
|
from tests.unit import test
|
|
|
|
|
|
CREDENTIAL_WITHOUT_HMAC = OpenStackCredential(
|
|
"auth_url",
|
|
"username",
|
|
"password")
|
|
|
|
CREDENTIAL_WITH_HMAC = OpenStackCredential(
|
|
"auth_url",
|
|
"username",
|
|
"password",
|
|
profiler_hmac_key="test_profiler_hmac_key")
|
|
|
|
|
|
@ddt.ddt
|
|
class OpenStackScenarioTestCase(test.TestCase):
|
|
def setUp(self):
|
|
super(OpenStackScenarioTestCase, self).setUp()
|
|
self.osclients = fixtures.MockPatch(
|
|
"rally_openstack.osclients.Clients")
|
|
self.useFixture(self.osclients)
|
|
self.context = test.get_test_context()
|
|
self.context.update({"foo": "bar"})
|
|
|
|
def test_init(self):
|
|
scenario = base_scenario.OpenStackScenario(self.context)
|
|
self.assertEqual(self.context, scenario.context)
|
|
|
|
def test_init_admin_context(self):
|
|
self.context["admin"] = {"credential": mock.Mock()}
|
|
scenario = base_scenario.OpenStackScenario(self.context)
|
|
self.assertEqual(self.context, scenario.context)
|
|
self.osclients.mock.assert_called_once_with(
|
|
self.context["admin"]["credential"])
|
|
|
|
def test_init_admin_clients(self):
|
|
scenario = base_scenario.OpenStackScenario(
|
|
self.context, admin_clients="foobar")
|
|
self.assertEqual(self.context, scenario.context)
|
|
|
|
self.assertEqual("foobar", scenario._admin_clients)
|
|
|
|
def test_init_user_context(self):
|
|
user = {"credential": mock.Mock(), "tenant_id": "foo"}
|
|
self.context["users"] = [user]
|
|
self.context["tenants"] = {"foo": {"name": "bar"}}
|
|
self.context["user_choice_method"] = "random"
|
|
|
|
scenario = base_scenario.OpenStackScenario(self.context)
|
|
|
|
self.assertEqual(user, scenario.context["user"])
|
|
self.assertEqual(self.context["tenants"]["foo"],
|
|
scenario.context["tenant"])
|
|
|
|
self.osclients.mock.assert_called_once_with(user["credential"])
|
|
|
|
def test_init_clients(self):
|
|
scenario = base_scenario.OpenStackScenario(self.context,
|
|
admin_clients="spam",
|
|
clients="ham")
|
|
self.assertEqual("spam", scenario._admin_clients)
|
|
self.assertEqual("ham", scenario._clients)
|
|
|
|
def test_init_user_clients(self):
|
|
scenario = base_scenario.OpenStackScenario(
|
|
self.context, clients="foobar")
|
|
self.assertEqual(self.context, scenario.context)
|
|
|
|
self.assertEqual("foobar", scenario._clients)
|
|
|
|
@ddt.data(([], 0),
|
|
([("admin", CREDENTIAL_WITHOUT_HMAC)], 0),
|
|
([("user", CREDENTIAL_WITHOUT_HMAC)], 0),
|
|
([("admin", CREDENTIAL_WITH_HMAC)], 1),
|
|
([("user", CREDENTIAL_WITH_HMAC)], 1),
|
|
([("admin", CREDENTIAL_WITH_HMAC),
|
|
("user", CREDENTIAL_WITH_HMAC)], 1),
|
|
([("admin", CREDENTIAL_WITHOUT_HMAC),
|
|
("user", CREDENTIAL_WITH_HMAC)], 1),
|
|
([("admin", CREDENTIAL_WITH_HMAC),
|
|
("user", CREDENTIAL_WITHOUT_HMAC)], 1),
|
|
([("admin", CREDENTIAL_WITHOUT_HMAC),
|
|
("user", CREDENTIAL_WITHOUT_HMAC)], 0))
|
|
@ddt.unpack
|
|
@mock.patch("rally_openstack.scenario.profiler.init")
|
|
@mock.patch("rally_openstack.scenario.profiler.get")
|
|
def test_profiler_init(self, users_credentials,
|
|
expected_call_count,
|
|
mock_profiler_get,
|
|
mock_profiler_init):
|
|
for user, credential in users_credentials:
|
|
self.context.update({user: {"credential": credential}})
|
|
base_scenario.OpenStackScenario(self.context)
|
|
self.assertEqual(expected_call_count,
|
|
mock_profiler_init.call_count)
|
|
self.assertEqual([mock.call()] * expected_call_count,
|
|
mock_profiler_get.call_args_list)
|
|
|
|
def test__choose_user_random(self):
|
|
users = [{"credential": mock.Mock(), "tenant_id": "foo"}
|
|
for _ in range(5)]
|
|
self.context["users"] = users
|
|
self.context["tenants"] = {"foo": {"name": "bar"},
|
|
"baz": {"name": "spam"}}
|
|
self.context["user_choice_method"] = "random"
|
|
|
|
scenario = base_scenario.OpenStackScenario()
|
|
scenario._choose_user(self.context)
|
|
self.assertIn("user", self.context)
|
|
self.assertIn(self.context["user"], self.context["users"])
|
|
self.assertIn("tenant", self.context)
|
|
tenant_id = self.context["user"]["tenant_id"]
|
|
self.assertEqual(self.context["tenants"][tenant_id],
|
|
self.context["tenant"])
|
|
|
|
@ddt.data((1, "0", "bar"),
|
|
(2, "0", "foo"),
|
|
(3, "1", "bar"),
|
|
(4, "1", "foo"),
|
|
(5, "0", "bar"),
|
|
(6, "0", "foo"),
|
|
(7, "1", "bar"),
|
|
(8, "1", "foo"))
|
|
@ddt.unpack
|
|
def test__choose_user_round_robin(self, iteration,
|
|
expected_user_id, expected_tenant_id):
|
|
self.context["iteration"] = iteration
|
|
self.context["user_choice_method"] = "round_robin"
|
|
self.context["users"] = []
|
|
self.context["tenants"] = {}
|
|
for tid in ("foo", "bar"):
|
|
users = [{"id": str(i), "tenant_id": tid} for i in range(2)]
|
|
self.context["users"] += users
|
|
self.context["tenants"][tid] = {"name": tid, "users": users}
|
|
|
|
scenario = base_scenario.OpenStackScenario()
|
|
scenario._choose_user(self.context)
|
|
self.assertIn("user", self.context)
|
|
self.assertIn(self.context["user"], self.context["users"])
|
|
self.assertEqual(expected_user_id, self.context["user"]["id"])
|
|
self.assertIn("tenant", self.context)
|
|
tenant_id = self.context["user"]["tenant_id"]
|
|
self.assertEqual(self.context["tenants"][tenant_id],
|
|
self.context["tenant"])
|
|
self.assertEqual(expected_tenant_id, tenant_id)
|