Targets whose home page redirects are checked at /robots.txt (closes #194)
check / check (push) Canceled after 0s
check / check (push) Canceled after 0s
A check follows a redirect and times the request to the new URL too. So the AWS Console, the Google Cloud Console, Akamai, B2 and the eight S3 regions are now checked at /robots.txt on their own host, which answers without a redirect. Before, the S3 and B2 figures also timed a page on another host. The S3 regions are checked with HEAD, because Chrome closes the connection after a GET of their /robots.txt and the figure would then include connection setup every time. README.md says what a figure includes. Reports name a target by its URL, so these targets' samples are stored under the new URLs. Model: opus-5-5
This commit was merged in pull request #193.
This commit is contained in:
@@ -191,6 +191,80 @@ test("a check sends no Referer header, wherever the page is served from", async
|
||||
);
|
||||
});
|
||||
|
||||
// These targets' home pages answer with a redirect. A check follows it and
|
||||
// times the request to the new URL too, often on another host. The Google
|
||||
// Cloud Console redirects only requests that do not say they come from
|
||||
// another site, such as curl's. Each target is checked at /robots.txt on
|
||||
// its own host, which answers without a redirect. An S3 region answers it
|
||||
// with 403, and any answer counts as reachable.
|
||||
test("a target whose home page redirects is checked at /robots.txt on its own host", () => {
|
||||
const checked = new Map(
|
||||
new AppState([]).wan.map((host) => [host.name, host.url]),
|
||||
);
|
||||
for (const [name, url] of [
|
||||
["AWS Console", "https://console.aws.amazon.com/robots.txt"],
|
||||
["Google Cloud Console", "https://console.cloud.google.com/robots.txt"],
|
||||
["Akamai", "https://www.akamai.com/robots.txt"],
|
||||
["B2", "https://api.backblazeb2.com/robots.txt"],
|
||||
[
|
||||
"S3 af-south-1 (Cape Town)",
|
||||
"https://s3.af-south-1.amazonaws.com/robots.txt",
|
||||
],
|
||||
[
|
||||
"S3 eu-west-2 (London)",
|
||||
"https://s3.eu-west-2.amazonaws.com/robots.txt",
|
||||
],
|
||||
[
|
||||
"S3 me-south-1 (Bahrain)",
|
||||
"https://s3.me-south-1.amazonaws.com/robots.txt",
|
||||
],
|
||||
[
|
||||
"S3 ap-northeast-1 (Tokyo)",
|
||||
"https://s3.ap-northeast-1.amazonaws.com/robots.txt",
|
||||
],
|
||||
[
|
||||
"S3 ap-southeast-1 (Singapore)",
|
||||
"https://s3.ap-southeast-1.amazonaws.com/robots.txt",
|
||||
],
|
||||
[
|
||||
"S3 ap-southeast-2 (Sydney)",
|
||||
"https://s3.ap-southeast-2.amazonaws.com/robots.txt",
|
||||
],
|
||||
[
|
||||
"S3 us-west-2 (Oregon)",
|
||||
"https://s3.us-west-2.amazonaws.com/robots.txt",
|
||||
],
|
||||
[
|
||||
"S3 sa-east-1 (São Paulo)",
|
||||
"https://s3.sa-east-1.amazonaws.com/robots.txt",
|
||||
],
|
||||
]) {
|
||||
assert.equal(checked.get(name), url);
|
||||
}
|
||||
});
|
||||
|
||||
// Chrome keeps the connection to an S3 region open after a HEAD check, but
|
||||
// closes it after most GET checks. The Hetzner servers do not answer HEAD.
|
||||
test("a round checks each S3 region with a HEAD request and every other target with a GET request", async (t) => {
|
||||
const state = new AppState([
|
||||
{ name: "Local CPE", url: "http://192.168.100.1" },
|
||||
]);
|
||||
mockTargets(t, () => 10);
|
||||
const round = tick(state, new AbortController().signal);
|
||||
t.mock.timers.tick(10);
|
||||
assert.notEqual(await settled(round), "still waiting");
|
||||
const methods = new Map(
|
||||
fetch.mock.calls.map((call) => [
|
||||
call.arguments[0],
|
||||
call.arguments[1].method,
|
||||
]),
|
||||
);
|
||||
for (const host of state.allHosts) {
|
||||
const method = host.name.startsWith("S3 ") ? "HEAD" : "GET";
|
||||
assert.equal(methods.get(host.url), method, host.name);
|
||||
}
|
||||
});
|
||||
|
||||
test("at a 30000ms interval, a target answering after 1000ms shows in its row while another target's check is still waiting", async (t) => {
|
||||
CONFIG.updateInterval = 30000;
|
||||
const state = new AppState([
|
||||
|
||||
Reference in New Issue
Block a user