############################################################################# # Some helpers to make HTTP requests and examine responses import json import logging import os import random import re import shutil import signal import subprocess import time import urllib.parse import yaml # Make an HTTP request. def http_request(ctx, host=None, method=None, url=None): 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): 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): 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): 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)