Skip to content

Commit

Permalink
add support for sub log directories in requests/logs
Browse files Browse the repository at this point in the history
grizzly-cli implementation of Biometria-se/grizzly#248.
  • Loading branch information
mgor committed Aug 24, 2023
1 parent 01221bb commit 6c0a0b6
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 23 deletions.
14 changes: 12 additions & 2 deletions grizzly_cli/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,14 @@ def create_parser(sub_parser: ArgumentSubParser, parent: str) -> None:
type=str,
default=None,
required=False,
help='save all run output in specified log file',
help='save all `grizzly-cli` run output in specified log file',
)
run_parser.add_argument(
'--log-dir',
type=str,
default=None,
required=False,
help='log directory suffix (relative to `requests/logs`) to save log files generated in a scenario',
)
run_parser.add_argument(
'file',
Expand Down Expand Up @@ -141,7 +148,10 @@ def run(args: Arguments, run_func: Callable[[Arguments, Dict[str, Any], Dict[str

if args.environment_file is not None:
environment_file = os.path.realpath(args.environment_file)
environ['GRIZZLY_CONFIGURATION_FILE'] = environment_file
environ.update({'GRIZZLY_CONFIGURATION_FILE': environment_file})

if args.log_dir is not None:
environ.update({'GRIZZLY_LOG_DIR': args.log_dir})

if not getattr(args, 'validate_config', False):
distribution_of_users_per_scenario(args, environ)
Expand Down
35 changes: 19 additions & 16 deletions tests/unit/argparse/bashcompletion/test__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,25 +238,28 @@ def test___call__(self, input: str, expected: str, capsys: CaptureFixture) -> No
'grizzly-cli local run ',
(
'-h\n--help\n--verbose\n-T\n--testdata-variable\n-y\n--yes\n-e\n--environment-file\n--csv-prefix\n--csv-interval\n'
'--csv-flush-interval\n-l\n--log-file\ntest.feature\ntest-dir'
'--csv-flush-interval\n-l\n--log-dir\n--log-file\ntest.feature\ntest-dir'
),
),
(
'grizzly-cli local run -',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n-y\n--yes\n-e\n--environment-file\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-file',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n-y\n--yes\n-e\n--environment-file\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-dir\n--log-file',
),
(
'grizzly-cli local run --',
'--help\n--verbose\n--testdata-variable\n--yes\n--environment-file\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n--log-dir\n--log-file',
),
('grizzly-cli local run --', '--help\n--verbose\n--testdata-variable\n--yes\n--environment-file\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n--log-file'),
(
'grizzly-cli local run --yes',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n-e\n--environment-file\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-file',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n-e\n--environment-file\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-dir\n--log-file',
),
('grizzly-cli local run --help --yes', ''),
('grizzly-cli local run --yes -T', ''),
(
'grizzly-cli local run --yes -T key=value',
(
'-h\n--help\n--verbose\n-T\n--testdata-variable\n-e\n--environment-file\n--csv-prefix\n--csv-interval\n'
'--csv-flush-interval\n-l\n--log-file\ntest.feature\ntest-dir'
'--csv-flush-interval\n-l\n--log-dir\n--log-file\ntest.feature\ntest-dir'
),
),
('grizzly-cli local run --yes -T key=value --env', '--environment-file'),
Expand All @@ -265,18 +268,18 @@ def test___call__(self, input: str, expected: str, capsys: CaptureFixture) -> No
('grizzly-cli local run --yes -T key=value --environment-file test-', 'test-dir'),
(
'grizzly-cli local run --yes -T key=value --environment-file test-dir',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-file',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-dir\n--log-file',
),
('grizzly-cli local run --yes -T key=value --environment-file test.', 'test.yaml'),
(
'grizzly-cli local run --yes -T key=value --environment-file test.yaml',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-file',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-dir\n--log-file',
),
('grizzly-cli local run --yes -T key=value --environment-file test.yaml --test', '--testdata-variable'),
('grizzly-cli local run --yes -T key=value --environment-file test.yaml --testdata-variable', ''),
(
'grizzly-cli local run --yes -T key=value --environment-file test.yaml --testdata-variable key=value',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-file\ntest.feature\ntest-dir',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-dir\n--log-file\ntest.feature\ntest-dir',
),
('grizzly-cli local run --yes -T key=value --environment-file test.yaml --testdata-variable key=value test', 'test.feature\ntest-dir'),
('grizzly-cli local run --yes -T key=value --environment-file test.yaml --testdata-variable key=value test.fe', 'test.feature'),
Expand Down Expand Up @@ -330,28 +333,28 @@ def test___call___local_run(self, input: str, expected: str, capsys: CaptureFixt
'grizzly-cli dist run ',
(
'-h\n--help\n--verbose\n-T\n--testdata-variable\n-y\n--yes\n-e\n--environment-file\n'
'--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-file\ntest.feature\ntest-dir'
'--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-dir\n--log-file\ntest.feature\ntest-dir'
),
),
(
'grizzly-cli dist run -',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n-y\n--yes\n-e\n--environment-file\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-file',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n-y\n--yes\n-e\n--environment-file\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-dir\n--log-file',
),
(
'grizzly-cli dist run --',
'--help\n--verbose\n--testdata-variable\n--yes\n--environment-file\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n--log-file',
'--help\n--verbose\n--testdata-variable\n--yes\n--environment-file\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n--log-dir\n--log-file',
),
(
'grizzly-cli dist run --yes',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n-e\n--environment-file\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-file',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n-e\n--environment-file\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-dir\n--log-file',
),
('grizzly-cli dist run --help --yes', ''),
('grizzly-cli dist run --yes -T', ''),
(
'grizzly-cli dist run --yes -T key=value',
(
'-h\n--help\n--verbose\n-T\n--testdata-variable\n-e\n--environment-file\n--csv-prefix\n--csv-interval\n'
'--csv-flush-interval\n-l\n--log-file\ntest.feature\ntest-dir'
'--csv-flush-interval\n-l\n--log-dir\n--log-file\ntest.feature\ntest-dir'
),
),
('grizzly-cli dist run --yes -T key=value --env', '--environment-file'),
Expand All @@ -360,18 +363,18 @@ def test___call___local_run(self, input: str, expected: str, capsys: CaptureFixt
('grizzly-cli dist run --yes -T key=value --environment-file test-', 'test-dir'),
(
'grizzly-cli dist run --yes -T key=value --environment-file test-dir',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-file',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-dir\n--log-file',
),
('grizzly-cli dist run --yes -T key=value --environment-file test.', 'test.yaml'),
(
'grizzly-cli dist run --yes -T key=value --environment-file test.yaml',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-file',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n--csv-prefix\n--csv-interval\n--csv-flush-interval\n-l\n--log-dir\n--log-file',
),
('grizzly-cli dist run --yes -T key=value --environment-file test.yaml --test', '--testdata-variable'),
('grizzly-cli dist run --yes -T key=value --environment-file test.yaml --testdata-variable', ''),
(
'grizzly-cli dist run --yes -T key=value --environment-file test.yaml --testdata-variable key=value',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n--csv-prefix\n--csv-interval\n--csv-flush-interval\ntest.feature\ntest-dir\n-l\n--log-file',
'-h\n--help\n--verbose\n-T\n--testdata-variable\n--csv-prefix\n--csv-interval\n--csv-flush-interval\ntest.feature\ntest-dir\n-l\n--log-dir\n--log-file',
),
('grizzly-cli dist run --yes -T key=value --environment-file test.yaml --testdata-variable key=value test', 'test.feature\ntest-dir'),
('grizzly-cli dist run --yes -T key=value --environment-file test.yaml --testdata-variable key=value test.fe', 'test.feature'),
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/test___main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def test__create_parser() -> None:
'-y', '--yes',
'-e', '--environment-file',
'--csv-prefix', '--csv-interval', '--csv-flush-interval',
'-l', '--log-file',
'-l', '--log-dir', '--log-file',
])
assert sorted([action.dest for action in run_parser._actions if len(action.option_strings) == 0]) == ['file']

Expand Down
21 changes: 17 additions & 4 deletions tests/unit/test_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ def test_run(capsys: CaptureFixture, mocker: MockerFixture, tmp_path_factory: Te
mocker.patch('grizzly_cli.run.grizzly_cli.EXECUTION_CONTEXT', str(execution_context))
mocker.patch('grizzly_cli.run.grizzly_cli.MOUNT_CONTEXT', str(mount_context))
mocker.patch('grizzly_cli.run.get_hostname', return_value='localhost')
mocker.patch('grizzly_cli.run.find_variable_names_in_questions', side_effect=[['foo', 'bar'], [], [], [], [], []])
mocker.patch('grizzly_cli.run.find_metadata_notices', side_effect=[[], ['is the event log cleared?'], ['hello world', 'foo bar'], [], [], []])
mocker.patch('grizzly_cli.run.find_variable_names_in_questions', side_effect=[['foo', 'bar'], [], [], [], [], [], []])
mocker.patch('grizzly_cli.run.find_metadata_notices', side_effect=[[], ['is the event log cleared?'], ['hello world', 'foo bar'], [], [], [], []])
mocker.patch('grizzly_cli.run.distribution_of_users_per_scenario', autospec=True)
ask_yes_no_mock = mocker.patch('grizzly_cli.run.ask_yes_no', autospec=True)
distributed_mock = mocker.MagicMock(return_value=0)
Expand Down Expand Up @@ -231,15 +231,28 @@ def test_run(capsys: CaptureFixture, mocker: MockerFixture, tmp_path_factory: Te

assert local_mock.call_count == 4
assert distributed_mock.call_count == 2
args, _ = distributed_mock.call_args_list[-1]
args, kwargs = distributed_mock.call_args_list[-1]

assert kwargs == {}
assert args[0] is arguments

assert args[2] == {
'master': [],
'worker': [],
'common': ['--stop', '-Dcsv-prefix="this_feature_is_testing_something_20221206T130113"', '-Dcsv-interval=20', '-Dcsv-flush-interval=60'],
}

setattr(arguments, 'csv_prefix', None)
setattr(arguments, 'csv_flush_interval', None)

# --log-dir
setattr(arguments, 'log_dir', 'foobar')

assert run(arguments, distributed_mock) == 0

args, kwargs = distributed_mock.call_args_list[-1]
assert kwargs == {}
assert args[0] is arguments
assert args[1].get('GRIZZLY_LOG_DIR', None) == 'foobar'
finally:
tmp_path_factory._basetemp = original_tmp_path
rmtree(test_context, onerror=onerror)

0 comments on commit 6c0a0b6

Please sign in to comment.