Test keys and fixtures
A test key (lsk_test_…) runs checks on a fixture engine
instead of real connections. Results are predictable, marked
test: true and never charged. Use it to write and test your
integration, including how you handle blocks and failures.
Fixture host names
The outcome depends only on the host name of the URL:
| Host name | Every cohort gets |
|---|---|
blocked-dns.fixtures.linkspect.com | blocked, layer: "dns", method: "redirect" |
blocked-sni.fixtures.linkspect.com | blocked, layer: "tls_sni", method: "reset" |
target-down.fixtures.linkspect.com | target_down |
proxy-failure.fixtures.linkspect.com | proxy_failure with reason: "exit_changed", all measurements excluded |
| any other host name | ok |
Paths and query strings do not matter, so
https://blocked-sni.fixtures.linkspect.com/checkout?step=2 gives the
same result as the bare host. Each measurement in a fixture result has details
at GET /v1/measurements/{id}, like a real one.
How long fixture checks take
| Profile | Time per cohort | Finishes within Prefer: wait=30? |
|---|---|---|
quick | 2 seconds | yes |
standard | 10 seconds | yes |
deep | 40 seconds | no: you get 202 and poll |
A deep fixture check is the easy way to test the
202 path and polling (see Waiting and
polling).
Rules that still apply
The fixture engine skips the measuring, not the rules in front of it:
- A cohort whose operator has no exits in the catalog gets
not_measuredwithno_vantage. - An
httpURL, or a port other than 443, getsnot_measuredwithpeer_safetyin cohorts measured through subscribers' connections. This is our policy to protect the people whose connections carry the measurements. - Bad URLs and targets get the same errors as with a live key.
- Test keys do not open real browsers, and do not ask public DNS filters
or reputation sources, so
user_filtersstays empty.
Live keys
Fixture host names never give fixture results with a live key
(lsk_live_…). Cohorts that cannot be measured get
not_measured and are not charged; a preview
(POST /v1/checks:preview) shows them as
not_measurable in advance.