summaryrefslogtreecommitdiff
path: root/subplot/http.py
blob: 5cff887c43d9ca05c8ae0a9b5abcbe1bfa2ccbc0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#############################################################################
# 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)