############################################################################# # Some helpers to make HTTP requests and examine responses import logging # Make an HTTP request. def http_request(ctx, host=None, method=None, url=None): runcmd = globals()["runcmd"] exit_code_is = globals()["exit_code_is"] logging.debug(f"Make HTTP request: {method} {url}") runcmd(ctx, ["curl", "-ksv", "-X", method, f"-HHost: {host}", url]) exit_code_is(ctx, 0) # Check status code of latest HTTP request. def http_status_code_is(ctx, code=None): assert_eq = globals()["assert_eq"] logging.debug(f"Verifying status code of previous HTTP request is {code}") logging.debug(f" stderr={ctx['stderr']}") pattern = f"\n< HTTP/2 {code} " assert_eq(pattern in ctx["stderr"], True) # Check a HTTP response header for latest request has a given value. def http_header_is(ctx, header=None, value=None): assert_eq = globals()["assert_eq"] logging.debug(f"Verifying response has header {header}: {value}") s = ctx["stderr"] pattern = f"\n< {header}: {value}" assert_eq(pattern in s, True) # Check a HTTP body response for latest request has a given value. def http_body_is(ctx, body=None): assert_eq = globals()["assert_eq"] logging.debug(f"Verifying response body is {body!r}") logging.debug(f" actual body={ctx['stdout']!r}") s = ctx["stdout"] body = body.encode("UTF8").decode("unicode-escape") assert_eq(body, s)