def test__remove_associated_networks_failure(self, mock_check_service_status): def fake_get_network(req_network): for network in networks: if network.project_id == req_network.project_id: return network networks = [ mock.MagicMock(project_id="t1"), mock.MagicMock(project_id="t4") ] nova_admin = mock.MagicMock() clients = mock.MagicMock() self.osclients.Clients.return_value = clients clients.services.return_value = {"compute": "nova"} clients.nova.return_value = nova_admin nova_admin.networks.list.return_value = networks nova_admin.networks.get = fake_get_network nova_admin.networks.disassociate.side_effect = Exception() user_generator = users.UserGenerator(self.context) user_generator.context["tenants"] = { "t1": dict(id="t1", name="t1"), "t2": dict(id="t2", name="t2") } user_generator._remove_associated_networks() mock_check_service_status.assert_called_once_with( mock.ANY, "nova-network") nova_admin.networks.disassociate.assert_called_once_with(networks[0])
def test_setup_and_cleanup(self): with users.UserGenerator(self.context) as ctx: self.assertEqual(self.wrapped_keystone.create_user.call_count, 0) self.assertEqual(self.wrapped_keystone.create_project.call_count, 0) ctx.setup() self.assertEqual(len(ctx.context["users"]), self.users_num) self.assertEqual(self.wrapped_keystone.create_user.call_count, self.users_num) self.assertEqual(len(ctx.context["tenants"]), self.tenants_num) self.assertEqual(self.wrapped_keystone.create_project.call_count, self.tenants_num) # Assert nothing is deleted yet self.assertEqual(self.wrapped_keystone.delete_user.call_count, 0) self.assertEqual(self.wrapped_keystone.delete_project.call_count, 0) # Cleanup (called by content manager) self.assertEqual(self.wrapped_keystone.delete_user.call_count, self.users_num) self.assertEqual(self.wrapped_keystone.delete_project.call_count, self.tenants_num)
def test__create_tenants(self, mock_keystone, mock_sleep): user_generator = users.UserGenerator(self.context) user_generator.config["tenants"] = 1 tenants = user_generator._create_tenants() self.assertEqual(1, len(tenants)) id, tenant = tenants.popitem() self.assertIn("name", tenant)
def test_users_contains_correct_endpoint_type(self, mock_keystone): endpoint = objects.Endpoint("foo_url", "foo", "foo_pass", endpoint_type=consts.EndpointType.INTERNAL) config = { "config": { "users": { "tenants": 1, "users_per_tenant": 2, "resource_management_workers": 1 } }, "admin": { "endpoint": endpoint }, "task": { "uuid": "task_id" } } user_generator = users.UserGenerator(config) users_ = user_generator._create_users() for user in users_: self.assertEqual("internal", user["endpoint"].endpoint_type)
def test__delete_users(self, mock_keystone): user_generator = users.UserGenerator(self.context) user1 = mock.MagicMock() user2 = mock.MagicMock() user_generator.context["users"] = [user1, user2] user_generator._delete_users() self.assertEqual(len(user_generator.context["users"]), 0)
def test_setup_and_cleanup_failure(self, mock_keystone): wrapped_keystone = mock_keystone.wrap.return_value wrapped_keystone.create_user.side_effect = Exception() with users.UserGenerator(self.context) as ctx: self.assertRaises(exceptions.ContextSetupFailure, ctx.setup) # Ensure that tenants get deleted anyway self.assertEqual(len(ctx.context["tenants"]), 0)
def test__delete_tenants(self, mock_keystone): user_generator = users.UserGenerator(self.context) user_generator.context["tenants"] = { "t1": dict(id="t1", name="t1"), "t2": dict(id="t2", name="t2") } user_generator._delete_tenants() self.assertEqual(len(user_generator.context["tenants"]), 0)
def _get_user_ctx_for_validation(self, context): if self.existing_users: context["config"] = {"existing_users": self.existing_users} user_context = existing_users_ctx.ExistingUsers(context) else: user_context = users_ctx.UserGenerator(context) return user_context
def test__delete_users_failure(self, mock_keystone): wrapped_keystone = mock_keystone.wrap.return_value wrapped_keystone.delete_user.side_effect = Exception() user_generator = users.UserGenerator(self.context) user1 = mock.MagicMock() user2 = mock.MagicMock() user_generator.context["users"] = [user1, user2] user_generator._delete_users() self.assertEqual(len(user_generator.context["users"]), 0)
def test__delete_tenants_failure(self, mock_keystone): wrapped_keystone = mock_keystone.wrap.return_value wrapped_keystone.delete_project.side_effect = Exception() user_generator = users.UserGenerator(self.context) user_generator.context["tenants"] = { "t1": dict(id="t1", name="t1"), "t2": dict(id="t2", name="t2") } user_generator._delete_tenants() self.assertEqual(len(user_generator.context["tenants"]), 0)
def test__create_users(self, mock_keystone, mock_sleep): user_generator = users.UserGenerator(self.context) user_generator.context["tenants"] = { "t1": dict(id="t1", name="t1"), "t2": dict(id="t2", name="t2") } user_generator.config["users_per_tenant"] = 2 users_ = user_generator._create_users() self.assertEqual(4, len(users_)) for user in users_: self.assertIn("id", user) self.assertIn("endpoint", user)
def test_setup_and_cleanup(self, mock_keystone): wrapped_keystone = mock.MagicMock() mock_keystone.wrap.return_value = wrapped_keystone with users.UserGenerator(self.context) as ctx: ctx.setup() self.assertEqual(len(ctx.context["users"]), self.users_num) self.assertEqual(len(ctx.context["tenants"]), self.tenants_num) # Cleanup (called by content manager) self.assertEqual(len(ctx.context["users"]), 0) self.assertEqual(len(ctx.context["tenants"]), 0)
def test_users_and_tenants_in_context(self, mock_osclients): fc = fakes.FakeClients() mock_osclients.Clients.return_value = fc task = {"uuid": "abcdef"} config = { "config": { "users": { "tenants": 2, "users_per_tenant": 2, "concurrent": 1 } }, "admin": { "endpoint": mock.MagicMock() }, "task": task } with users.UserGenerator(config) as ctx: ctx.setup() tenants = [] for i, t in enumerate(fc.keystone().tenants.list()): pattern = users.UserGenerator.PATTERN_TENANT tenants.append({ "id": t.id, "name": pattern % { "task_id": task["uuid"], "iter": i } }) self.assertEqual(ctx.context["tenants"], tenants) for user in ctx.context["users"]: self.assertEqual(set(["id", "endpoint", "tenant_id"]), set(user.keys())) tenants_ids = [] for t in tenants: tenants_ids.extend([t["id"], t["id"]]) users_ids = [user.id for user in fc.keystone().users.list()] for (user, tenant_id, user_id) in zip(ctx.context["users"], tenants_ids, users_ids): self.assertEqual(user["id"], user_id) self.assertEqual(user["tenant_id"], tenant_id)
def test_users_and_tenants_in_context(self): task = {"uuid": "abcdef"} config = { "config": { "users": { "tenants": 2, "users_per_tenant": 2, "concurrent": 1 } }, "admin": { "endpoint": mock.MagicMock() }, "task": task } user_list = [ mock.MagicMock(id='id_%d' % i) for i in range(self.users_num) ] self.wrapped_keystone.create_user.side_effect = user_list with users.UserGenerator(config) as ctx: ctx.setup() create_tenant_calls = [] for i, t in enumerate(ctx.context["tenants"]): pattern = users.UserGenerator.PATTERN_TENANT create_tenant_calls.append( mock.call(pattern % { "task_id": task["uuid"], "iter": i }, ctx.config["project_domain"])) self.wrapped_keystone.create_project.assert_has_calls( create_tenant_calls, any_order=True) for user in ctx.context["users"]: self.assertEqual(set(["id", "endpoint", "tenant_id"]), set(user.keys())) tenants_ids = [] for t in ctx.context["tenants"]: tenants_ids.extend([t["id"], t["id"]]) for (user, tenant_id, orig_user) in zip(ctx.context["users"], tenants_ids, user_list): self.assertEqual(user["id"], orig_user.id) self.assertEqual(user["tenant_id"], tenant_id)
def test_users_and_tenants_in_context(self, mock_keystone): wrapped_keystone = mock.MagicMock() mock_keystone.wrap.return_value = wrapped_keystone task = {"uuid": "abcdef"} config = { "config": { "users": { "tenants": 1, "users_per_tenant": 2, "resource_management_workers": 1 } }, "admin": { "endpoint": mock.MagicMock() }, "task": task } user_list = [ mock.MagicMock(id="id_%d" % i) for i in range(self.users_num) ] wrapped_keystone.create_user.side_effect = user_list with users.UserGenerator(config) as ctx: ctx.setup() create_tenant_calls = [] for i, t in enumerate(ctx.context["tenants"]): pattern = users.UserGenerator.PATTERN_TENANT create_tenant_calls.append( mock.call(pattern % { "task_id": task["uuid"], "iter": i }, ctx.config["project_domain"])) for user in ctx.context["users"]: self.assertEqual(set(["id", "endpoint", "tenant_id"]), set(user.keys())) tenants_ids = [] for t in ctx.context["tenants"].keys(): tenants_ids.append(t) for (user, tenant_id, orig_user) in zip(ctx.context["users"], tenants_ids, user_list): self.assertEqual(user["id"], orig_user.id) self.assertEqual(user["tenant_id"], tenant_id)
def _validate_config_semantic(self, config): self._check_cloud() # NOTE(boris-42): In future we will have more complex context, because # we will have pre-created users mode as well. context = {"task": self.task, "admin": {"endpoint": self.admin}} deployment = objects.Deployment.get(self.task["deployment_uuid"]) with users_ctx.UserGenerator(context) as ctx: ctx.setup() admin = osclients.Clients(self.admin) user = osclients.Clients(context["users"][0]["endpoint"]) for name, values in six.iteritems(config): for pos, kwargs in enumerate(values): self._validate_config_semantic_helper( admin, user, name, pos, deployment, kwargs)
def _validate_config_semantic(self, config): # NOTE(boris-42): In future we will have more complex context, because # we will have pre-created users mode as well. context = { "task": self.task, "admin": { "endpoint": self.admin_endpoint } } with users_ctx.UserGenerator(context) as ctx: ctx.setup() admin = osclients.Clients(self.admin_endpoint) user = osclients.Clients(context["users"][0]["endpoint"]) for name, values in config.iteritems(): for pos, kwargs in enumerate(values): self._validate_config_semantic_helper( admin, user, name, pos, self.task, kwargs)
def test_setup_and_cleanup(self, mock_osclients): fc = fakes.FakeClients() mock_osclients.Clients.return_value = fc with users.UserGenerator(self.context) as ctx: self.assertEqual(len(fc.keystone().users.list()), 0) self.assertEqual(len(fc.keystone().tenants.list()), 0) ctx.setup() self.assertEqual(len(ctx.context["users"]), self.users_num) self.assertEqual(len(fc.keystone().users.list()), self.users_num) self.assertEqual(len(ctx.context["tenants"]), self.tenants_num) self.assertEqual(len(fc.keystone().tenants.list()), self.tenants_num) # Cleanup (called by content manager) self.assertEqual(len(fc.keystone().users.list()), 0) self.assertEqual(len(fc.keystone().tenants.list()), 0)