summaryrefslogtreecommitdiff
path: root/subplot
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2021-07-18 07:30:11 +0000
committerLars Wirzenius <liw@liw.fi>2021-07-18 07:30:11 +0000
commit891e1155495e5c42beafa6cfd9b518c804e9978c (patch)
tree716dbfc7a4d360b103989789fdf301cf29f7d90c /subplot
parentb7fd8b09a1cef3b2044b8d459d9c58a79fc12830 (diff)
parenta1844bed8206fe997dfebaaa73e6b9e822511e51 (diff)
downloadobnam2-891e1155495e5c42beafa6cfd9b518c804e9978c.tar.gz
Merge branch 'async-chunking' into 'main'
Add some machinery for async processing of things See merge request obnam/obnam!162
Diffstat (limited to 'subplot')
-rw-r--r--subplot/data.py40
-rw-r--r--subplot/data.yaml7
2 files changed, 37 insertions, 10 deletions
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