diff --git a/examples/integration_test/it.py b/examples/integration_test/it.py index ca7e63faf86814c96d5285c9ec6ca53bce9c5f10..6e93890e5162695062ddb9b4bb7b039236519e24 100644 --- a/examples/integration_test/it.py +++ b/examples/integration_test/it.py @@ -27,6 +27,7 @@ interfaces/APIs that are supported. import argparse import logging +import json import sys import time import traceback @@ -109,7 +110,7 @@ def run(oidc_username, storage_username): # running array of test case results, unfortunately we have to hardcode the number of # test cases because the indeterminate progress bar is not helpful for the tester - NUM_TEST_CASES = 29 + NUM_TEST_CASES = 31 results = TestCases(NUM_TEST_CASES) try: @@ -142,13 +143,35 @@ def run(oidc_username, storage_username): # ensure the desired IT experiment is cloned and is available in the storage server. Clone # the experiment first if not. - results.start('Checking for Empty Template Husky Experiment in the Storage Server') - if 'template_husky_0' not in vc._VirtualCoach__get_experiment_list(cloned=True): - if 'ExDTemplateHusky' not in [s[0] for s in server_info.iteritems()]: - raise TestCaseError('Husky Template Experiment is not available on the server to be' - ' cloned.') - else: - vc.clone_experiment_to_storage('ExDTemplateHusky') + results.start('Cloning a new Empty Template Husky Experiment from the Storage Server') + + if 'ExDTemplateHusky' not in [s[0] for s in server_info.iteritems()]: + raise TestCaseError('Husky Template Experiment is not available on the server to be' + ' cloned.') + experiment_id = vc.clone_experiment_to_storage('ExDTemplateHusky') + stored_experiments = vc._VirtualCoach__get_experiment_list(cloned=True) + if experiment_id not in stored_experiments: + raise TestCaseError('Template Husky Experiment was not cloned to the storage.') + results.done(True) + + ## + ## Clone a Cloned Experiment + ## + + results.start('Cloning a cloned experiment') + new_experiment_id = json.loads(vc.clone_cloned_experiment(experiment_id))['clonedExp'] + if new_experiment_id not in vc._VirtualCoach__get_experiment_list(cloned=True): + raise TestCaseError('Cloning the cloned Template Husky Experiment failed') + results.done(True) + + ## + ## Delete a Cloned Experiment + ## + + results.start('Deleting a cloned experiment') + vc.delete_cloned_experiment(new_experiment_id) + if new_experiment_id in vc._VirtualCoach__get_experiment_list(cloned=True): + raise TestCaseError('Deleting a cloned Experiment failed') results.done(True) ## @@ -157,7 +180,7 @@ def run(oidc_username, storage_username): # launch an experiment results.start('Launching Empty Template Husky Experiment') - sim = vc.launch_experiment('template_husky_0') + sim = vc.launch_experiment(experiment_id) results.done(True) # status handlers for simulation status events, simply write to our global status message @@ -421,13 +444,14 @@ def tf(t): results.done(True) ## - ## Shutdown and Cleanup + ## Shutdown, Cleanup and Delete the cloned experiment used in the tests ## # shutdown the experiment cleanly results.start('Stopping Simulation') sim.stop() wait_condition(5, 'Waiting for simulation to stop.', lambda x: x['state'] == 'stopped') + vc.delete_cloned_experiment(experiment_id) results.done(True) # handle test case or unexpected failures, attempt to cleanup and terminate diff --git a/hbp_nrp_virtual_coach/hbp_nrp_virtual_coach/tests/test_virtual_coach.py b/hbp_nrp_virtual_coach/hbp_nrp_virtual_coach/tests/test_virtual_coach.py index 364f3cf8d72b13710441e5052bc69f4b09fd1242..5da507d918af4a37cea05a0040003de5391abf04 100644 --- a/hbp_nrp_virtual_coach/hbp_nrp_virtual_coach/tests/test_virtual_coach.py +++ b/hbp_nrp_virtual_coach/hbp_nrp_virtual_coach/tests/test_virtual_coach.py @@ -446,6 +446,7 @@ mock-server-5 class Request(object): status_code = 200 + content = 'experiment_id' request.return_value = Request() self._vc._VirtualCoach__storage_username = 'username' @@ -496,6 +497,7 @@ mock-server-5 class Request(object): status_code = 200 + content = None request.return_value = Request() self._vc._VirtualCoach__storage_username = 'token' diff --git a/hbp_nrp_virtual_coach/hbp_nrp_virtual_coach/virtual_coach.py b/hbp_nrp_virtual_coach/hbp_nrp_virtual_coach/virtual_coach.py index 230191e91cfbafb51419ac82d6d801a65ee3ed97..bedf6a3cb09b788cb46de83dcb2f24e216fb8c4a 100644 --- a/hbp_nrp_virtual_coach/hbp_nrp_virtual_coach/virtual_coach.py +++ b/hbp_nrp_virtual_coach/hbp_nrp_virtual_coach/virtual_coach.py @@ -281,6 +281,7 @@ class VirtualCoach(object): instantiated with Storage Server support, i.e. Storage Server credentials :param exp_id: The id of the experiment to be cloned + :returns: The ID of the cloned experiment """ assert isinstance(exp_id, str) @@ -297,6 +298,7 @@ class VirtualCoach(object): raise Exception('Cloning Experiment failed, Status Code: %s' % res.status_code) else: logger.info('Experiment "%s" cloned successfully', exp_id) + return res.content def delete_cloned_experiment(self, exp_id): """ @@ -318,6 +320,8 @@ class VirtualCoach(object): Attempts to clone a cloned experiment to the Storage Server. :param experiment_id: The id of the cloned experiment to be cloned. E.g. benchmark_p3dx_1 + :returns: A dict containing the ID of the cloned experiment and the ID of the original + experiment. Dict Keys are: 'clonedExp' and 'originalExp' """ assert isinstance(experiment_id, str) @@ -341,6 +345,7 @@ class VirtualCoach(object): raise Exception('Cloning Experiment failed, Status Code: %s' % res.status_code) else: logger.info('Experiment "%s" cloned successfully', experiment_id) + return res.content def print_cloned_experiments(self): """