From a080a69c5896624aa8326b653487eb51bf5e5fd5 Mon Sep 17 00:00:00 2001 From: Peter Stachowski Date: Mon, 30 May 2016 13:46:19 -0400 Subject: [PATCH] Break apart configuration group scenario tests The configuration group scenario tests were broken into separate parts to facilitate parallel runs in the gate. Change-Id: Id6f4b0a4060d6c88e547b62e74f97df881cf4425 Partial-Bug: #1571092 --- trove/tests/int_tests.py | 5 + .../scenario/groups/configuration_group.py | 168 +++++++++++------- .../scenario/runners/configuration_runners.py | 17 +- 3 files changed, 123 insertions(+), 67 deletions(-) diff --git a/trove/tests/int_tests.py b/trove/tests/int_tests.py index 091f708ec6..80a494ee8f 100644 --- a/trove/tests/int_tests.py +++ b/trove/tests/int_tests.py @@ -150,6 +150,10 @@ incremental_backup_groups.extend([backup_group.GROUP_INCREMENTAL]) configuration_groups = list(instance_create_groups) configuration_groups.extend([configuration_group.GROUP]) +configuration_create_groups = list(base_groups) +configuration_create_groups.extend([configuration_group.GROUP_CFGGRP_CREATE, + configuration_group.GROUP_CFGGRP_DELETE]) + database_actions_groups = list(instance_create_groups) database_actions_groups.extend([database_actions_group.GROUP]) @@ -184,6 +188,7 @@ register(["backup"], backup_groups) register(["incremental_backup"], incremental_backup_groups) register(["cluster"], cluster_actions_groups) register(["configuration"], configuration_groups) +register(["configuration_create"], configuration_create_groups) register(["database"], database_actions_groups) register(["guest_log"], guest_log_groups) register(["instance", "instance_actions"], instance_actions_groups) diff --git a/trove/tests/scenario/groups/configuration_group.py b/trove/tests/scenario/groups/configuration_group.py index bd58a0594a..3756606d2e 100644 --- a/trove/tests/scenario/groups/configuration_group.py +++ b/trove/tests/scenario/groups/configuration_group.py @@ -21,6 +21,13 @@ from trove.tests.scenario.runners import test_runners GROUP = "scenario.configuration_group" +GROUP_CFGGRP_CREATE = "scenario.cfggrp_create_group" +GROUP_CFGGRP_INST = "scenario.cfggrp_inst_group" +GROUP_CFGGRP_INST_CREATE = "scenario.cfggrp_inst_create_group" +GROUP_CFGGRP_INST_CREATE_WAIT = "scenario.cfggrp_inst_create_wait_group" +GROUP_CFGGRP_INST_DELETE = "scenario.cfggrp_inst_delete_group" +GROUP_CFGGRP_INST_DELETE_WAIT = "scenario.cfggrp_inst_delete_wait_group" +GROUP_CFGGRP_DELETE = "scenario.cfggrp_delete_group" class ConfigurationRunnerFactory(test_runners.RunnerFactory): @@ -29,11 +36,12 @@ class ConfigurationRunnerFactory(test_runners.RunnerFactory): _runner_cls = 'ConfigurationRunner' -@test(depends_on_groups=[instance_create_group.GROUP], groups=[GROUP]) -class ConfigurationGroup(TestGroup): +@test(groups=[GROUP, GROUP_CFGGRP_CREATE]) +class ConfigurationCreateGroup(TestGroup): + """Test Configuration Group functionality.""" def __init__(self): - super(ConfigurationGroup, self).__init__( + super(ConfigurationCreateGroup, self).__init__( ConfigurationRunnerFactory.instance()) @test @@ -56,20 +64,6 @@ class ConfigurationGroup(TestGroup): """Ensure delete bad group fails.""" self.test_runner.run_delete_bad_group_id() - @test - def attach_non_existent_group(self): - """Ensure attach non-existent group fails.""" - self.test_runner.run_attach_non_existent_group() - - def attach_non_existent_group_to_non_existent_inst(self): - """Ensure attach non-existent group to non-existent inst fails.""" - self.test_runner.run_attach_non_existent_group_to_non_existent_inst() - - @test - def detach_group_with_none_attached(self): - """Test detach with none attached.""" - self.test_runner.run_detach_group_with_none_attached() - @test def create_dynamic_group(self): """Create a group with only dynamic entries.""" @@ -80,16 +74,6 @@ class ConfigurationGroup(TestGroup): """Create a group with only non-dynamic entries.""" self.test_runner.run_create_non_dynamic_group() - @test(depends_on=[create_dynamic_group]) - def attach_dynamic_group_to_non_existent_inst(self): - """Ensure attach dynamic group to non-existent inst fails.""" - self.test_runner.run_attach_dynamic_group_to_non_existent_inst() - - @test(depends_on=[create_non_dynamic_group]) - def attach_non_dynamic_group_to_non_existent_inst(self): - """Ensure attach non-dynamic group to non-existent inst fails.""" - self.test_runner.run_attach_non_dynamic_group_to_non_existent_inst() - @test(depends_on=[create_dynamic_group, create_non_dynamic_group]) def list_configuration_groups(self): """Test list configuration groups.""" @@ -115,15 +99,49 @@ class ConfigurationGroup(TestGroup): """Ensure show non-dynamic fails with unauthorized user.""" self.test_runner.run_non_dynamic_conf_get_unauthorized_user() - @test(depends_on=[create_dynamic_group], - runs_after=[list_configuration_groups]) + +@test(depends_on_groups=[instance_create_group.GROUP, + GROUP_CFGGRP_CREATE], + groups=[GROUP, GROUP_CFGGRP_INST, GROUP_CFGGRP_INST_CREATE]) +class ConfigurationInstCreateGroup(TestGroup): + """Test Instance Configuration Group Create functionality.""" + + def __init__(self): + super(ConfigurationInstCreateGroup, self).__init__( + ConfigurationRunnerFactory.instance()) + + @test + def attach_non_existent_group(self): + """Ensure attach non-existent group fails.""" + self.test_runner.run_attach_non_existent_group() + + @test + def attach_non_existent_group_to_non_existent_inst(self): + """Ensure attach non-existent group to non-existent inst fails.""" + self.test_runner.run_attach_non_existent_group_to_non_existent_inst() + + @test + def detach_group_with_none_attached(self): + """Test detach with none attached.""" + self.test_runner.run_detach_group_with_none_attached() + + @test + def attach_dynamic_group_to_non_existent_inst(self): + """Ensure attach dynamic group to non-existent inst fails.""" + self.test_runner.run_attach_dynamic_group_to_non_existent_inst() + + @test + def attach_non_dynamic_group_to_non_existent_inst(self): + """Ensure attach non-dynamic group to non-existent inst fails.""" + self.test_runner.run_attach_non_dynamic_group_to_non_existent_inst() + + @test def list_dynamic_inst_conf_groups_before(self): """Count list instances for dynamic group before attach.""" self.test_runner.run_list_dynamic_inst_conf_groups_before() - @test(depends_on=[create_dynamic_group], - runs_after=[list_dynamic_inst_conf_groups_before, - attach_non_existent_group, + @test(depends_on=[list_dynamic_inst_conf_groups_before], + runs_after=[attach_non_existent_group, detach_group_with_none_attached]) def attach_dynamic_group(self): """Test attach dynamic group.""" @@ -158,20 +176,18 @@ class ConfigurationGroup(TestGroup): """Test update dynamic group.""" self.test_runner.run_update_dynamic_group() - @test(depends_on=[create_dynamic_group], + @test(depends_on=[attach_dynamic_group], runs_after=[update_dynamic_group]) def detach_dynamic_group(self): """Test detach dynamic group.""" self.test_runner.run_detach_dynamic_group() - @test(depends_on=[create_non_dynamic_group], - runs_after=[detach_dynamic_group]) + @test(runs_after=[detach_dynamic_group]) def list_non_dynamic_inst_conf_groups_before(self): """Count list instances for non-dynamic group before attach.""" self.test_runner.run_list_non_dynamic_inst_conf_groups_before() - @test(depends_on=[create_non_dynamic_group], - runs_after=[list_non_dynamic_inst_conf_groups_before, + @test(runs_after=[list_non_dynamic_inst_conf_groups_before, attach_non_existent_group]) def attach_non_dynamic_group(self): """Test attach non-dynamic group.""" @@ -200,8 +216,14 @@ class ConfigurationGroup(TestGroup): """Ensure deleting attached non-dynamic group fails.""" self.test_runner.run_delete_attached_non_dynamic_group() + @test(runs_after=[list_dynamic_inst_conf_groups_after, + list_non_dynamic_inst_conf_groups_after]) + def create_instance_with_conf(self): + """Test create instance with conf group.""" + self.test_runner.run_create_instance_with_conf() + @test(depends_on=[attach_non_dynamic_group], - runs_after=[delete_attached_non_dynamic_group]) + runs_after=[create_instance_with_conf]) def update_non_dynamic_group(self): """Test update non-dynamic group.""" self.test_runner.run_update_non_dynamic_group() @@ -212,15 +234,16 @@ class ConfigurationGroup(TestGroup): """Test detach non-dynamic group.""" self.test_runner.run_detach_non_dynamic_group() - @test(runs_after=[create_dynamic_group, create_non_dynamic_group, - update_dynamic_group, update_non_dynamic_group]) - def create_instance_with_conf(self): - """Test create instance with conf group.""" - self.test_runner.run_create_instance_with_conf() - @test(depends_on=[create_instance_with_conf], - runs_after=[create_dynamic_group, create_non_dynamic_group, - update_dynamic_group, update_non_dynamic_group]) +@test(depends_on_groups=[GROUP_CFGGRP_INST_CREATE], + groups=[GROUP, GROUP_CFGGRP_INST, GROUP_CFGGRP_INST_CREATE_WAIT]) +class ConfigurationInstCreateWaitGroup(TestGroup): + """Test that Instance Configuration Group Create Completes.""" + def __init__(self): + super(ConfigurationInstCreateWaitGroup, self).__init__( + ConfigurationRunnerFactory.instance()) + + @test def wait_for_conf_instance(self): """Test create instance with conf group completes.""" self.test_runner.run_wait_for_conf_instance() @@ -230,28 +253,53 @@ class ConfigurationGroup(TestGroup): """Verify configuration values on the instance.""" self.test_runner.run_verify_instance_values() - @test(depends_on=[wait_for_conf_instance], - runs_after=[verify_instance_values]) + +@test(depends_on_groups=[GROUP_CFGGRP_INST_CREATE_WAIT], + groups=[GROUP, GROUP_CFGGRP_INST, GROUP_CFGGRP_INST_DELETE]) +class ConfigurationInstDeleteGroup(TestGroup): + """Test Instance Configuration Group Delete functionality.""" + + def __init__(self): + super(ConfigurationInstDeleteGroup, self).__init__( + ConfigurationRunnerFactory.instance()) + + @test def delete_conf_instance(self): """Test delete instance with conf group.""" self.test_runner.run_delete_conf_instance() - @test(depends_on=[create_dynamic_group], - runs_after=[list_configuration_groups, detach_dynamic_group, - dynamic_configuration_show, - dynamic_conf_get_unauthorized_user, - attach_dynamic_group_to_non_existent_inst, - delete_conf_instance]) + +@test(depends_on_groups=[GROUP_CFGGRP_INST_DELETE], + groups=[GROUP, GROUP_CFGGRP_INST, GROUP_CFGGRP_INST_DELETE_WAIT]) +class ConfigurationInstDeleteWaitGroup(TestGroup): + """Test that Instance Configuration Group Delete Completes.""" + + def __init__(self): + super(ConfigurationInstDeleteWaitGroup, self).__init__( + ConfigurationRunnerFactory.instance()) + + @test + def wait_for_delete_conf_instance(self): + """Wait for delete instance with conf group to complete.""" + self.test_runner.run_wait_for_delete_conf_instance() + + +@test(depends_on_groups=[GROUP_CFGGRP_CREATE], + runs_after_groups=[GROUP_CFGGRP_INST_DELETE_WAIT], + groups=[GROUP, GROUP_CFGGRP_DELETE]) +class ConfigurationDeleteGroup(TestGroup): + """Test Configuration Group Delete functionality.""" + + def __init__(self): + super(ConfigurationDeleteGroup, self).__init__( + ConfigurationRunnerFactory.instance()) + + @test def delete_dynamic_group(self): """Test delete dynamic group.""" self.test_runner.run_delete_dynamic_group() - @test(depends_on=[create_non_dynamic_group], - runs_after=[list_configuration_groups, detach_non_dynamic_group, - non_dynamic_configuration_show, - non_dynamic_conf_get_unauthorized_user, - attach_non_dynamic_group_to_non_existent_inst, - delete_conf_instance]) + @test def delete_non_dynamic_group(self): """Test delete non-dynamic group.""" self.test_runner.run_delete_non_dynamic_group() diff --git a/trove/tests/scenario/runners/configuration_runners.py b/trove/tests/scenario/runners/configuration_runners.py index 33a4190388..ef933dd65e 100644 --- a/trove/tests/scenario/runners/configuration_runners.py +++ b/trove/tests/scenario/runners/configuration_runners.py @@ -537,17 +537,20 @@ class ConfigurationRunner(TestRunner): else: raise SkipTest("No instance created with a configuration group.") - def run_delete_conf_instance( - self, expected_states=['SHUTDOWN'], - expected_http_code=202): + def run_delete_conf_instance(self, expected_http_code=202): if self.config_inst_id: self.assert_delete_conf_instance( - self.config_inst_id, expected_states, expected_http_code) + self.config_inst_id, expected_http_code) else: raise SkipTest("No instance created with a configuration group.") - def assert_delete_conf_instance( - self, instance_id, expected_state, expected_http_code): + def assert_delete_conf_instance(self, instance_id, expected_http_code): self.auth_client.instances.delete(instance_id) self.assert_client_code(expected_http_code) - self.assert_all_gone(instance_id, expected_state) + + def run_wait_for_delete_conf_instance( + self, expected_last_state=['SHUTDOWN']): + if self.config_inst_id: + self.assert_all_gone(self.config_inst_id, expected_last_state) + else: + raise SkipTest("No instance created with a configuration group.")