From 46bea38612245a28af8e5daaf76544f25ec74d90 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 18 Jul 2021 09:49:04 +0300 Subject: test: add scenario to verify chunkify works Sponsored-by: author --- subplot/data.py | 40 ++++++++++++++++++++++++++++++++-------- subplot/data.yaml | 7 +++++-- 2 files changed, 37 insertions(+), 10 deletions(-) (limited to 'subplot') diff --git a/subplot/data.py b/subplot/data.py index 13b6d2b..2e2802e 100644 --- a/subplot/data.py +++ b/subplot/data.py @@ -107,9 +107,10 @@ def convert_yaml_to_json(ctx, yaml_name=None, json_name=None): json.dump(obj, f) -def match_stdout_to_json_file(ctx, filename=None): +def match_stdout_to_json_file_superset(ctx, filename=None): runcmd_get_stdout = globals()["runcmd_get_stdout"] assert_eq = globals()["assert_eq"] + assert_dict_eq = globals()["assert_dict_eq"] stdout = runcmd_get_stdout(ctx) stdout = json.loads(stdout.strip()) @@ -117,14 +118,37 @@ def match_stdout_to_json_file(ctx, filename=None): logging.debug(f"match_stdout_to_json_file: stdout={stdout!r}") logging.debug(f"match_stdout_to_json_file: file={obj!r}") - for key in obj: - if key not in stdout: - logging.error(f"{key} not in stdout") - assert key in stdout + if isinstance(obj, dict): + stdout = {key: value for key, value in stdout.items() if key in obj} + assert_dict_eq(obj, stdout) + elif isinstance(obj, list): + obj = {"key": obj} + stdout = {"key": stdout} + assert_dict_eq(obj, stdout) + assert_dict_eq(obj, stdout) + else: + assert_eq(obj, stdout) + + +def match_stdout_to_json_file_exactly(ctx, filename=None): + runcmd_get_stdout = globals()["runcmd_get_stdout"] + assert_eq = globals()["assert_eq"] + assert_dict_eq = globals()["assert_dict_eq"] + + stdout = runcmd_get_stdout(ctx) + stdout = json.loads(stdout.strip()) + obj = json.load(open(filename)) + logging.debug(f"match_stdout_to_json_file: stdout={stdout!r}") + logging.debug(f"match_stdout_to_json_file: file={obj!r}") - if stdout[key] != obj[key]: - logging.error(f"stdout value for key is not what was exptected") - assert_eq(stdout[key], obj[key]) + if isinstance(obj, list): + obj = {"key": obj} + stdout = {"key": stdout} + assert_dict_eq(obj, stdout) + elif isinstance(obj, dict): + assert_dict_eq(obj, stdout) + else: + assert_eq(obj, stdout) def manifests_match(ctx, expected=None, actual=None): diff --git a/subplot/data.yaml b/subplot/data.yaml index 41a563f..46be6bc 100644 --- a/subplot/data.yaml +++ b/subplot/data.yaml @@ -31,8 +31,11 @@ - given: "JSON file {json_name} converted from YAML file {yaml_name}" function: convert_yaml_to_json -- then: "stdout, as JSON, matches file {filename}" - function: match_stdout_to_json_file +- then: "stdout, as JSON, exactly matches file {filename}" + function: match_stdout_to_json_file_exactly + +- then: "stdout, as JSON, has all the values in file {filename}" + function: match_stdout_to_json_file_superset - then: "file {filename} is restored to {restored}" function: file_is_restored -- cgit v1.2.1