예제 #1
0
    def test_logging_values(self):
        param1 = create_script_param_config('p1')
        param2 = create_script_param_config('p2', param='-x')
        param3 = create_script_param_config('p3', param='-y', no_value=True)
        param4 = create_script_param_config('p4', param='-z', type='int')
        config_model = create_config_model(
            'my_script', script_command='echo', parameters=[param1, param2, param3, param4])

        execution_id = self.executor_service.start_script(
            config_model,
            {'p1': 'abc', 'p3': True, 'p4': 987},
            'userX',
            create_audit_names(ip='localhost', auth_username='******'))

        executor = self.executor_service.get_active_executor(execution_id)
        executor.process_wrapper._write_script_output('some text\n')
        executor.process_wrapper._write_script_output('another text')
        executor.process_wrapper.finish(0)

        wait_observable_close_notification(executor.get_anonymized_output_stream(), 2)

        entry = self.logging_service.find_history_entry(execution_id)
        self.assertIsNotNone(entry)
        self.assertEqual('userX', entry.user_id)
        self.assertEqual('sandy', entry.user_name)
        self.assertEqual('my_script', entry.script_name)
        self.assertEqual('echo abc -y -z 987', entry.command)
        self.assertEqual('my_script', entry.script_name)

        log = self.logging_service.find_log(execution_id)
        self.assertEqual('some text\nanother text', log)
예제 #2
0
    def test_parameter_multiselect_when_empty_list(self):
        parameter = create_script_param_config('p1', param='-p1', type=PARAM_TYPE_MULTISELECT)
        config = create_config_model('config_x', parameters=[parameter])

        args_list = self.build_command_args({'p1': []}, config)

        self.assertEqual([], args_list)
예제 #3
0
    def test_one_parameter_flag_true(self):
        parameter = create_script_param_config('p1', param='--flag', no_value=True)
        config = create_config_model('config_x', parameters=[parameter])

        args_string = self.build_command_args({'p1': True}, config)

        self.assertEqual(['--flag'], args_string)
예제 #4
0
    def test_parameter_int(self):
        parameter = create_script_param_config('p1', param='-p1', type='int')
        config = create_config_model('config_x', parameters=[parameter])

        args_string = self.build_command_args({'p1': 5}, config)

        self.assertEqual(['-p1', 5], args_string)
예제 #5
0
    def test_one_parameter_with_param(self):
        parameter = create_script_param_config('p1', param='-p1')
        config = create_config_model('config_x', parameters=[parameter])

        args_string = self.build_command_args({'p1': 'value'}, config)

        self.assertEqual(['-p1', 'value'], args_string)
예제 #6
0
    def test_parameter_multiselect_when_multiple_list_as_multiarg(self):
        parameter = create_script_param_config('p1', type=PARAM_TYPE_MULTISELECT, multiple_arguments=True)
        config = create_config_model('config_x', parameters=[parameter])

        args_list = self.build_command_args({'p1': ['val1', 'val2', 'hello world']}, config)

        self.assertEqual(['val1', 'val2', 'hello world'], args_list)
예제 #7
0
    def test_parameter_constant(self):
        parameter = create_script_param_config('p1', constant=True, default='const')
        config = create_config_model('config_x', parameters=[parameter])

        args_string = self.build_command_args({'p1': 'value'}, config)

        self.assertEqual(['const'], args_string)
예제 #8
0
    def setUp(self):
        self.config = create_config_model('config_x')
        self.config.script_command = 'ls'
        executor._process_creator = _MockProcessWrapper

        test_utils.setup()

        super().setUp()
예제 #9
0
    def test_parameter_constant(self):
        parameter = create_script_param_config('p1',
                                               constant=True,
                                               default='const')
        config = create_config_model('config_x', parameters=[parameter])

        args_string = executor.build_command_args({'p1': 'value'}, config)

        self.assertEqual(args_string, ['const'])
예제 #10
0
    def test_one_parameter_flag_true(self):
        parameter = create_script_param_config('p1',
                                               param='--flag',
                                               no_value=True)
        config = create_config_model('config_x', parameters=[parameter])

        args_string = executor.build_command_args({'p1': True}, config)

        self.assertEqual(args_string, ['--flag'])
