Scenario tests wait on helper user creation
Post-prepare actions take long. About 1 min or more on some datastores. We need to wait for the helper user/database to appear on the instance before proceeding with other tests that require them. Change-Id: If06fc9eede0d1f11c2a7ca723e540e0068871cf6
This commit is contained in:
parent
731ca1bdfd
commit
434a72bf94
|
@ -28,7 +28,7 @@ class InstanceCreateRunner(TestRunner):
|
|||
|
||||
def __init__(self):
|
||||
super(InstanceCreateRunner, self).__init__()
|
||||
self.init_inst_id = None
|
||||
self.init_inst_info = None
|
||||
self.init_inst_dbs = None
|
||||
self.init_inst_users = None
|
||||
self.init_inst_host = None
|
||||
|
@ -60,6 +60,8 @@ class InstanceCreateRunner(TestRunner):
|
|||
self.instance_info.volume = instance_info.volume
|
||||
self.instance_info.srv_grp_id = self.assert_server_group_exists(
|
||||
self.instance_info.id)
|
||||
self.instance_info.helper_user = instance_info.helper_user
|
||||
self.instance_info.helper_database = instance_info.helper_database
|
||||
|
||||
def run_initial_configuration_create(self, expected_http_code=200):
|
||||
dynamic_config = self.test_helper.get_dynamic_group()
|
||||
|
@ -108,7 +110,7 @@ class InstanceCreateRunner(TestRunner):
|
|||
expected_states, expected_http_code,
|
||||
create_helper_user=create_helper_user)
|
||||
|
||||
self.init_inst_id = info.id
|
||||
self.init_inst_info = info
|
||||
else:
|
||||
# There is no need to run this test as it's effectively the same as
|
||||
# the empty instance test.
|
||||
|
@ -131,6 +133,8 @@ class InstanceCreateRunner(TestRunner):
|
|||
users = [{'name': item['name'], 'password': item['password']}
|
||||
for item in user_definitions]
|
||||
|
||||
instance_info = InstanceTestInfo()
|
||||
|
||||
# Here we add helper user/database if any.
|
||||
if create_helper_user:
|
||||
helper_db_def, helper_user_def, root_def = self.build_helper_defs()
|
||||
|
@ -139,14 +143,15 @@ class InstanceCreateRunner(TestRunner):
|
|||
"Appending a helper database '%s' to the instance "
|
||||
"definition." % helper_db_def['name'])
|
||||
databases.append(helper_db_def)
|
||||
instance_info.helper_database = helper_db_def
|
||||
if helper_user_def:
|
||||
self.report.log(
|
||||
"Appending a helper user '%s:%s' to the instance "
|
||||
"definition."
|
||||
% (helper_user_def['name'], helper_user_def['password']))
|
||||
users.append(helper_user_def)
|
||||
instance_info.helper_user = helper_user_def
|
||||
|
||||
instance_info = InstanceTestInfo()
|
||||
instance_info.name = name
|
||||
instance_info.databases = databases
|
||||
instance_info.users = users
|
||||
|
@ -230,20 +235,39 @@ class InstanceCreateRunner(TestRunner):
|
|||
def run_wait_for_created_instances(
|
||||
self, expected_states=['BUILD', 'ACTIVE']):
|
||||
instances = [self.instance_info.id]
|
||||
if self.init_inst_id:
|
||||
instances.append(self.init_inst_id)
|
||||
if self.init_inst_info:
|
||||
instances.append(self.init_inst_info.id)
|
||||
self.assert_all_instance_states(instances, expected_states)
|
||||
|
||||
# It may take some time before the initial users/databases
|
||||
# appear on the instance after it went ACTIVE.
|
||||
# We need to wait for that before we can proceed with data operations.
|
||||
self.wait_for_test_helpers(self.instance_info)
|
||||
if self.init_inst_info:
|
||||
self.wait_for_test_helpers(self.init_inst_info)
|
||||
|
||||
def wait_for_test_helpers(self, inst_info):
|
||||
self.report.log("Waiting for helper users and databases to be "
|
||||
"created on instance: %s" % inst_info.id)
|
||||
if inst_info.helper_user:
|
||||
self.wait_for_user_create(inst_info.id,
|
||||
[inst_info.helper_user])
|
||||
if inst_info.helper_database:
|
||||
self.wait_for_database_create(inst_info.id,
|
||||
[inst_info.helper_database])
|
||||
self.report.log("Test helpers are ready.")
|
||||
|
||||
def run_add_initialized_instance_data(self):
|
||||
self.init_inst_data = DataType.small
|
||||
self.init_inst_host = self.get_instance_host(self.init_inst_id)
|
||||
self.init_inst_host = self.get_instance_host(self.init_inst_info.id)
|
||||
self.test_helper.add_data(self.init_inst_data, self.init_inst_host)
|
||||
|
||||
def run_validate_initialized_instance(self):
|
||||
if self.init_inst_id:
|
||||
if self.init_inst_info:
|
||||
self.assert_instance_properties(
|
||||
self.init_inst_id, self.init_inst_dbs, self.init_inst_users,
|
||||
self.init_inst_config_group_id, self.init_inst_data)
|
||||
self.init_inst_info.id, self.init_inst_dbs,
|
||||
self.init_inst_users, self.init_inst_config_group_id,
|
||||
self.init_inst_data)
|
||||
|
||||
def assert_instance_properties(
|
||||
self, instance_id, expected_dbs_definitions,
|
||||
|
@ -278,38 +302,26 @@ class InstanceCreateRunner(TestRunner):
|
|||
"No configuration group expected")
|
||||
|
||||
def assert_database_list(self, instance_id, expected_databases):
|
||||
expected_names = self._get_names(expected_databases)
|
||||
full_list = self.auth_client.databases.list(instance_id)
|
||||
self.assert_is_none(full_list.next,
|
||||
"Unexpected pagination in the database list.")
|
||||
listed_names = [database.name for database in full_list]
|
||||
self.assert_is_sublist(expected_names, listed_names,
|
||||
"Mismatch in instance databases.")
|
||||
self.wait_for_database_create(instance_id, expected_databases)
|
||||
|
||||
def _get_names(self, definitions):
|
||||
return [item['name'] for item in definitions]
|
||||
|
||||
def assert_user_list(self, instance_id, expected_users):
|
||||
expected_names = self._get_names(expected_users)
|
||||
full_list = self.auth_client.users.list(instance_id)
|
||||
self.assert_is_none(full_list.next,
|
||||
"Unexpected pagination in the user list.")
|
||||
listed_names = [user.name for user in full_list]
|
||||
self.assert_is_sublist(expected_names, listed_names,
|
||||
"Mismatch in instance users.")
|
||||
|
||||
self.wait_for_user_create(instance_id, expected_users)
|
||||
# Verify that user definitions include only created databases.
|
||||
all_databases = self._get_names(
|
||||
self.test_helper.get_valid_database_definitions())
|
||||
for user in expected_users:
|
||||
self.assert_is_sublist(
|
||||
self._get_names(user['databases']), all_databases,
|
||||
"Definition of user '%s' specifies databases not included in "
|
||||
"the list of initial databases." % user['name'])
|
||||
if 'databases' in user:
|
||||
self.assert_is_sublist(
|
||||
self._get_names(user['databases']), all_databases,
|
||||
"Definition of user '%s' specifies databases not included "
|
||||
"in the list of initial databases." % user['name'])
|
||||
|
||||
def run_initialized_instance_delete(self, expected_http_code=202):
|
||||
if self.init_inst_id:
|
||||
self.auth_client.instances.delete(self.init_inst_id)
|
||||
if self.init_inst_info:
|
||||
self.auth_client.instances.delete(self.init_inst_info.id)
|
||||
self.assert_client_code(expected_http_code,
|
||||
client=self.auth_client)
|
||||
else:
|
||||
|
@ -317,13 +329,13 @@ class InstanceCreateRunner(TestRunner):
|
|||
|
||||
def run_wait_for_init_delete(self, expected_states=['SHUTDOWN']):
|
||||
delete_ids = []
|
||||
if self.init_inst_id:
|
||||
delete_ids.append(self.init_inst_id)
|
||||
if self.init_inst_info:
|
||||
delete_ids.append(self.init_inst_info.id)
|
||||
if delete_ids:
|
||||
self.assert_all_gone(delete_ids, expected_states[-1])
|
||||
else:
|
||||
raise SkipTest("Cleanup is not required.")
|
||||
self.init_inst_id = None
|
||||
self.init_inst_info = None
|
||||
self.init_inst_dbs = None
|
||||
self.init_inst_users = None
|
||||
self.init_inst_host = None
|
||||
|
|
|
@ -223,3 +223,6 @@ class CouchbaseRootActionsRunner(RootActionsRunner):
|
|||
|
||||
def run_enable_root_with_password(self):
|
||||
raise SkipTest("Operation is currently not supported.")
|
||||
|
||||
def run_delete_root(self):
|
||||
raise SkipKnownBug(runners.BUG_WRONG_API_VALIDATION)
|
||||
|
|
|
@ -174,6 +174,8 @@ class InstanceTestInfo(object):
|
|||
self.user = None # The user instance who owns the instance.
|
||||
self.users = None # The users created on the instance.
|
||||
self.databases = None # The databases created on the instance.
|
||||
self.helper_user = None # Test helper user if exists.
|
||||
self.helper_database = None # Test helper database if exists.
|
||||
|
||||
|
||||
class TestRunner(object):
|
||||
|
|
|
@ -43,7 +43,7 @@ class UserActionsRunner(TestRunner):
|
|||
if self.user_defs:
|
||||
# Try to use the first user with databases if any.
|
||||
for user_def in self.user_defs:
|
||||
if user_def['databases']:
|
||||
if 'databases' in user_def and user_def['databases']:
|
||||
return user_def
|
||||
return self.user_defs[0]
|
||||
raise SkipTest("No valid user definitions provided.")
|
||||
|
|
Loading…
Reference in New Issue