Functional Weave
Code in TypeScript

monitor.http-check-result@1.0.0

vectors.json

12,053 bytes · view raw

[
  {"name": "a 200 with no conditions is up", "args": [{"statusCode": 200, "latencyMs": 123, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "up", "reason": "ok", "message": "HTTP 200 in 123 ms"}},
  {"name": "a 204 without a latency measurement is up", "args": [{"statusCode": 204, "latencyMs": null, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "up", "reason": "ok", "message": "HTTP 204"}},
  {"name": "a 503 is down against the default any-2xx", "args": [{"statusCode": 503, "latencyMs": 40, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "down", "reason": "unexpected-status", "message": "HTTP 503, expected 2xx"}},
  {"name": "a redirect is not a 2xx: down unless listed", "args": [{"statusCode": 301, "latencyMs": 12, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "down", "reason": "unexpected-status", "message": "HTTP 301, expected 2xx"}},
  {"name": "299 is still a 2xx", "args": [{"statusCode": 299, "latencyMs": 5, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "up", "reason": "ok", "message": "HTTP 299 in 5 ms"}},
  {"name": "two accepted codes are listed with or", "args": [{"statusCode": 404, "latencyMs": 30, "body": null, "error": null}, {"statuses": [200, 204], "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "down", "reason": "unexpected-status", "message": "HTTP 404, expected 200 or 204"}},
  {"name": "three accepted codes are listed with commas and or", "args": [{"statusCode": 503, "latencyMs": 30, "body": null, "error": null}, {"statuses": [200, 201, 204], "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "down", "reason": "unexpected-status", "message": "HTTP 503, expected 200, 201 or 204"}},
  {"name": "a single accepted code", "args": [{"statusCode": 201, "latencyMs": 30, "body": null, "error": null}, {"statuses": [200], "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "down", "reason": "unexpected-status", "message": "HTTP 201, expected 200"}},
  {"name": "an explicit list replaces 2xx: a 404 can be the healthy answer", "args": [{"statusCode": 404, "latencyMs": 50, "body": null, "error": null}, {"statuses": [404], "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "up", "reason": "ok", "message": "HTTP 404 in 50 ms"}},
  {"name": "the body must contain the text", "args": [{"statusCode": 200, "latencyMs": 80, "body": "status: fail", "error": null}, {"statuses": null, "bodyContains": "ok", "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "down", "reason": "body-mismatch", "message": "body does not contain \"ok\""}},
  {"name": "the body match is case-sensitive", "args": [{"statusCode": 200, "latencyMs": 80, "body": "OK", "error": null}, {"statuses": null, "bodyContains": "ok", "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "down", "reason": "body-mismatch", "message": "body does not contain \"ok\""}},
  {"name": "no body at all does not contain the text", "args": [{"statusCode": 200, "latencyMs": 80, "body": null, "error": null}, {"statuses": null, "bodyContains": "ok", "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "down", "reason": "body-mismatch", "message": "body does not contain \"ok\""}},
  {"name": "a body containing the text is up", "args": [{"statusCode": 200, "latencyMs": 80, "body": "{\"status\":\"ok\"}", "error": null}, {"statuses": null, "bodyContains": "\"ok\"", "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "up", "reason": "ok", "message": "HTTP 200 in 80 ms"}},
  {"name": "latency just under the degraded threshold is up", "args": [{"statusCode": 200, "latencyMs": 999, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": 1000, "downLatencyMs": 3000}], "expect": {"status": "up", "reason": "ok", "message": "HTTP 200 in 999 ms"}},
  {"name": "latency exactly at the degraded threshold is degraded", "args": [{"statusCode": 200, "latencyMs": 1000, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": 1000, "downLatencyMs": 3000}], "expect": {"status": "degraded", "reason": "slow", "message": "latency 1000 ms at or above 1000 ms"}},
  {"name": "slow but not too slow is degraded", "args": [{"statusCode": 200, "latencyMs": 1500, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": 1000, "downLatencyMs": 3000}], "expect": {"status": "degraded", "reason": "slow", "message": "latency 1500 ms at or above 1000 ms"}},
  {"name": "latency at the down threshold is down", "args": [{"statusCode": 200, "latencyMs": 3000, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": 1000, "downLatencyMs": 3000}], "expect": {"status": "down", "reason": "too-slow", "message": "latency 3000 ms at or above 3000 ms"}},
  {"name": "only a down threshold: one millisecond under is up", "args": [{"statusCode": 200, "latencyMs": 1999, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": 2000}], "expect": {"status": "up", "reason": "ok", "message": "HTTP 200 in 1999 ms"}},
  {"name": "only a down threshold: at it is down", "args": [{"statusCode": 200, "latencyMs": 2000, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": 2000}], "expect": {"status": "down", "reason": "too-slow", "message": "latency 2000 ms at or above 2000 ms"}},
  {"name": "a wrong status is reported before the slowness", "args": [{"statusCode": 500, "latencyMs": 5000, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": 1000, "downLatencyMs": 3000}], "expect": {"status": "down", "reason": "unexpected-status", "message": "HTTP 500, expected 2xx"}},
  {"name": "a body mismatch is reported before the slowness", "args": [{"statusCode": 200, "latencyMs": 5000, "body": "maintenance", "error": null}, {"statuses": null, "bodyContains": "ok", "degradedLatencyMs": 1000, "downLatencyMs": 3000}], "expect": {"status": "down", "reason": "body-mismatch", "message": "body does not contain \"ok\""}},
  {"name": "equal thresholds skip degraded", "args": [{"statusCode": 200, "latencyMs": 1000, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": 1000, "downLatencyMs": 1000}], "expect": {"status": "down", "reason": "too-slow", "message": "latency 1000 ms at or above 1000 ms"}},
  {"name": "a timeout is down", "args": [{"statusCode": null, "latencyMs": 10000, "body": null, "error": "timeout"}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": 1000, "downLatencyMs": 3000}], "expect": {"status": "down", "reason": "timeout", "message": "timed out"}},
  {"name": "a DNS failure is down", "args": [{"statusCode": null, "latencyMs": null, "body": null, "error": "dns"}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "down", "reason": "dns", "message": "DNS lookup failed"}},
  {"name": "a refused connection is down", "args": [{"statusCode": null, "latencyMs": 3, "body": null, "error": "connection"}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "down", "reason": "connection", "message": "connection failed"}},
  {"name": "a TLS failure is down", "args": [{"statusCode": null, "latencyMs": 20, "body": null, "error": "tls"}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "down", "reason": "tls", "message": "TLS handshake failed"}},
  {"name": "an error wins even over a 200 that arrived before it", "args": [{"statusCode": 200, "latencyMs": 20, "body": "ok", "error": "protocol"}, {"statuses": null, "bodyContains": "ok", "degradedLatencyMs": null, "downLatencyMs": null}], "expect": {"status": "down", "reason": "protocol", "message": "protocol error"}},
  {"name": "neither a status code nor an error is an error", "args": [{"statusCode": null, "latencyMs": 10, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expectError": "probe must have a statusCode or an error"},
  {"name": "a status code below 100 is an error", "args": [{"statusCode": 99, "latencyMs": 10, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expectError": "statusCode must be 100 to 599, received 99"},
  {"name": "a status code above 599 is an error", "args": [{"statusCode": 600, "latencyMs": 10, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expectError": "statusCode must be 100 to 599, received 600"},
  {"name": "a fractional status code is an error", "args": [{"statusCode": 200.5, "latencyMs": 10, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expectError": "statusCode must be 100 to 599, received 200.5"},
  {"name": "a negative latency is an error", "args": [{"statusCode": 200, "latencyMs": -1, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expectError": "latencyMs must be a whole number 0 or more, received -1"},
  {"name": "a fractional latency is an error", "args": [{"statusCode": 200, "latencyMs": 1.5, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expectError": "latencyMs must be a whole number 0 or more, received 1.5"},
  {"name": "an unknown error kind is an error", "args": [{"statusCode": null, "latencyMs": null, "body": null, "error": "refused"}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expectError": "unknown probe error: refused"},
  {"name": "a down threshold below the degraded one is an error", "args": [{"statusCode": 200, "latencyMs": 10, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": 1000, "downLatencyMs": 500}], "expectError": "downLatencyMs must not be below degradedLatencyMs: 500 < 1000"},
  {"name": "a zero degraded threshold is an error", "args": [{"statusCode": 200, "latencyMs": 10, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": 0, "downLatencyMs": null}], "expectError": "degradedLatencyMs must be a whole number 1 or more, received 0"},
  {"name": "a zero down threshold is an error", "args": [{"statusCode": 200, "latencyMs": 10, "body": null, "error": null}, {"statuses": null, "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": 0}], "expectError": "downLatencyMs must be a whole number 1 or more, received 0"},
  {"name": "an empty list of accepted codes is an error", "args": [{"statusCode": 200, "latencyMs": 10, "body": null, "error": null}, {"statuses": [], "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expectError": "statuses must not be empty; use null to accept any 2xx"},
  {"name": "an accepted code outside 100 to 599 is an error", "args": [{"statusCode": 200, "latencyMs": 10, "body": null, "error": null}, {"statuses": [200, 42], "bodyContains": null, "degradedLatencyMs": null, "downLatencyMs": null}], "expectError": "expected statuses must be 100 to 599, received 42"}
]