test: add i18n smoke test (#858)
* test: add i18n smoke test Makes sure that all of the languages that Anubis supports show up when the challenge page is sent to a client. Signed-off-by: Xe Iaso <me@xeiaso.net> * test(i18n): build anubis so that the smoke test doesn't backoff timeout Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Xe Iaso <me@xeiaso.net>
This commit is contained in:
parent
c59b7179c3
commit
36e25ff5f3
7 changed files with 285 additions and 52 deletions
8
test/i18n/anubis.yaml
Normal file
8
test/i18n/anubis.yaml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
bots:
|
||||
- name: challenge
|
||||
user_agent_regex: CHALLENGE
|
||||
action: CHALLENGE
|
||||
|
||||
status_codes:
|
||||
CHALLENGE: 200
|
||||
DENY: 403
|
||||
62
test/i18n/test.mjs
Normal file
62
test/i18n/test.mjs
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
async function fetchLanguages() {
|
||||
return fetch("http://localhost:8923/.within.website/x/cmd/anubis/static/locales/manifest.json")
|
||||
.then(resp => {
|
||||
if (resp.status !== 200) {
|
||||
throw new Error(`wanted status 200, got status: ${resp.status}`);
|
||||
}
|
||||
return resp;
|
||||
})
|
||||
.then(resp => resp.json());
|
||||
}
|
||||
|
||||
async function getChallengePage(lang) {
|
||||
return fetch("http://localhost:8923/reqmeta", {
|
||||
headers: {
|
||||
"Accept-Language": lang,
|
||||
"User-Agent": "CHALLENGE",
|
||||
}
|
||||
})
|
||||
.then(resp => {
|
||||
if (resp.status !== 200) {
|
||||
throw new Error(`wanted status 200, got status: ${resp.status}`);
|
||||
}
|
||||
return resp;
|
||||
})
|
||||
.then(resp => resp.text());
|
||||
}
|
||||
|
||||
(async () => {
|
||||
const languages = await fetchLanguages();
|
||||
console.log(languages);
|
||||
|
||||
const { supportedLanguages } = languages;
|
||||
|
||||
if (supportedLanguages.length === 0) {
|
||||
throw new Error(`no languages defined`);
|
||||
}
|
||||
|
||||
const resultSheet = {};
|
||||
let failed = false;
|
||||
|
||||
for (const lang of supportedLanguages) {
|
||||
console.log(`getting for ${lang}`);
|
||||
const page = await getChallengePage(lang);
|
||||
|
||||
resultSheet[lang] = page.includes(`<html lang="${lang}">`)
|
||||
}
|
||||
|
||||
for (const [lang, result] of Object.entries(resultSheet)) {
|
||||
if (!result) {
|
||||
failed = true;
|
||||
console.log(`${lang} did not show up in challenge page`);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(resultSheet);
|
||||
|
||||
if (failed) {
|
||||
throw new Error("i18n smoke test failed");
|
||||
}
|
||||
|
||||
process.exit(0);
|
||||
})();
|
||||
23
test/i18n/test.sh
Executable file
23
test/i18n/test.sh
Executable file
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
function cleanup() {
|
||||
pkill -P $$
|
||||
}
|
||||
|
||||
trap cleanup EXIT SIGINT
|
||||
|
||||
# Build static assets
|
||||
(cd ../.. && npm ci && npm run assets)
|
||||
|
||||
go tool anubis --help 2>/dev/null ||:
|
||||
|
||||
go run ../cmd/unixhttpd &
|
||||
|
||||
go tool anubis \
|
||||
--policy-fname ./anubis.yaml \
|
||||
--use-remote-address \
|
||||
--target=unix://$(pwd)/unixhttpd.sock &
|
||||
|
||||
go run ../cmd/backoff-retry node ./test.mjs
|
||||
Loading…
Add table
Add a link
Reference in a new issue