def test_add_file(self): parent_kitchen = 'CLI-Top' test_kitchen = 'test_create_file-Runner' test_kitchen = self._add_my_guid(test_kitchen) recipe_name = 'simple' file_name = 'added.sql' filedir = 'resources' recipe_file_key = os.path.join(recipe_name, filedir) api_file_key = os.path.join(filedir, file_name) file_contents = '--\n-- sql for you\n--\n\nselect 1024\n\n' message = 'test update test_create_file-API' # test negative rc = DKCloudCommandRunner.add_file(self._api, test_kitchen, recipe_name, message, 'badfile.txt') self.assertFalse(rc.ok()) # create test kitchen self._delete_and_clean_kitchen(test_kitchen) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, test_kitchen) self.assertTrue(rs.ok()) # make and cd to kitchen dir and get the recipe to disk temp_dir, kitchen_dir = self._make_kitchen_dir(test_kitchen, change_dir=True) os.chdir(kitchen_dir) self._get_recipe(test_kitchen, recipe_name) # create new file on disk try: os.chdir(recipe_name) with open(api_file_key, 'w') as f: f.write(file_contents) except ValueError, e: print('could not write file %s.' % e) self.assertTrue(False)
def test_delete_file(self): # setup parent_kitchen = 'CLI-Top' test_kitchen = 'Runner-test_delete_file' test_kitchen = self._add_my_guid(test_kitchen) recipe_name = 'simple' recipe_file_key = recipe_name file_name = 'description.json' message = 'test Delete Runner-test_delete_file' self._delete_and_clean_kitchen(test_kitchen) temp_dir, kitchen_dir = self._make_kitchen_dir(test_kitchen, change_dir=True) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, test_kitchen) self.assertTrue(rs.ok()) os.chdir(kitchen_dir) self.assertTrue(self._get_recipe_file(test_kitchen, recipe_name, recipe_file_key, file_name) is not None) rv = DKCloudCommandRunner.get_recipe(self._api, test_kitchen, recipe_name) self.assertTrue(recipe_name in rv.get_message()) target_file = os.path.join(kitchen_dir, os.path.join(recipe_file_key, file_name)) self.assertTrue(os.path.isfile(target_file)) # the file is there os.remove(target_file) rs = DKCloudCommandRunner.delete_file(self._api, test_kitchen, recipe_name, message, file_name) self.assertTrue(rs.ok()) self.assertTrue(self._get_recipe_file(test_kitchen, recipe_name, recipe_file_key, file_name) is None, "Gone check") # cleanup self._delete_and_clean_kitchen(test_kitchen) shutil.rmtree(temp_dir, ignore_errors=True)
def test_delete_file(self): # setup parent_kitchen = 'CLI-Top' test_kitchen = 'Runner-test_delete_file' test_kitchen = self._add_my_guid(test_kitchen) recipe_name = 'simple' recipe_file_key = recipe_name file_name = 'description.json' message = 'test Delete Runner-test_delete_file' self._delete_and_clean_kitchen(test_kitchen) temp_dir, kitchen_dir = self._make_kitchen_dir(test_kitchen, change_dir=True) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, test_kitchen) self.assertTrue(rs.ok()) os.chdir(kitchen_dir) self.assertTrue(self._get_recipe_file(test_kitchen, recipe_name, recipe_file_key, file_name) is not None) rv = DKCloudCommandRunner.get_recipe(self._api, test_kitchen, recipe_name) self.assertTrue(recipe_name in rv.get_message()) target_file = os.path.join(kitchen_dir, os.path.join(recipe_file_key, file_name)) self.assertTrue(os.path.isfile(target_file)) # the file is there os.remove(target_file) rs = DKCloudCommandRunner.delete_file(self._api, test_kitchen, recipe_name, message, file_name) self.assertTrue(rs.ok()) self.assertTrue(self._get_recipe_file(test_kitchen, recipe_name, recipe_file_key, file_name) is None, "Gone check") # cleanup self._delete_and_clean_kitchen(test_kitchen) shutil.rmtree(temp_dir, ignore_errors=True)
def test_add_file(self): parent_kitchen = 'CLI-Top' test_kitchen = 'test_create_file-Runner' test_kitchen = self._add_my_guid(test_kitchen) recipe_name = 'simple' file_name = 'added.sql' filedir = 'resources' recipe_file_key = os.path.join(recipe_name, filedir) api_file_key = os.path.join(filedir, file_name) file_contents = '--\n-- sql for you\n--\n\nselect 1024\n\n' message = 'test update test_create_file-API' # test negative rc = DKCloudCommandRunner.add_file(self._api, test_kitchen, recipe_name, message, 'badfile.txt') self.assertFalse(rc.ok()) # create test kitchen self._delete_and_clean_kitchen(test_kitchen) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, test_kitchen) self.assertTrue(rs.ok()) # make and cd to kitchen dir and get the recipe to disk temp_dir, kitchen_dir = self._make_kitchen_dir(test_kitchen, change_dir=True) os.chdir(kitchen_dir) self._get_recipe(test_kitchen, recipe_name) # create new file on disk try: os.chdir(recipe_name) with open(api_file_key, 'w') as f: f.write(file_contents) except ValueError, e: print('could not write file %s.' % e) self.assertTrue(False)
def test_order_list_for_repeating_order(self): parent_kitchen = 'master' recipe_name = 'parallel-recipe-test' variation_name = self._get_run_variation_for_recipe(recipe_name, repeater=True) new_kitchen = 'test_order_list_for_repeating_order' new_kitchen = self._add_my_guid(new_kitchen) self._delete_and_clean_kitchen(new_kitchen) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, new_kitchen) self.assertTrue(rs.ok()) rs = DKCloudCommandRunner.create_order(self._api, new_kitchen, recipe_name, variation_name) new_order_id_1 = rs.get_payload() self.assertTrue(rs.ok()) found_completed_serving = False wait_time = [10,61,61,61,61] for wt in wait_time: rs = DKCloudCommandRunner.list_order(self._api, new_kitchen) output_string = rs.rc['message'] n = output_string.count(new_order_id_1) if n >= 3 and ('OrderRun Completed' in output_string): found_completed_serving = True break time.sleep(wt) self.assertTrue(found_completed_serving) # cleanup self._delete_and_clean_kitchen(new_kitchen)
def test_order_list(self): parent_kitchen = 'CLI-Top' recipe_name = 'parallel-recipe-test' variation_name = self._get_run_variation_for_recipe(recipe_name) new_kitchen = 'test_order_list' new_kitchen = self._add_my_guid(new_kitchen) self._delete_and_clean_kitchen(new_kitchen) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, new_kitchen) self.assertTrue(rs.ok()) rs = DKCloudCommandRunner.create_order(self._api, new_kitchen, recipe_name, variation_name) new_order_id_1 = rs.get_payload()['serving_chronos_id'] self.assertTrue(rs.ok()) rs = DKCloudCommandRunner.list_order(self._api, new_kitchen) output_string = rs.rc['message'] self.assertTrue(new_order_id_1 in output_string) found_completed_serving = False wait_time = [.2, .5, .5, .5, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 10, 10] for wt in wait_time: rs = DKCloudCommandRunner.list_order(self._api, new_kitchen) output_string = rs.rc['message'] n = output_string.count(new_order_id_1) if n == 2 and ('OrderRun Completed' in output_string): found_completed_serving = True break time.sleep(wt) self.assertTrue(found_completed_serving) # cleanup self._delete_and_clean_kitchen(new_kitchen)
def test_order_list_with_filters(self): parent_kitchen = 'CLI-Top' # Don't use a guid for this. Don't kitchen = self._add_my_guid('test_order_list_with_filters') recipe1 = 'parallel-recipe-test' recipe1_variation = self._get_run_variation_for_recipe(recipe1) recipe2 = 'simple' recipe2_variation = 'simple-variation-now' setup = True if setup: self._delete_and_clean_kitchen(kitchen) rv = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, kitchen) self.assertTrue(rv.ok()) rv = DKCloudCommandRunner.create_order(self._api, kitchen, recipe1, recipe1_variation) self.assertTrue(rv.ok()) first_order = rv.get_payload() rv = DKCloudCommandRunner.create_order(self._api, kitchen, recipe1, recipe1_variation) self.assertTrue(rv.ok()) time.sleep(20) rs = DKCloudCommandRunner.list_order(self._api, kitchen) self.assertTrue(rs.ok()) message = rs.rc['message'] self.assertTrue( 'OrderRun is Planned' in message or 'OrderRun Completed' in message or 'OrderRun is Active' in message) # cleanup self._delete_and_clean_kitchen(kitchen)
def test_order_list_for_repeating_order(self): parent_kitchen = 'master' recipe_name = 'parallel-recipe-test' variation_name = self._get_run_variation_for_recipe(recipe_name, repeater=True) new_kitchen = 'test_order_list_for_repeating_order' new_kitchen = self._add_my_guid(new_kitchen) self._delete_and_clean_kitchen(new_kitchen) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, new_kitchen) self.assertTrue(rs.ok()) rs = DKCloudCommandRunner.create_order(self._api, new_kitchen, recipe_name, variation_name) new_order_id_1 = rs.get_payload() self.assertTrue(rs.ok()) found_completed_serving = False wait_time = [10,61,61,61,61] for wt in wait_time: rs = DKCloudCommandRunner.list_order(self._api, new_kitchen) output_string = rs.rc['message'] n = output_string.count(new_order_id_1) if n >= 3 and ('OrderRun Completed' in output_string): found_completed_serving = True break time.sleep(wt) self.assertTrue(found_completed_serving) # cleanup self._delete_and_clean_kitchen(new_kitchen)
def test_order_list_with_filters(self): parent_kitchen = 'CLI-Top' # Don't use a guid for this. Don't kitchen = self._add_my_guid('test_order_list_with_filters') recipe1 = 'parallel-recipe-test' recipe1_variation = self._get_run_variation_for_recipe(recipe1) recipe2 = 'simple' recipe2_variation = 'simple-variation-now' setup = True if setup: self._delete_and_clean_kitchen(kitchen) rv = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, kitchen) self.assertTrue(rv.ok()) rv = DKCloudCommandRunner.create_order(self._api, kitchen, recipe1, recipe1_variation) self.assertTrue(rv.ok()) first_order = rv.get_payload() rv = DKCloudCommandRunner.create_order(self._api, kitchen, recipe1, recipe1_variation) self.assertTrue(rv.ok()) time.sleep(20) rs = DKCloudCommandRunner.list_order(self._api, kitchen) self.assertTrue(rs.ok()) message = rs.rc['message'] self.assertTrue( 'OrderRun is Planned' in message or 'OrderRun Completed' in message or 'OrderRun is Active' in message) # cleanup self._delete_and_clean_kitchen(kitchen)
def test_create_kitchen(self): parent = 'CLI-Top' kitchen = 'temp-create-kitchen-Runner' kitchen = self._add_my_guid(kitchen) rv = DKCloudCommandRunner.delete_kitchen(self._api, kitchen) self.assertIsNotNone(rv) rv = DKCloudCommandRunner.create_kitchen(self._api, parent, kitchen) self.assertTrue(rv.ok()) rc = DKCloudCommandRunner.list_kitchen(self._api) rv2 = rc.get_message() self.assertTrue(kitchen in rv2) # cleanup rv = DKCloudCommandRunner.delete_kitchen(self._api, kitchen) self.assertIsNotNone(rv)
def test_merge_kitchens_success(self): existing_kitchen_name = 'master' base_test_kitchen_name = 'base-test-kitchen' branched_test_kitchen_name = 'branched-from-base-test-kitchen' base_test_kitchen_name = self._add_my_guid(base_test_kitchen_name) branched_test_kitchen_name = self._add_my_guid(branched_test_kitchen_name) # setup self._delete_and_clean_kitchen(branched_test_kitchen_name) self._delete_and_clean_kitchen(base_test_kitchen_name) # test # create base kitchen rs = DKCloudCommandRunner.create_kitchen(self._api, existing_kitchen_name, base_test_kitchen_name) self.assertTrue(rs.ok()) # create branch kitchen from base kitchen rs = DKCloudCommandRunner.create_kitchen(self._api, base_test_kitchen_name, branched_test_kitchen_name) self.assertTrue(rs.ok()) # do merge rd = DKCloudCommandRunner.merge_kitchens_improved(self._api, branched_test_kitchen_name, base_test_kitchen_name) self._check_no_merge_conflicts(rd) # cleanup self._delete_and_clean_kitchen(branched_test_kitchen_name) self._delete_and_clean_kitchen(base_test_kitchen_name)
def test_create_kitchen(self): parent = 'CLI-Top' kitchen = 'temp-create-kitchen-Runner' kitchen = self._add_my_guid(kitchen) rv = DKCloudCommandRunner.delete_kitchen(self._api, kitchen) self.assertIsNotNone(rv) rv = DKCloudCommandRunner.create_kitchen(self._api, parent, kitchen) self.assertTrue(rv.ok()) rc = DKCloudCommandRunner.list_kitchen(self._api) rv2 = rc.get_message() self.assertTrue(kitchen in rv2) # cleanup rv = DKCloudCommandRunner.delete_kitchen(self._api, kitchen) self.assertIsNotNone(rv)
def test_merge_kitchens_success(self): existing_kitchen_name = 'master' base_test_kitchen_name = 'base-test-kitchen' branched_test_kitchen_name = 'branched-from-base-test-kitchen' base_test_kitchen_name = self._add_my_guid(base_test_kitchen_name) branched_test_kitchen_name = self._add_my_guid(branched_test_kitchen_name) # setup self._delete_and_clean_kitchen(branched_test_kitchen_name) self._delete_and_clean_kitchen(base_test_kitchen_name) # test # create base kitchen rs = DKCloudCommandRunner.create_kitchen(self._api, existing_kitchen_name, base_test_kitchen_name) self.assertTrue(rs.ok()) # create branch kitchen from base kitchen rs = DKCloudCommandRunner.create_kitchen(self._api, base_test_kitchen_name, branched_test_kitchen_name) self.assertTrue(rs.ok()) # do merge rd = DKCloudCommandRunner.merge_kitchens_improved(self._api, branched_test_kitchen_name, base_test_kitchen_name) self._check_no_merge_conflicts(rd) # cleanup self._delete_and_clean_kitchen(branched_test_kitchen_name) self._delete_and_clean_kitchen(base_test_kitchen_name)
def test_get_compiled_serving_from_recipe(self): # setup parent_kitchen = 'master' new_kitchen = 'test_get_compiled_serving_from_recipe=API' new_kitchen = self._add_my_guid(new_kitchen) recipe_name = 'parallel-recipe-test' variation_name = 'variation-test' self._delete_and_clean_kitchen(new_kitchen) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, new_kitchen) self.assertTrue(rs.ok()) # test resp = DKCloudCommandRunner.get_compiled_serving(self._api, parent_kitchen, recipe_name, variation_name) self.assertTrue(resp.ok()) # cleanup self._delete_and_clean_kitchen(new_kitchen)
def test_get_compiled_serving_from_recipe(self): # setup parent_kitchen = 'master' new_kitchen = 'test_get_compiled_serving_from_recipe=API' new_kitchen = self._add_my_guid(new_kitchen) recipe_name = 'parallel-recipe-test' variation_name = 'variation-test' self._delete_and_clean_kitchen(new_kitchen) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, new_kitchen) self.assertTrue(rs.ok()) # test resp = DKCloudCommandRunner.get_compiled_serving(self._api, parent_kitchen, recipe_name, variation_name) self.assertTrue(resp.ok()) # cleanup self._delete_and_clean_kitchen(new_kitchen)
def test_update_file(self): # setup parent_kitchen = 'CLI-Top' test_kitchen = 'CLI-test_update_file' test_kitchen = self._add_my_guid(test_kitchen) recipe_name = 'simple' recipe_file_key = recipe_name file_name = 'description.json' message = 'test update CLI-test_update_file' api_file_key = file_name update_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') # Cleanup old state self._delete_and_clean_kitchen(test_kitchen) # Get the original file. Helper function handles the directories. original_file = self._get_recipe_file(parent_kitchen, recipe_name, recipe_file_key, file_name) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, test_kitchen) self.assertTrue(rs.ok()) # Get the new kitchen to a temp folder temp_dir, test_kitchen_dir = self._make_kitchen_dir(test_kitchen, change_dir=True) new_kitchen_file = self._get_recipe_file(test_kitchen, recipe_name, recipe_file_key, file_name, test_kitchen_dir) self.assertEqual(original_file, new_kitchen_file) new_kitchen_file_dict = self._get_the_dict(new_kitchen_file) new_kitchen_file_abspath = os.path.join(test_kitchen_dir, os.path.join(recipe_file_key, file_name)) new_kitchen_file_dict[test_kitchen] = update_str new_kitchen_file2 = self._get_the_json_str(new_kitchen_file_dict) with open(new_kitchen_file_abspath, 'w') as rfile: rfile.seek(0) rfile.truncate() rfile.write(new_kitchen_file2) # test working_dir = os.path.join(test_kitchen_dir, recipe_name) os.chdir(working_dir) rc = DKCloudCommandRunner.update_file(self._api, test_kitchen, recipe_name, working_dir, message, api_file_key) self.assertTrue(rc.ok()) new_kitchen_file3 = self._get_recipe_file(test_kitchen, recipe_name, recipe_file_key, file_name) self.assertEqual(new_kitchen_file2, new_kitchen_file3) # cleanup self._delete_and_clean_kitchen(test_kitchen) shutil.rmtree(temp_dir, ignore_errors=True)
def test_update_file(self): # setup parent_kitchen = 'CLI-Top' test_kitchen = 'CLI-test_update_file' test_kitchen = self._add_my_guid(test_kitchen) recipe_name = 'simple' recipe_file_key = recipe_name file_name = 'description.json' message = 'test update CLI-test_update_file' api_file_key = file_name update_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') # Cleanup old state self._delete_and_clean_kitchen(test_kitchen) # Get the original file. Helper function handles the directories. original_file = self._get_recipe_file(parent_kitchen, recipe_name, recipe_file_key, file_name) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, test_kitchen) self.assertTrue(rs.ok()) # Get the new kitchen to a temp folder temp_dir, test_kitchen_dir = self._make_kitchen_dir(test_kitchen, change_dir=True) new_kitchen_file = self._get_recipe_file(test_kitchen, recipe_name, recipe_file_key, file_name, test_kitchen_dir) self.assertEqual(original_file, new_kitchen_file) new_kitchen_file_dict = self._get_the_dict(new_kitchen_file) new_kitchen_file_abspath = os.path.join(test_kitchen_dir, os.path.join(recipe_file_key, file_name)) new_kitchen_file_dict[test_kitchen] = update_str new_kitchen_file2 = self._get_the_json_str(new_kitchen_file_dict) with open(new_kitchen_file_abspath, 'w') as rfile: rfile.seek(0) rfile.truncate() rfile.write(new_kitchen_file2) # test working_dir = os.path.join(test_kitchen_dir, recipe_name) os.chdir(working_dir) rc = DKCloudCommandRunner.update_file(self._api, test_kitchen, recipe_name, message, api_file_key) self.assertTrue(rc.ok()) new_kitchen_file3 = self._get_recipe_file(test_kitchen, recipe_name, recipe_file_key, file_name) self.assertEqual(new_kitchen_file2, new_kitchen_file3) # cleanup self._delete_and_clean_kitchen(test_kitchen) shutil.rmtree(temp_dir, ignore_errors=True)
def test_kitchen_config(self): parent_kitchen = 'CLI-Top' child_kitchen = self._add_my_guid('modify_kitchen_settings_runner') setup = True if setup: self._delete_and_clean_kitchen(child_kitchen) rv = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, child_kitchen) self.assertTrue(rv.ok()) add = (('newvar1', 'newval1'),) unset = ('newvar1') get = ('newvar1') listall = True rs = DKCloudCommandRunner.config_kitchen(self._api, child_kitchen, add=add) self.assertTrue(rs.ok()) payload = rs.get_payload() self.assertIsNotNone(payload) message = rs.get_message() self.assertTrue('newvar1 added' in message) rs = DKCloudCommandRunner.config_kitchen(self._api, child_kitchen, get=get) self.assertTrue(rs.ok()) payload = rs.get_payload() self.assertIsNotNone(payload) message = rs.get_message() self.assertTrue(message == 'newval1\n') rs = DKCloudCommandRunner.config_kitchen(self._api, child_kitchen, unset=unset) self.assertTrue(rs.ok()) payload = rs.get_payload() self.assertIsNotNone(payload) message = rs.get_message() rs = DKCloudCommandRunner.config_kitchen(self._api, child_kitchen, listall=listall) self.assertTrue(rs.ok()) payload = rs.get_payload() self.assertIsNotNone(payload) message = rs.get_message() self.assertTrue('newvar1' not in message) cleanup = False if cleanup: self._delete_and_clean_kitchen(child_kitchen)
def test_kitchen_config(self): parent_kitchen = 'CLI-Top' child_kitchen = self._add_my_guid('modify_kitchen_settings_runner') setup = True if setup: self._delete_and_clean_kitchen(child_kitchen) rv = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, child_kitchen) self.assertTrue(rv.ok()) add = (('newvar1', 'newval1'),) unset = ('newvar1') get = ('newvar1') listall = True rs = DKCloudCommandRunner.config_kitchen(self._api, child_kitchen, add=add) self.assertTrue(rs.ok()) payload = rs.get_payload() self.assertIsNotNone(payload) message = rs.get_message() self.assertTrue('newvar1 added' in message) rs = DKCloudCommandRunner.config_kitchen(self._api, child_kitchen, get=get) self.assertTrue(rs.ok()) payload = rs.get_payload() self.assertIsNotNone(payload) message = rs.get_message() self.assertTrue(message == 'newval1\n') rs = DKCloudCommandRunner.config_kitchen(self._api, child_kitchen, unset=unset) self.assertTrue(rs.ok()) payload = rs.get_payload() self.assertIsNotNone(payload) message = rs.get_message() rs = DKCloudCommandRunner.config_kitchen(self._api, child_kitchen, listall=listall) self.assertTrue(rs.ok()) payload = rs.get_payload() self.assertIsNotNone(payload) message = rs.get_message() self.assertTrue('newvar1' not in message) cleanup = False if cleanup: self._delete_and_clean_kitchen(child_kitchen)
def test_active_serving_watcher(self): # setup parent = 'master' kitchen = 'test_active_serving_watcher' kitchen = self._add_my_guid(kitchen) recipe_name = 'test-everything-recipe' variation_name = self._get_run_variation() self._delete_and_clean_kitchen(kitchen) rv = DKCloudCommandRunner.create_kitchen(self._api, parent, kitchen) self.assertTrue(rv.ok()) # start watcher DKActiveServingWatcherSingleton().set_sleep_time(2) DKActiveServingWatcherSingleton().set_api(self._api) DKActiveServingWatcherSingleton().set_kitchen(kitchen) self.assertTrue(DKActiveServingWatcherSingleton().start_watcher()) # cook one rs = DKCloudCommandRunner.create_order(self._api, kitchen, recipe_name, variation_name) self.assertTrue(rs.ok()) wait_time = [.1, 1, 3, 3, 3, 3, 9, 18] found_active_serving = False wait_generator = (wt for wt in wait_time if found_active_serving is False) print 'test_active_serving_watcher: found_active_serving, trying ... ' for wt in wait_generator: time.sleep(wt) resp1 = DKCloudCommandRunner.orderrun_detail(self._api, kitchen, {'summary': True}) print 'test_active_serving_watcher: found_active_serving is False (%s)' % wt # print 'got', resp1.get_message() message = resp1.get_message() if resp1.ok(): message_split = message.split('\n') if message_split is not None and len(message_split) > 10 and \ 'ORDER RUN SUMMARY' in message_split[1] and \ 'Order ID' in message_split[3] and 'DKRecipe#dk#test-everything-recipe#variation-test#' in message_split[3] and \ 'Order Run ID' in message_split[4] and 'ct:' in message_split[4] and 'DKRecipe#dk#test-everything-recipe#variation-test#' in message_split[4] and \ 'Status' in message_split[5] and 'COMPLETED_SERVING' in message_split[5]: found_active_serving = True self.assertTrue(found_active_serving) # cleanup self._delete_and_clean_kitchen(kitchen)
def test_delete_one_order(self): # setup parent_kitchen = 'CLI-Top' new_kitchen = 'test_deleteall_order-RUN' new_kitchen = self._add_my_guid(new_kitchen) recipe = 'simple' variation = 'simple-variation-now' DKCloudCommandRunner.delete_kitchen(self._api, new_kitchen) # clean up junk rc = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, new_kitchen) self.assertTrue(rc.ok()) rv = DKCloudCommandRunner.create_order(self._api, new_kitchen, recipe, variation) self.assertIsNotNone(rv) order_id = rv.get_payload()['serving_chronos_id'] self.assertIsNotNone(variation in order_id) # test rc = DKCloudCommandRunner.delete_one_order(self._api, order_id) self.assertTrue(rc.ok()) # cleanup DKCloudCommandRunner.delete_kitchen(self._api, new_kitchen)
def test_delete_one_order(self): # setup parent_kitchen = 'CLI-Top' new_kitchen = 'test_deleteall_order-RUN' new_kitchen = self._add_my_guid(new_kitchen) recipe = 'simple' variation = 'simple-variation-now' DKCloudCommandRunner.delete_kitchen(self._api, new_kitchen) # clean up junk rc = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, new_kitchen) self.assertTrue(rc.ok()) rv = DKCloudCommandRunner.create_order(self._api, new_kitchen, recipe, variation) self.assertIsNotNone(rv) order_id = rv.get_payload() self.assertIsNotNone(variation in order_id) # test rc = DKCloudCommandRunner.delete_one_order(self._api, order_id) self.assertTrue(rc.ok()) # cleanup DKCloudCommandRunner.delete_kitchen(self._api, new_kitchen)
def test_stop_order(self): # setup parent_kitchen = 'CLI-Top' new_kitchen = 'test_stop_order-RUN' new_kitchen = self._add_my_guid(new_kitchen) recipe = 'simple' variation = 'simple-variation-now' DKCloudCommandRunner.delete_kitchen(self._api, new_kitchen) # clean up junk rc = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, new_kitchen) self.assertTrue(rc.ok()) rv = DKCloudCommandRunner.create_order(self._api, new_kitchen, recipe, variation) self.assertIsNotNone(rv) order_id = rv.get_payload() self.assertIsNotNone(variation in order_id) # test rc = DKCloudCommandRunner.stop_order(self._api, order_id) # todo: need to find a way for this to succeed self.assertTrue(rc.ok()) # cleanup DKCloudCommandRunner.delete_kitchen(self._api, new_kitchen)
def test_active_serving_watcher(self): # setup parent = 'master' kitchen = 'test_active_serving_watcher' kitchen = self._add_my_guid(kitchen) recipe_name = 'test-everything-recipe' variation_name = self._get_run_variation() self._delete_and_clean_kitchen(kitchen) rv = DKCloudCommandRunner.create_kitchen(self._api, parent, kitchen) self.assertTrue(rv.ok()) # start watcher DKActiveServingWatcherSingleton().set_sleep_time(2) DKActiveServingWatcherSingleton().set_api(self._api) DKActiveServingWatcherSingleton().set_kitchen(kitchen) self.assertTrue(DKActiveServingWatcherSingleton().start_watcher()) # cook one rs = DKCloudCommandRunner.create_order(self._api, kitchen, recipe_name, variation_name) self.assertTrue(rs.ok()) wait_time = [.1, 1, 3, 3, 3, 3, 9, 18] found_active_serving = False wait_generator = (wt for wt in wait_time if found_active_serving is False) print('test_active_serving_watcher: found_active_serving, trying ... ') for wt in wait_generator: time.sleep(wt) resp1 = DKCloudCommandRunner.orderrun_detail(self._api, kitchen, {'summary': True}) print('test_active_serving_watcher: found_active_serving is False (%s)' % wt) # print 'got', resp1.get_message() message = resp1.get_message() if resp1.ok() and ('OrderRun is Planned' in message or 'OrderRun Completed' in message or 'OrderRun is Active' in message): found_active_serving = True self.assertTrue(found_active_serving) # cleanup self._delete_and_clean_kitchen(kitchen)
def test_active_serving_watcher(self): # setup parent = 'master' kitchen = 'test_active_serving_watcher' kitchen = self._add_my_guid(kitchen) recipe_name = 'test-everything-recipe' variation_name = self._get_run_variation() self._delete_and_clean_kitchen(kitchen) rv = DKCloudCommandRunner.create_kitchen(self._api, parent, kitchen) self.assertTrue(rv.ok()) # start watcher DKActiveServingWatcherSingleton().set_sleep_time(2) DKActiveServingWatcherSingleton().set_api(self._api) DKActiveServingWatcherSingleton().set_kitchen(kitchen) self.assertTrue(DKActiveServingWatcherSingleton().start_watcher()) # cook one rs = DKCloudCommandRunner.create_order(self._api, kitchen, recipe_name, variation_name) self.assertTrue(rs.ok()) wait_time = [.1, 1, 3, 3, 3, 3, 9, 18] found_active_serving = False wait_generator = (wt for wt in wait_time if found_active_serving is False) print 'test_active_serving_watcher: found_active_serving, trying ... ' for wt in wait_generator: time.sleep(wt) resp1 = DKCloudCommandRunner.orderrun_detail(self._api, kitchen, {'summary': True}) print 'test_active_serving_watcher: found_active_serving is False (%s)' % wt # print 'got', resp1.get_message() message = resp1.get_message() if resp1.ok() and ('OrderRun is Planned' in message or 'OrderRun Completed' in message or 'OrderRun is Active' in message): found_active_serving = True self.assertTrue(found_active_serving) # cleanup self._delete_and_clean_kitchen(kitchen)
def test_merge_resolution(self): self.assertTrue(True) base_kitchen = 'CLI-Top' parent_kitchen = 'merge_resolve_parent' parent_kitchen = self._add_my_guid(parent_kitchen) child_kitchen = 'merge_resolve_child' child_kitchen = self._add_my_guid(child_kitchen) recipe = 'simple' conflicted_file = 'conflicted-file.txt' temp_dir_child, kitchen_dir_child, recipe_dir_child = self._make_recipe_dir(recipe, child_kitchen) temp_dir_parent, kitchen_dir_parent, recipe_dir_parent = self._make_recipe_dir(recipe, parent_kitchen) setup = True cleanup = True if setup: rc = DKCloudCommandRunner.delete_kitchen(self._api, child_kitchen) rc = DKCloudCommandRunner.delete_kitchen(self._api, parent_kitchen) rc = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen=base_kitchen, new_kitchen=parent_kitchen) self.assertTrue(rc.ok()) rc = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen=parent_kitchen, new_kitchen=child_kitchen) self.assertTrue(rc.ok()) os.chdir(recipe_dir_parent) # parent_file = os.path.join(recipe, conflicted_file) with open(conflicted_file, 'w') as f: f.write('line1\nparent\nline2\n') rc = DKCloudCommandRunner.add_file(self._api, parent_kitchen, recipe, 'adding %s to %s' % (conflicted_file, parent_kitchen), conflicted_file) self.assertTrue(rc.ok()) os.chdir(recipe_dir_child) # child_file = os.path.join(recipe, conflicted_file) with open(conflicted_file, 'w') as f: f.write('line1\nchild\nline2\n') rc = DKCloudCommandRunner.add_file(self._api, child_kitchen, recipe, 'adding %s to %s' % (conflicted_file, child_kitchen), conflicted_file) self.assertTrue(rc.ok()) # Make sure we are in the recipe folder before merging os.chdir(recipe_dir_child) rc = DKCloudCommandRunner.merge_kitchens_improved(self._api, child_kitchen, parent_kitchen) self.assertTrue('1 conflict found' in rc.get_message()) self.assertTrue('simple/conflicted-file.txt' in rc.get_message()) rc = DKCloudCommandRunner.merge_kitchens_improved(self._api, child_kitchen, parent_kitchen) self.assertTrue('Unresolved conflicts' in rc.get_message()) self.assertTrue('conflicted-file.txt' in rc.get_message()) rc = DKCloudCommandRunner.get_unresolved_conflicts(recipe, recipe_dir_child) self.assertTrue(rc.ok()) self.assertTrue('Unresolved conflicts' in rc.get_message()) rc = DKCloudCommandRunner.resolve_conflict(conflicted_file) self.assertTrue(rc.ok()) self.assertTrue('Conflict resolved' in rc.get_message()) rc = DKCloudCommandRunner.get_unresolved_conflicts(recipe, recipe_dir_child) self.assertTrue(rc.ok()) self.assertTrue('No conflicts found' in rc.get_message()) rc = DKCloudCommandRunner.merge_kitchens_improved(self._api, child_kitchen, parent_kitchen) self.assertTrue('Unresolved conflicts' not in rc.get_message()) if cleanup: DKCloudCommandRunner.delete_kitchen(self._api, child_kitchen) DKCloudCommandRunner.delete_kitchen(self._api, parent_kitchen) shutil.rmtree(temp_dir_child, ignore_errors=True) shutil.rmtree(temp_dir_parent, ignore_errors=True)
def test_order_list_for_repeating_order(self): parent_kitchen = 'master' recipe_name = 'parallel-recipe-test' variation_name = self._get_run_variation_for_recipe(recipe_name, repeater=True) new_kitchen = 'test_order_list_for_repeating_order' new_kitchen = self._add_my_guid(new_kitchen) self._delete_and_clean_kitchen(new_kitchen) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, new_kitchen) self.assertTrue(rs.ok()) rs = DKCloudCommandRunner.create_order(self._api, new_kitchen, recipe_name, variation_name) self.assertTrue(rs.ok()) new_order_id_1 = rs.get_payload()['serving_chronos_id'] found_completed_serving = False wait_time = [10,61,61,61,61,61,61,61] for wt in wait_time: rs = DKCloudCommandRunner.list_order(self._api, new_kitchen) output_string = rs.rc['message'] output_string_split = output_string.split('\n') index = 0 output_string_split_length = len(output_string_split) find_title = False pattern_title = 'ORDER SUMMARY (order ID: DKRecipe#dk#parallel-recipe-test#variation-test-repeat#test_order_list_for_repeating_order_ut_' while not find_title and index < output_string_split_length: if pattern_title in output_string_split[index]: find_title = True index += 1 find_order_run_1 = False pattern_order_run_1a = '1. ORDER RUN (OrderRun ID: ct:' pattern_order_run_1b = 'DKRecipe#dk#parallel-recipe-test#variation-test-repeat#test_order_list_for_repeating_order_ut_' while not find_order_run_1 and index < output_string_split_length: if pattern_order_run_1a in output_string_split[index] and \ pattern_order_run_1b in output_string_split[index] and \ index + 1 < output_string_split_length and \ 'OrderRun Completed' in output_string_split[index+1]: find_order_run_1 = True index += 1 find_order_run_2 = False pattern_order_run_2a = '2. ORDER RUN (OrderRun ID: ct:' pattern_order_run_2b = 'DKRecipe#dk#parallel-recipe-test#variation-test-repeat#test_order_list_for_repeating_order_ut_' while not find_order_run_2 and index < output_string_split_length: if pattern_order_run_2a in output_string_split[index] and \ pattern_order_run_2b in output_string_split[index] and \ index + 1 < output_string_split_length and \ 'OrderRun Completed' in output_string_split[index+1]: find_order_run_2 = True index += 1 if find_title and find_order_run_1 and find_order_run_2: found_completed_serving = True break time.sleep(wt) self.assertTrue(found_completed_serving) # cleanup self._delete_and_clean_kitchen(new_kitchen)
def test_merge_resolution(self): self.assertTrue(True) base_kitchen = 'CLI-Top' parent_kitchen = 'merge_resolve_parent' parent_kitchen = self._add_my_guid(parent_kitchen) child_kitchen = 'merge_resolve_child' child_kitchen = self._add_my_guid(child_kitchen) recipe = 'simple' conflicted_file = 'conflicted-file.txt' temp_dir_child, kitchen_dir_child, recipe_dir_child = self._make_recipe_dir(recipe, child_kitchen) temp_dir_parent, kitchen_dir_parent, recipe_dir_parent = self._make_recipe_dir(recipe, parent_kitchen) setup = True cleanup = True if setup: rc = DKCloudCommandRunner.delete_kitchen(self._api, child_kitchen) rc = DKCloudCommandRunner.delete_kitchen(self._api, parent_kitchen) rc = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen=base_kitchen, new_kitchen=parent_kitchen) self.assertTrue(rc.ok()) rc = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen=parent_kitchen, new_kitchen=child_kitchen) self.assertTrue(rc.ok()) os.chdir(recipe_dir_parent) # parent_file = os.path.join(recipe, conflicted_file) with open(conflicted_file, 'w') as f: f.write('line1\nparent\nline2\n') rc = DKCloudCommandRunner.add_file(self._api, parent_kitchen, recipe, 'adding %s to %s' % (conflicted_file, parent_kitchen), conflicted_file) self.assertTrue(rc.ok()) os.chdir(recipe_dir_child) # child_file = os.path.join(recipe, conflicted_file) with open(conflicted_file, 'w') as f: f.write('line1\nchild\nline2\n') rc = DKCloudCommandRunner.add_file(self._api, child_kitchen, recipe, 'adding %s to %s' % (conflicted_file, child_kitchen), conflicted_file) self.assertTrue(rc.ok()) # Make sure we are in the recipe folder before merging os.chdir(recipe_dir_child) rc = DKCloudCommandRunner.merge_kitchens_improved(self._api, child_kitchen, parent_kitchen) self.assertTrue('1 conflict found' in rc.get_message()) self.assertTrue('simple/conflicted-file.txt' in rc.get_message()) rc = DKCloudCommandRunner.merge_kitchens_improved(self._api, child_kitchen, parent_kitchen) self.assertTrue('Unresolved conflicts' in rc.get_message()) self.assertTrue('conflicted-file.txt' in rc.get_message()) rc = DKCloudCommandRunner.get_unresolved_conflicts(recipe, recipe_dir_child) self.assertTrue(rc.ok()) self.assertTrue('Unresolved conflicts' in rc.get_message()) rc = DKCloudCommandRunner.resolve_conflict(conflicted_file) self.assertTrue(rc.ok()) self.assertTrue('Conflict resolved' in rc.get_message()) rc = DKCloudCommandRunner.get_unresolved_conflicts(recipe, recipe_dir_child) self.assertTrue(rc.ok()) self.assertTrue('No conflicts found' in rc.get_message()) rc = DKCloudCommandRunner.merge_kitchens_improved(self._api, child_kitchen, parent_kitchen) self.assertTrue('Unresolved conflicts' not in rc.get_message()) if cleanup: DKCloudCommandRunner.delete_kitchen(self._api, child_kitchen) DKCloudCommandRunner.delete_kitchen(self._api, parent_kitchen) shutil.rmtree(temp_dir_child, ignore_errors=True) shutil.rmtree(temp_dir_parent, ignore_errors=True)
def test_update_all(self): parent_kitchen = 'CLI-Top' test_kitchen = self._add_my_guid('update_all') recipe_name = 'simple2' new = 'new.txt' deleted = 'deleted.txt' modified = 'modified.txt' subdir = 'subdir' subsubdir = os.path.join(subdir, 'subsubdir') subusubsubdir = os.path.join(subsubdir, 'subusubsubdir') self._delete_and_clean_kitchen(test_kitchen) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, test_kitchen) self.assertTrue(rs.ok()) # make and cd to kitchen dir and get the recipe to disk temp_dir, kitchen_dir, recipe_dir = self._make_recipe_dir(recipe_name, test_kitchen) os.chdir(kitchen_dir) print 'Working in directory %s' % recipe_dir start_time = time.time() rs = DKCloudCommandRunner.get_recipe(self._api, test_kitchen, recipe_name) elapsed_recipe_status = time.time() - start_time print 'get_recipe - elapsed: %d' % elapsed_recipe_status self.assertTrue(rs.ok()) os.chdir(recipe_dir) start_time = time.time() rc = DKCloudCommandRunner.recipe_status(self._api, test_kitchen, recipe_name) elapsed_recipe_status = time.time() - start_time print 'recipe_status - elapsed: %d' % elapsed_recipe_status msg = rc.get_message() self.assertTrue('files differ' not in msg) self.assertTrue('only on local' not in msg) self.assertTrue('only on remote' not in msg) # New, not added, file with open(new, 'w') as f: f.write('This is file %s\n' % new) with open(os.path.join('placeholder-node3', new), 'w') as f: f.write('This is file %s in placeholder-node3\n' % new) # Deleted File with open(deleted, 'w') as f: f.write('This is file %s\n' % deleted) rc = DKCloudCommandRunner.add_file(self._api, test_kitchen, recipe_name, 'Adding %s' % deleted, deleted) self.assertTrue(rc.ok()) os.remove(deleted) # Modified File with open(modified, 'w') as f: f.write('This is file %s\n' % modified) rc = DKCloudCommandRunner.add_file(self._api, test_kitchen, recipe_name, 'Adding %s' % modified, modified) self.assertTrue(rc.ok()) with open(modified, 'a') as f: f.write('This is a new line %s\n' % modified) # New file in a subdirectory os.mkdir(subdir) os.mkdir(subsubdir) os.mkdir(subusubsubdir) with open(os.path.join(subsubdir, new), 'w') as f: f.write('This is file %s in subdirectory %s\n' % (new, subsubdir)) with open(os.path.join(subsubdir, 'also_%s' % new), 'w') as f: f.write('This is file %s in subdirectory %s\n' % ('also_%s' % new, subsubdir)) with open(os.path.join(subusubsubdir, 'again_%s' % new), 'w') as f: f.write('This is file %s in subdirectory %s\n' % ('also_%s' % new, subusubsubdir)) # Delete a whole directory, and some files under there. shutil.rmtree('placeholder-node3', ignore_errors=True) # Make sure repo is in state we expect. start_time = time.time() rc = DKCloudCommandRunner.recipe_status(self._api, test_kitchen, recipe_name) elapsed_recipe_status = time.time() - start_time print 'recipe_status - elapsed: %d' % elapsed_recipe_status msg = rc.get_message() match = re.search(r"([0-9]*) files are unchanged", msg) self.assertTrue(int(match.group(1)) >= 10) self.assertTrue('files are unchanged' in msg) match = re.search(r"([0-9]*) files are modified", msg) self.assertTrue(int(match.group(1)) >= 1) self.assertTrue('files are modified' in msg) match = re.search(r"([0-9]*) files are local only", msg) self.assertTrue(int(match.group(1)) >= 1) self.assertTrue('files are local only' in msg) match = re.search(r"([0-9]*) files are remote only", msg) self.assertTrue(int(match.group(1)) >= 1) self.assertTrue('files are remote only' in msg) self.assertTrue('subdir/subsubdir/subusubsubdir' in msg) rc = DKCloudCommandRunner.update_all_files(self._api, test_kitchen, recipe_name, recipe_dir, 'update all', delete_remote=True) self.assertTrue(rc.ok()) msg = rc.get_message() self.assertTrue('Update results:' in msg) new_files_index = msg.find('New files:') updated_files_index = msg.find('Updated files:') deleted_files_index = msg.find('Deleted files:') issues_index = msg.find('Issues:') new_files_section = msg[new_files_index:updated_files_index] updated_files_section = msg[updated_files_index:deleted_files_index] deleted_files_section = msg[deleted_files_index:issues_index] issues_section = msg[issues_index:] self.assertTrue('new.txt' in new_files_section) self.assertTrue('subdir/subsubdir/also_new.txt' in new_files_section) self.assertTrue('subdir/subsubdir/new.txt' in new_files_section) self.assertTrue('subdir/subsubdir/subusubsubdir/again_new.txt' in new_files_section) self.assertTrue('modified.txt' in updated_files_section) self.assertTrue('deleted.txt' in deleted_files_section) self.assertTrue('placeholder-node3/description.json' in deleted_files_section) self.assertTrue('No issues found' in issues_section) self._delete_and_clean_kitchen(test_kitchen) shutil.rmtree(temp_dir, ignore_errors=True)
def test_update_all(self): parent_kitchen = 'CLI-Top' test_kitchen = self._add_my_guid('update_all') recipe_name = 'simple' new = 'new.txt' deleted = 'deleted.txt' modified = 'modified.txt' subdir = 'subdir' subsubdir = os.path.join(subdir, 'subsubdir') subusubsubdir = os.path.join(subsubdir, 'subusubsubdir') self._delete_and_clean_kitchen(test_kitchen) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, test_kitchen) self.assertTrue(rs.ok()) # make and cd to kitchen dir and get the recipe to disk temp_dir, kitchen_dir, recipe_dir = self._make_recipe_dir(recipe_name, test_kitchen) os.chdir(kitchen_dir) print('Working in directory %s' % recipe_dir) start_time = time.time() rs = DKCloudCommandRunner.get_recipe(self._api, test_kitchen, recipe_name) elapsed_recipe_status = time.time() - start_time print('get_recipe - elapsed: %d' % elapsed_recipe_status) self.assertTrue(rs.ok()) os.chdir(recipe_dir) start_time = time.time() rc = DKCloudCommandRunner.recipe_status(self._api, test_kitchen, recipe_name) elapsed_recipe_status = time.time() - start_time print('recipe_status - elapsed: %d' % elapsed_recipe_status) msg = rc.get_message() self.assertTrue('files differ' not in msg) self.assertTrue('only on local' not in msg) self.assertTrue('only on remote' not in msg) # New, not added, file with open(new, 'w') as f: f.write('This is file %s\n' % new) with open(os.path.join('node1', new), 'w') as f: f.write('This is file %s in node 1\n' % new) # Deleted File with open(deleted, 'w') as f: f.write('This is file %s\n' % deleted) rc = DKCloudCommandRunner.add_file(self._api, test_kitchen, recipe_name, 'Adding %s' % deleted, deleted) self.assertTrue(rc.ok()) os.remove(deleted) # Modified File with open(modified, 'w') as f: f.write('This is file %s\n' % modified) rc = DKCloudCommandRunner.add_file(self._api, test_kitchen, recipe_name, 'Adding %s' % modified, modified) self.assertTrue(rc.ok()) with open(modified, 'a') as f: f.write('This is a new line %s\n' % modified) # New file in a subdirectory os.mkdir(subdir) os.mkdir(subsubdir) os.mkdir(subusubsubdir) with open(os.path.join(subsubdir, new), 'w') as f: f.write('This is file %s in subdirectory %s\n' % (new, subsubdir)) with open(os.path.join(subsubdir, 'also_%s' % new), 'w') as f: f.write('This is file %s in subdirectory %s\n' % ('also_%s' % new, subsubdir)) with open(os.path.join(subusubsubdir, 'again_%s' % new), 'w') as f: f.write('This is file %s in subdirectory %s\n' % ('also_%s' % new, subusubsubdir)) # Delete a whole directory, and some files under there. shutil.rmtree('node1', ignore_errors=True) # Make sure repo is in state we expect. start_time = time.time() rc = DKCloudCommandRunner.recipe_status(self._api, test_kitchen, recipe_name) elapsed_recipe_status = time.time() - start_time print('recipe_status - elapsed: %d' % elapsed_recipe_status) msg = rc.get_message() match = re.search(r"([0-9]*) files are unchanged", msg) self.assertTrue(int(match.group(1)) >= 10) self.assertTrue('files are unchanged' in msg) match = re.search(r"([0-9]*) files are modified", msg) self.assertTrue(int(match.group(1)) >= 1) self.assertTrue('files are modified' in msg) match = re.search(r"([0-9]*) files are local only", msg) self.assertTrue(int(match.group(1)) >= 1) self.assertTrue('files are local only' in msg) match = re.search(r"([0-9]*) files are remote only", msg) self.assertTrue(int(match.group(1)) >= 1) self.assertTrue('files are remote only' in msg) self.assertTrue('subdir/subsubdir/subusubsubdir' in msg) start_time = time.time() rc = DKCloudCommandRunner.update_all_files(self._api, test_kitchen, recipe_name, recipe_dir, 'update all dryrun', dryrun=True) elapsed_recipe_status = time.time() - start_time print('update_all_files - elapsed: %d' % elapsed_recipe_status) self.assertTrue(rc.ok()) msg = rc.get_message() self.assertTrue('modified.txt' in msg) self.assertTrue('new.txt' in msg) self.assertTrue('deleted.txt' in msg) self.assertTrue('subdir/subsubdir/new.txt' in msg) self.assertTrue('subdir/subsubdir/subusubsubdir/again_new.txt' in msg) start_time = time.time() rc = DKCloudCommandRunner.update_all_files(self._api, test_kitchen, recipe_name, recipe_dir, 'update all') elapsed_recipe_status = time.time() - start_time print('update_all_files - elapsed: %d' % elapsed_recipe_status) self.assertTrue(rc.ok()) msg = rc.get_message() self.assertTrue('modified.txt' in msg) match = re.search(r"([0-9]*) files updated", msg) self.assertTrue(int(match.group(1)) >= 1) self.assertTrue('subdir/subsubdir/new.txt' in msg) match = re.search(r"([0-9]*) files added", msg) self.assertTrue(int(match.group(1)) >= 4) self.assertTrue('node1/data_sources/DKDataSource_NoOp.json' in msg) match = re.search(r"([0-9]*) files deleted", msg) self.assertTrue(int(match.group(1)) >= 7) self._delete_and_clean_kitchen(test_kitchen) shutil.rmtree(temp_dir, ignore_errors=True)
def test_update_all(self): parent_kitchen = 'CLI-Top' test_kitchen = self._add_my_guid('update_all') recipe_name = 'simple' new = 'new.txt' deleted = 'deleted.txt' modified = 'modified.txt' subdir = 'subdir' subsubdir = os.path.join(subdir, 'subsubdir') subusubsubdir = os.path.join(subsubdir, 'subusubsubdir') self._delete_and_clean_kitchen(test_kitchen) rs = DKCloudCommandRunner.create_kitchen(self._api, parent_kitchen, test_kitchen) self.assertTrue(rs.ok()) # make and cd to kitchen dir and get the recipe to disk temp_dir, kitchen_dir, recipe_dir = self._make_recipe_dir(recipe_name, test_kitchen) os.chdir(kitchen_dir) print 'Working in directory %s' % recipe_dir start_time = time.time() rs = DKCloudCommandRunner.get_recipe(self._api, test_kitchen, recipe_name) elapsed_recipe_status = time.time() - start_time print 'get_recipe - elapsed: %d' % elapsed_recipe_status self.assertTrue(rs.ok()) os.chdir(recipe_dir) start_time = time.time() rc = DKCloudCommandRunner.recipe_status(self._api, test_kitchen, recipe_name) elapsed_recipe_status = time.time() - start_time print 'recipe_status - elapsed: %d' % elapsed_recipe_status msg = rc.get_message() self.assertTrue('files differ' not in msg) self.assertTrue('only on local' not in msg) self.assertTrue('only on remote' not in msg) # New, not added, file with open(new, 'w') as f: f.write('This is file %s\n' % new) with open(os.path.join('node1', new), 'w') as f: f.write('This is file %s in node 1\n' % new) # Deleted File with open(deleted, 'w') as f: f.write('This is file %s\n' % deleted) rc = DKCloudCommandRunner.add_file(self._api, test_kitchen, recipe_name, 'Adding %s' % deleted, deleted) self.assertTrue(rc.ok()) os.remove(deleted) # Modified File with open(modified, 'w') as f: f.write('This is file %s\n' % modified) rc = DKCloudCommandRunner.add_file(self._api, test_kitchen, recipe_name, 'Adding %s' % modified, modified) self.assertTrue(rc.ok()) with open(modified, 'a') as f: f.write('This is a new line %s\n' % modified) # New file in a subdirectory os.mkdir(subdir) os.mkdir(subsubdir) os.mkdir(subusubsubdir) with open(os.path.join(subsubdir, new), 'w') as f: f.write('This is file %s in subdirectory %s\n' % (new, subsubdir)) with open(os.path.join(subsubdir, 'also_%s' % new), 'w') as f: f.write('This is file %s in subdirectory %s\n' % ('also_%s' % new, subsubdir)) with open(os.path.join(subusubsubdir, 'again_%s' % new), 'w') as f: f.write('This is file %s in subdirectory %s\n' % ('also_%s' % new, subusubsubdir)) # Delete a whole directory, and some files under there. shutil.rmtree('node1', ignore_errors=True) # Make sure repo is in state we expect. start_time = time.time() rc = DKCloudCommandRunner.recipe_status(self._api, test_kitchen, recipe_name) elapsed_recipe_status = time.time() - start_time print 'recipe_status - elapsed: %d' % elapsed_recipe_status msg = rc.get_message() match = re.search(r"([0-9]*) files are unchanged", msg) self.assertTrue(int(match.group(1)) >= 10) self.assertTrue('files are unchanged' in msg) match = re.search(r"([0-9]*) files are modified", msg) self.assertTrue(int(match.group(1)) >= 1) self.assertTrue('files are modified' in msg) match = re.search(r"([0-9]*) files are local only", msg) self.assertTrue(int(match.group(1)) >= 1) self.assertTrue('files are local only' in msg) match = re.search(r"([0-9]*) files are remote only", msg) self.assertTrue(int(match.group(1)) >= 1) self.assertTrue('files are remote only' in msg) self.assertTrue('subdir/subsubdir/subusubsubdir' in msg) start_time = time.time() rc = DKCloudCommandRunner.update_all_files(self._api, test_kitchen, recipe_name, recipe_dir, 'update all dryrun', dryrun=True) elapsed_recipe_status = time.time() - start_time print 'update_all_files - elapsed: %d' % elapsed_recipe_status self.assertTrue(rc.ok()) msg = rc.get_message() self.assertTrue('modified.txt' in msg) self.assertTrue('new.txt' in msg) self.assertTrue('deleted.txt' in msg) self.assertTrue('subdir/subsubdir/new.txt' in msg) self.assertTrue('subdir/subsubdir/subusubsubdir/again_new.txt' in msg) start_time = time.time() rc = DKCloudCommandRunner.update_all_files(self._api, test_kitchen, recipe_name, recipe_dir, 'update all') elapsed_recipe_status = time.time() - start_time print 'update_all_files - elapsed: %d' % elapsed_recipe_status self.assertTrue(rc.ok()) msg = rc.get_message() self.assertTrue('modified.txt' in msg) match = re.search(r"([0-9]*) files updated", msg) self.assertTrue(int(match.group(1)) >= 1) self.assertTrue('subdir/subsubdir/new.txt' in msg) match = re.search(r"([0-9]*) files added", msg) self.assertTrue(int(match.group(1)) >= 4) self.assertTrue('node1/data_sources/DKDataSource_NoOp.json' in msg) match = re.search(r"([0-9]*) files deleted", msg) self.assertTrue(int(match.group(1)) >= 7) self._delete_and_clean_kitchen(test_kitchen) shutil.rmtree(temp_dir, ignore_errors=True)