コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
    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)
コード例 #7
0
    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)
コード例 #8
0
    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)
コード例 #9
0
    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)
コード例 #10
0
    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)
コード例 #11
0
    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)
コード例 #12
0
    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)
コード例 #13
0
    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)
コード例 #14
0
    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)
コード例 #15
0
    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)
コード例 #16
0
    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)
コード例 #17
0
    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)
コード例 #18
0
    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)
コード例 #19
0
    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)
コード例 #20
0
    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)
コード例 #21
0
 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)
コード例 #22
0
 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)
コード例 #23
0
 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)
コード例 #24
0
    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)
コード例 #25
0
    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)
コード例 #26
0
    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)
コード例 #27
0
    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)
コード例 #28
0
    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)
コード例 #29
0
    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)
コード例 #30
0
    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)
コード例 #31
0
    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)