예제 #11
0
    def test_parameter_multiselect_when_single_list_as_multiarg(self):
        parameter = create_script_param_config('p1',
                                               param='-p1',
                                               type='multiselect')
        config = create_config_model('config_x', parameters=[parameter])

        args_list = executor.build_command_args({'p1': ['val1']}, config)

        self.assertEqual(args_list, ['-p1', 'val1'])
예제 #12
0
    def test_parameter_multiselect_when_empty_string(self):
        parameter = create_script_param_config('p1',
                                               param='-p1',
                                               type='multiselect')
        config = create_config_model('config_x', parameters=[parameter])

        args_list = executor.build_command_args({'p1': ''}, config)

        self.assertEqual(args_list, [])
    def test_start_with_one_value(self):
        config = create_config_model(
            'config_x', parameters=[create_script_param_config('id')])
        self.create_executor(config, {'id': 918273})
        self.executor.start()

        process_wrapper = self.executor.process_wrapper
        self.assertEqual(['ls', 918273], process_wrapper.command)
        self.assertEqual({'PARAM_ID': '918273'}, process_wrapper.env_variables)
    def test_one_parameter_flag_false(self):
        parameter = create_script_param_config('p1',
                                               param='--flag',
                                               no_value=True)
        config = create_config_model('config_x', parameters=[parameter])

        args_string = self.build_command_args({'p1': False}, config)

        self.assertEqual([], args_string)
    def test_no_parameters_some_values(self):
        config = create_config_model('config_x')

        args_string = self.build_command_args({
            'p1': 'value',
            'p2': 'value'
        }, config)

        self.assertEqual([], args_string)
예제 #16
0
    def test_parameter_multiselect_when_empty_list(self):
        parameter = create_script_param_config('p1',
                                               param='-p1',
                                               type='multiselect')
        config = create_config_model('config_x', parameters=[parameter])

        args_list = self.build_command_args({'p1': []}, config)

        self.assertEqual([], args_list)
예제 #17
0
    def mock_schedule_model_with_secure_param(self):
        model = test_utils.create_config_model('some-name',
                                               parameters=[{
                                                   'name': 'p1',
                                                   'secure': True
                                               }])
        model.schedulable = True

        self.config_service.load_config_model.side_effect = lambda a, b, c: model
예제 #18
0
    def test_parameter_multiselect_when_multiple_list(self):
        parameter = create_script_param_config('p1',
                                               type=PARAM_TYPE_MULTISELECT)
        config = create_config_model('config_x', parameters=[parameter])

        args_list = self.build_command_args(
            {'p1': ['val1', 'val2', 'hello world']}, config)

        self.assertEqual(['val1,val2,hello world'], args_list)
예제 #19
0
    def test_parameter_multiselect_when_single_list_as_multiarg(self):
        parameter = create_script_param_config('p1',
                                               param='-p1',
                                               type=PARAM_TYPE_MULTISELECT)
        config = create_config_model('config_x', parameters=[parameter])

        args_list = self.build_command_args({'p1': ['val1']}, config)

        self.assertEqual(['-p1', 'val1'], args_list)
예제 #20
0
    def test_parameter_multiselect_when_empty_string(self):
        parameter = create_script_param_config('p1',
                                               param='-p1',
                                               type=PARAM_TYPE_MULTISELECT)
        config = create_config_model('config_x', parameters=[parameter])

        args_list = self.build_command_args({'p1': ''}, config)

        self.assertEqual([], args_list)
예제 #21
0
    def test_parameter_multiselect_when_multiple_list_as_multiarg(self):
        parameter = create_script_param_config('p1',
                                               type='multiselect',
                                               multiple_arguments=True)
        config = create_config_model('config_x', parameters=[parameter])

        args_list = executor.build_command_args(
            {'p1': ['val1', 'val2', 'hello world']}, config)

        self.assertEqual(args_list, ['val1', 'val2', 'hello world'])
