Fix scenario tests

- Add tests to assert data survives instance actions such as
   restart, resize and upgrade.

 - Run configuarion update tests before creating new instance
   with config group attached. Updating a config group on an instance
   in BUILD state results in an exception in API because
   the new values cannot be applied to a building instance.
   * This is something we may want to handle in Trove itself.
     It is not entirely clear to me how.
     Once the config values are in prepare we cannot change them
     until the instance goes ACTIVE. A similar issue also apperently
     affects other Trove functions such as modules.
     Throwing the exception and letting the taskmanager retry is
     probably the safest way for now.

Change-Id: Ib19071af23f99b77eec9613157cfa11f00f53078
This commit is contained in:
Petr Malik 2016-10-06 16:54:19 -04:00
parent 8b7e6e6a79
commit e23928bf7e
5 changed files with 101 additions and 8 deletions

View File

@ -212,14 +212,8 @@ class ConfigurationInstCreateGroup(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=[create_instance_with_conf])
runs_after=[delete_attached_non_dynamic_group])
def update_non_dynamic_group(self):
"""Test update non-dynamic group."""
self.test_runner.run_update_non_dynamic_group()
@ -230,6 +224,11 @@ class ConfigurationInstCreateGroup(TestGroup):
"""Test detach non-dynamic group."""
self.test_runner.run_detach_non_dynamic_group()
@test(runs_after=[detach_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_groups=[groups.CFGGRP_INST_CREATE],
groups=[GROUP, groups.CFGGRP_INST,

View File

@ -41,15 +41,42 @@ class InstanceActionsGroup(TestGroup):
InstanceActionsRunnerFactory.instance())
@test
def add_test_data(self):
"""Add test data."""
self.test_runner.run_add_test_data()
@test(depends_on=[add_test_data])
def verify_test_data(self):
"""Verify test data."""
self.test_runner.run_verify_test_data()
@test(runs_after=[verify_test_data])
def instance_restart(self):
"""Restart an existing instance."""
self.test_runner.run_instance_restart()
@test(depends_on=[instance_restart])
@test(depends_on=[verify_test_data, instance_restart])
def verify_test_data_after_restart(self):
"""Verify test data after restart."""
self.test_runner.run_verify_test_data()
@test(depends_on=[instance_restart],
runs_after=[verify_test_data_after_restart])
def instance_resize_volume(self):
"""Resize attached volume."""
self.test_runner.run_instance_resize_volume()
@test(depends_on=[verify_test_data, instance_resize_volume])
def verify_test_data_after_volume_resize(self):
"""Verify test data after volume resize."""
self.test_runner.run_verify_test_data()
@test(depends_on=[add_test_data],
runs_after=[verify_test_data_after_volume_resize])
def remove_test_data(self):
"""Remove test data."""
self.test_runner.run_remove_test_data()
@test(depends_on_groups=[groups.INST_CREATE_WAIT],
groups=[GROUP, groups.INST_ACTIONS_RESIZE],
@ -67,6 +94,16 @@ class InstanceActionsResizeGroup(TestGroup):
InstanceActionsRunnerFactory.instance())
@test
def add_test_data(self):
"""Add test data."""
self.test_runner.run_add_test_data()
@test(depends_on=[add_test_data])
def verify_test_data(self):
"""Verify test data."""
self.test_runner.run_verify_test_data()
@test(runs_after=[verify_test_data])
def instance_resize_flavor(self):
"""Resize instance flavor."""
self.test_runner.run_instance_resize_flavor()
@ -88,3 +125,13 @@ class InstanceActionsResizeWaitGroup(TestGroup):
def wait_for_instance_resize_flavor(self):
"""Wait for resize instance flavor to complete."""
self.test_runner.run_wait_for_instance_resize_flavor()
@test(depends_on=[wait_for_instance_resize_flavor])
def verify_test_data_after_flavor_resize(self):
"""Verify test data after flavor resize."""
self.test_runner.run_verify_test_data()
@test(runs_after=[verify_test_data_after_flavor_resize])
def remove_test_data(self):
"""Remove test data."""
self.test_runner.run_remove_test_data()

View File

@ -65,6 +65,16 @@ class InstanceUpgradeGroup(TestGroup):
self.user_actions_runner.run_users_create()
@test(runs_after=[create_users])
def add_test_data(self):
"""Add test data."""
self.test_runner.run_add_test_data()
@test(depends_on=[add_test_data])
def verify_test_data(self):
"""Verify test data."""
self.test_runner.run_verify_test_data()
@test(runs_after=[verify_test_data])
def instance_upgrade(self):
"""Upgrade an existing instance."""
self.test_runner.run_instance_upgrade()
@ -80,6 +90,17 @@ class InstanceUpgradeGroup(TestGroup):
"""List the created users."""
self.user_actions_runner.run_users_list()
@test(depends_on=[verify_test_data, instance_upgrade])
def verify_test_data_after_upgrade(self):
"""Verify test data after upgrade."""
self.test_runner.run_verify_test_data()
@test(depends_on=[add_test_data],
runs_after=[verify_test_data_after_upgrade])
def remove_test_data(self):
"""Remove test data."""
self.test_runner.run_remove_test_data()
@test(depends_on=[create_users],
runs_after=[list_users])
def delete_user(self):

View File

@ -16,6 +16,7 @@
from proboscis import SkipTest
from trove.tests.config import CONFIG
from trove.tests.scenario.helpers.test_helper import DataType
from trove.tests.scenario.runners.test_runners import TestRunner
@ -36,6 +37,18 @@ class InstanceActionsRunner(TestRunner):
return self.get_flavor(flavor_name)
def run_add_test_data(self):
host = self.get_instance_host(self.instance_info.id)
self.test_helper.add_data(DataType.small, host)
def run_verify_test_data(self):
host = self.get_instance_host(self.instance_info.id)
self.test_helper.verify_data(DataType.small, host)
def run_remove_test_data(self):
host = self.get_instance_host(self.instance_info.id)
self.test_helper.remove_data(DataType.small, host)
def run_instance_restart(
self, expected_states=['REBOOT', 'ACTIVE'],
expected_http_code=202):

View File

@ -13,6 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from trove.tests.scenario.helpers.test_helper import DataType
from trove.tests.scenario.runners.test_runners import TestRunner
@ -21,6 +22,18 @@ class InstanceUpgradeRunner(TestRunner):
def __init__(self):
super(InstanceUpgradeRunner, self).__init__()
def run_add_test_data(self):
host = self.get_instance_host(self.instance_info.id)
self.test_helper.add_data(DataType.small, host)
def run_verify_test_data(self):
host = self.get_instance_host(self.instance_info.id)
self.test_helper.verify_data(DataType.small, host)
def run_remove_test_data(self):
host = self.get_instance_host(self.instance_info.id)
self.test_helper.remove_data(DataType.small, host)
def run_instance_upgrade(
self, expected_states=['UPGRADE', 'ACTIVE'],
expected_http_code=202):