#!/usr/bin/env python3 import json import sys def check(expected, actual): expected_test = json.loads(expected) actual_test = json.loads(actual) check_output(expected_test, actual_test) def check_output(expected_test, actual_test): expected_entries = expected_test["entries"] actual_entries = actual_test["entries"] if len(expected_entries) != len(actual_entries): print("expected entries: %d" % len(expected_entries)) print("actual entries: %d" % len(actual_entries)) sys.exit(1) for i in range(len(expected_entries)): check_entry(i, expected_entries[i], actual_entries[i]) def check_entry(entry_index, expected_entry, actual_entry): check_request(entry_index, expected_entry["request"], actual_entry["request"]) check_response(entry_index, expected_entry["response"], actual_entry["response"]) if expected_entry.get("asserts") is not None: check_asserts(entry_index, expected_entry["asserts"], actual_entry["asserts"]) def check_request(entry_index, expected_request, actual_request): check_method(entry_index, expected_request["method"], actual_request["method"]) check_url(entry_index, expected_request["url"], actual_request["url"]) def check_response(entry_index, expected_response, actual_response): check_status(entry_index, expected_response["status"], actual_response["status"]) def check_method(entry_index, expected, actual): if expected != actual: print("Invalid entry %d" % entry_index) print("expected method: %s" % expected) print("actual method : %s" % actual) sys.exit(1) def check_url(entry_index, expected, actual): if expected != actual: print("Invalid entry %d" % entry_index) print("expected url: %s" % expected) print("actual url : %s" % actual) sys.exit(1) def check_status(entry_index, expected, actual): if expected != actual: print("Invalid entry %d" % entry_index) print("expected status: %s" % expected) print("actual status : %s" % actual) sys.exit(1) def check_asserts(entry_index, expected, actual): if expected != actual: print("Invalid entry %d" % entry_index) print("expected asserts:\n%s" % json.dumps(expected, indent=2)) print("actual asserts:\n%s" % json.dumps(actual, indent=2)) sys.exit(1) def main(): if len(sys.argv) < 3: print("usage: check_output.py expected_file actual_file") sys.exit(1) expected_file = sys.argv[1] actual_file = sys.argv[2] expected = open(expected_file).read() actual = open(actual_file).read() check_file(expected, actual) if __name__ == "__main__": main()