예제 #22
0
    def test_parameter_int_without_space(self):
        parameter = create_script_param_config('p1',
                                               param='-p1=',
                                               type='int',
                                               same_arg_param=True)
        config = create_config_model('config_x', parameters=[parameter])

        args_string = self.build_command_args({'p1': 10}, config)

        self.assertEqual(['-p1=10'], args_string)
예제 #23
0
    def test_parameter_secure_some_value(self):
        parameter = create_script_param_config('p1', param='-p1', secure=True)
        config = create_config_model('config_x',
                                     config={'script_path': 'ls'},
                                     parameters=[parameter])

        executor = ScriptExecutor(config, {'p1': 'value'})
        secure_command = executor.get_secure_command()

        self.assertEqual('ls -p1 ******', secure_command)
예제 #24
0
    def test_start_logging_on_execution_start(self):
        execution_id = self.executor_service.start_script(
            create_config_model('my_script'), {}, 'userX',
            create_audit_names(ip='localhost'))

        executor = self.executor_service.get_active_executor(execution_id)
        executor.process_wrapper.finish(0)

        entry = self.logging_service.find_history_entry(execution_id)
        self.assertIsNotNone(entry)
    def test_single_dynamic_image(self):
        path = test_utils.create_file('test.png')
        config = create_config_model('my_script', output_files=[inline_image('##any_path.png#')])

        execution_id = self.start_execution(config)

        full_path = file_utils.normalize_path(path)
        self.write_output(execution_id, '123\n' + full_path + '\n456')
        self.wait_output_chunks(execution_id, chunks_count=1)

        self.assert_images(full_path)
예제 #26
0
    def test_parameter_multiselect_when_multiple_list_and_custom_separator(
            self):
        parameter = create_script_param_config('p1',
                                               type='multiselect',
                                               multiselect_separator='; ')
        config = create_config_model('config_x', parameters=[parameter])

        args_list = self.build_command_args(
            {'p1': ['val1', 'val2', 'hello world']}, config)

        self.assertEqual(['val1; val2; hello world'], args_list)
    def test_single_static_image(self):
        path = test_utils.create_file('test.png')
        config = create_config_model('my_script', output_files=[inline_image(path)])

        execution_id = self.start_execution(config)

        self.write_output(execution_id, '123\n456')

        self.wait_output_chunks(execution_id, chunks_count=1)

        self.assert_images(path)
예제 #28
0
    def test_parameter_secure_value_and_same_unsecure(self):
        p1 = create_script_param_config('p1', param='-p1', secure=True)
        p2 = create_script_param_config('p2', param='-p2')
        config = create_config_model('config_x',
                                     config={'script_path': 'ls'},
                                     parameters=[p1, p2])

        executor = ScriptExecutor(config, {'p1': 'value', 'p2': 'value'})
        secure_command = executor.get_secure_command()

        self.assertEqual('ls -p1 ****** -p2 value', secure_command)
예제 #29
0
    def test_start_logging_on_execution_start(self):
        execution_id = self.executor_service.start_script(
            create_config_model('my_script'),
            {},
            'userX',
            create_audit_names(ip='localhost'))

        executor = self.executor_service.get_active_executor(execution_id)
        executor.process_wrapper.finish(0)

        entry = self.logging_service.find_history_entry(execution_id)
        self.assertIsNotNone(entry)
예제 #30
0
    def test_parameter_noparam_multiselect_when_multiple_list_as_multiarg_without_space(
            self):
        parameter = create_script_param_config('p1',
                                               type=PARAM_TYPE_MULTISELECT,
                                               multiple_arguments=True,
                                               repeat_param=False)
        config = create_config_model('config_x', parameters=[parameter])

        args_list = self.build_command_args(
            {'p1': ['val1', 'val2', 'hello world']}, config)

        self.assertEqual(['val1', 'val2', 'hello world'], args_list)
    def test_single_dynamic_image_when_unnormalized(self):
        test_utils.create_file('sub/test.png')
        config = create_config_model('my_script', output_files=[inline_image('#([\.\w]+/)+\w+.png#')])

        execution_id = self.start_execution(config)

        unnormalized_path = os.path.join(test_utils.temp_folder, '.', 'sub', '..', 'sub', 'test.png')
        self.write_output(execution_id, '_ ' + unnormalized_path + ' _\n')
        self.wait_output_chunks(execution_id, chunks_count=1)

        image_keys = [img[0] for img in self.images]
        self.assertEqual([unnormalized_path], image_keys)
예제 #32
0
    def test_parameter_secure_multiselect(self):
        parameter = create_script_param_config('p1',
                                               param='-p1',
                                               secure=True,
                                               type=PARAM_TYPE_MULTISELECT)
        config = create_config_model('config_x',
                                     config={'script_path': 'ls'},
                                     parameters=[parameter])

        executor = ScriptExecutor(config, {'p1': ['one', 'two', 'three']})
        secure_command = executor.get_secure_command()

        self.assertEqual('ls -p1 ******', secure_command)
예제 #33
0
    def test_parameter_secure_multiselect_as_multiarg(self):
        parameter = create_script_param_config('p1',
                                               param='-p1',
                                               secure=True,
                                               type='multiselect',
                                               multiple_arguments=True)
        config = create_config_model('config_x',
                                     config={'script_path': 'ls'},
                                     parameters=[parameter])

        executor = ScriptExecutor(config, {'p1': ['one', 'two', 'three']})
        secure_command = executor.get_secure_command()

        self.assertEqual('ls -p1 ****** ****** ******', secure_command)
예제 #34
0
    def test_parameter_multiselect_when_multiple_list_as_multiarg_repeat_param(
            self):
        parameter = create_script_param_config(
            'p1',
            param='-p1',
            type=PARAM_TYPE_MULTISELECT,
            multiselect_argument_type='repeat_param_value')
        config = create_config_model('config_x', parameters=[parameter])

        args_list = self.build_command_args(
            {'p1': ['val1', 'val2', 'hello world']}, config)

        self.assertEqual(['-p1', 'val1', '-p1', 'val2', '-p1', 'hello world'],
                         args_list)
예제 #35
0
    def test_parameter_multiselect_when_multiple_list_and_argument_per_value_without_space(
            self):
        parameter = create_script_param_config(
            'p1',
            param='--p1=',
            type=PARAM_TYPE_MULTISELECT,
            multiselect_argument_type='argument_per_value',
            same_arg_param=True)
        config = create_config_model('config_x', parameters=[parameter])

        args_list = self.build_command_args(
            {'p1': ['val1', 'val2', 'hello world']}, config)

        self.assertEqual(['--p1=val1', 'val2', 'hello world'], args_list)
    def test_multiple_static_images(self):
        path1 = test_utils.create_file('test1.png')
        path2 = test_utils.create_file('test2.png')
        path3 = test_utils.create_file('test3.png')
        config = create_config_model('my_script',
                                     output_files=[inline_image(path1), inline_image(path2), inline_image(path3)])

        execution_id = self.start_execution(config)

        self.write_output(execution_id, '123\n' + '456')

        self.wait_output_chunks(execution_id, chunks_count=1)

        self.assert_images(path1, path2, path3)
예제 #37
0
    def test_get_user_parameter_values(self):
        parameter_values = {'x': 1, 'y': '2', 'z': 'True'}

        execution_service = self.create_execution_service()
        parameters = test_utils.create_simple_parameter_configs(list(parameter_values.keys()) + ['const'])
        parameters['const']['constant'] = True
        parameters['const']['default'] = 'abc'
        parameters['z']['no_value'] = True

        config_model = test_utils.create_config_model(
            'test_get_user_parameter_values',
            username=DEFAULT_USER,
            parameters=parameters.values())
        execution_id = self._start_with_config(execution_service, config_model, parameter_values)

        self.assertEqual(parameter_values, execution_service.get_user_parameter_values(execution_id))
예제 #38
0
    def test_multiple_parameters_sequence(self):
        p1 = create_script_param_config('p1', param='-p1')
        p2 = create_script_param_config('p2')
        p3 = create_script_param_config('p3', param='--p3', no_value=True)
        p4 = create_script_param_config('p4', param='-p4')
        p5 = create_script_param_config('p5')
        config = create_config_model('config_x', parameters=[p1, p2, p3, p4, p5])

        args_string = self.build_command_args({
            'p1': 'val1',
            'p2': 'val2',
            'p3': 'true',
            'p5': 'val5'},
            config)

        self.assertEqual(args_string, ['-p1', 'val1', 'val2', '--p3', 'val5'])
    def test_image_path_split_in_chunks(self):
        path = test_utils.create_file('test123.png')

        config = create_config_model('my_script', output_files=[inline_image('##any_path.png#')])

        execution_id = self.start_execution(config)

        normalized = normalize_path(path)

        self.write_output(execution_id, normalized[:4])
        self.wait_output_chunks(execution_id, chunks_count=1)

        self.write_output(execution_id, normalized[4:] + '\n')
        self.wait_output_chunks(execution_id, chunks_count=2)

        self.assert_images(path)
예제 #40
0
    def test_find_multiple_images_by_same_pattern(self):
        path1 = test_utils.create_file('test123.png')
        test_utils.create_file('images/test.png')
        path3 = test_utils.create_file('a.b.c.png')
        path4 = test_utils.create_file('some/sub/folder/test456.png')

        config = create_config_model(
            'my_script', output_files=[inline_image('##any_path.png#')])

        execution_id = self.start_execution(config)

        paths = [normalize_path(p) for p in (path1, path3, path4)]
        for index, path in enumerate(paths):
            self.write_output(execution_id, '__ ' + path + ' __\n')
            self.wait_output_chunks(execution_id, chunks_count=index + 1)

        self.assert_images(*paths)
예제 #41
0
    def test_exit_code(self):
        config_model = create_config_model(
            'my_script', script_command='ls', parameters=[])

        execution_id = self.executor_service.start_script(
            config_model,
            {},
            'userX',
            create_audit_names(ip='localhost'))

        executor = self.executor_service.get_active_executor(execution_id)
        executor.process_wrapper._write_script_output('some text\n')
        executor.process_wrapper._write_script_output('another text')
        executor.process_wrapper.finish(14)

        wait_observable_close_notification(executor.get_anonymized_output_stream(), 2)

        entry = self.logging_service.find_history_entry(execution_id)
        self.assertEqual(14, entry.exit_code)
    def perform_execution(self, output_files, parameter_values=None, parameters=None):
        if parameter_values is None:
            parameter_values = {}

        if parameters is None:
            parameters = [create_script_param_config(key) for key in parameter_values.keys()]

        config_model = create_config_model('my_script', output_files=output_files, parameters=parameters)

        execution_id = self.executor_service.start_script(
            config_model, parameter_values, 'userX', create_audit_names(ip='127.0.0.1'))
        self.executor_service.stop_script(execution_id)

        finish_condition = threading.Event()
        self.executor_service.add_finish_listener(lambda: finish_condition.set(), execution_id)
        finish_condition.wait(2)

        downloadable_files = self.feature.get_downloadable_files(execution_id)

        return downloadable_files
    def get_config(self, execution_id):
        if execution_id in self.execution_infos:
            return create_config_model(self.execution_infos[execution_id].script_name)

        return None
예제 #44
0
 def get_secure_command(self, parameters, values):
     config = create_config_model('config_x', parameters=parameters)
     executor = ScriptExecutor(config, values)
     return executor.get_secure_command()
예제 #45
0
    def test_one_parameter_one_value(self):
        config = create_config_model('config_x', parameters=[create_script_param_config('p1')])

        args_string = self.build_command_args({'p1': 'value'}, config)

        self.assertEqual(['value'], args_string)
예제 #46
0
 def _create_config(parameters=None):
     return create_config_model('config_x', parameters=parameters)
예제 #47
0
    def test_no_parameters_some_values(self):
        config = create_config_model('config_x')

        args_string = self.build_command_args({'p1': 'value', 'p2': 'value'}, config)

        self.assertEqual([], args_string)