Skip to content

Commit 7a9590e

Browse files
committed
test: add file logging smoke test
Assisted-by: GLM 4.6 via Claude Code Signed-off-by: Xe Iaso <me@xeiaso.net>
1 parent 524efe3 commit 7a9590e

6 files changed

Lines changed: 312 additions & 0 deletions

File tree

.github/workflows/smoke-tests.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ jobs:
2222
- git-push
2323
- healthcheck
2424
- i18n
25+
- log-file
2526
- palemoon/amd64
2627
#- palemoon/i386
2728
- robots_txt

test/log-file/anubis.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
bots:
2+
- name: challenge
3+
user_agent_regex: CHALLENGE
4+
action: CHALLENGE
5+
6+
status_codes:
7+
CHALLENGE: 200
8+
DENY: 403
9+
10+
logging:
11+
sink: file
12+
parameters:
13+
file: "./var/anubis.log"
14+
maxBackups: 3 # keep at least 3 old copies
15+
maxBytes: 67108864 # each file can have up to 64 Mi of logs
16+
maxAge: 7 # rotate files out every n days
17+
compress: true
18+
useLocalTime: false # timezone for rotated files is UTC

test/log-file/input.txt

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
/wiki//bin
2+
/wiki//boot
3+
/wiki//dev
4+
/wiki//dev/de
5+
/wiki//dev/en
6+
/wiki//dev/en-ca
7+
/wiki//dev/es
8+
/wiki//dev/fr
9+
/wiki//dev/hr
10+
/wiki//dev/hu
11+
/wiki//dev/it
12+
/wiki//dev/ja
13+
/wiki//dev/ko
14+
/wiki//dev/pl
15+
/wiki//dev/pt-br
16+
/wiki//dev/ro
17+
/wiki//dev/ru
18+
/wiki//dev/sv
19+
/wiki//dev/uk
20+
/wiki//dev/zh-cn
21+
/wiki//etc
22+
/wiki//etc/conf.d
23+
/wiki//etc/env.d
24+
/wiki//etc/fstab
25+
/wiki//etc/fstab/de
26+
/wiki//etc/fstab/en
27+
/wiki//etc/fstab/es
28+
/wiki//etc/fstab/fr
29+
/wiki//etc/fstab/hu
30+
/wiki//etc/fstab/it
31+
/wiki//etc/fstab/ja
32+
/wiki//etc/fstab/ko
33+
/wiki//etc/fstab/ru
34+
/wiki//etc/fstab/sv
35+
/wiki//etc/fstab/uk
36+
/wiki//etc/fstab/zh-cn
37+
/wiki//etc/hosts
38+
/wiki//etc/local.d
39+
/wiki//etc/make.conf
40+
/wiki//etc/portage
41+
/wiki//etc/portage/bashrc
42+
/wiki//etc/portage/Bashrc
43+
/wiki//etc/portage/binrepos.conf
44+
/wiki//etc/portage/binrepos.conf/en
45+
/wiki//etc/portage/binrepos.conf/hu
46+
/wiki//etc/portage/binrepos.conf/ja
47+
/wiki//etc/portage/binrepos.conf/ru
48+
/wiki//etc/portage/categories
49+
/wiki//etc/portage/color.map
50+
/wiki//etc/portage/env
51+
/wiki//etc/portage/img/ico.png
52+
/wiki//etc/portage/license_groups
53+
/wiki//etc/portage/make.conf
54+
/wiki//etc/portage/make.conf/de
55+
/wiki//etc/portage/make.conf/de/etc/portage/make.conf
56+
/wiki//etc/portage/make.conf/en
57+
/wiki//etc/portage/make.conf/es
58+
/wiki//etc/portage/make.conf/fr
59+
/wiki//etc/portage/make.conf/hu
60+
/wiki//etc/portage/make.conf/it
61+
/wiki//etc/portage/make.conf/it/var/db/repos/gentoo/licenses
62+
/wiki//etc/portage/make.conf/ja
63+
/wiki//etc/portage/make.conf/pl
64+
/wiki//etc/portage/make.conf/ru
65+
/wiki//etc/portage/make.conf/uk
66+
/wiki//etc/portage/make.conf/zh-cn
67+
/wiki//etc/portage/make.profile
68+
/wiki//etc/portage/mirrors
69+
/wiki//etc/portage/modules
70+
/wiki//etc/portage/package.accept_keywords
71+
/wiki//etc/portage/package.env
72+
/wiki//etc/portage/package.license
73+
/wiki//etc/portage/package.license/en
74+
/wiki//etc/portage/package.license/es
75+
/wiki//etc/portage/package.license/hu
76+
/wiki//etc/portage/package.license/ja
77+
/wiki//etc/portage/package.mask
78+
/wiki//etc/portage/package.mask/en
79+
/wiki//etc/portage/package.mask/hu
80+
/wiki//etc/portage/package.mask/ja
81+
/wiki//etc/portage/package.properties
82+
/wiki//etc/portage/package.unmask
83+
/wiki//etc/portage/package.use
84+
/wiki//etc/portage/package.use/de
85+
/wiki//etc/portage/package.use/en
86+
/wiki//etc/portage/package.use/es
87+
/wiki//etc/portage/package.use/fr
88+
/wiki//etc/portage/package.use/hu
89+
/wiki//etc/portage/package.use/it
90+
/wiki//etc/portage/package.use/ja
91+
/wiki//etc/portage/package.use/ru
92+
/wiki//etc/portage/package.use/uk
93+
/wiki//etc/portage/package.use/zh-cn
94+
/wiki//etc/portage/patches
95+
/wiki//etc/portage/profile/make.defaults
96+
/wiki//etc/portage/profile/package.provided
97+
/wiki//etc/portage/profile/package.provided/etc/portage/profile/package.provided
98+
/wiki//etc/portage/profile/package.provided/etc/portage/profiles/package.provided
99+
/wiki//etc/portage/profile/package.use.mask
100+
/wiki//etc/portage/profiles/package.provided
101+
/wiki//etc/portage/profiles/package.use.mask
102+
/wiki//etc/portage/profiles/package.use.mask/etc/portage/profile/package.use.mask
103+
/wiki//etc/portage/profiles/package.use.mask/etc/portage/profiles/package.use.mask
104+
/wiki//etc/portage/profiles/use.mask
105+
/wiki//etc/portage/profile/use.mask
106+
/wiki//etc/portage/repos.conf
107+
/wiki//etc/portage/repos.conf/brother-overlay.conf
108+
/wiki//etc/portage/repos.conf/de
109+
/wiki//etc/portage/repos.conf/en
110+
/wiki//etc/portage/repos.conf/es
111+
/wiki//etc/portage/repos.conf/etc/portage/repos.conf/gentoo.conf
112+
/wiki//etc/portage/repos.conf/fr
113+
/wiki//etc/portage/repos.conf/fr/etc/portage/repos.conf/gentoo.conf
114+
/wiki//etc/portage/repos.conf/gentoo.conf
115+
/wiki//etc/portage/repos.conf/gentoo.conf/etc/portage/repos.conf/gentoo.conf
116+
/wiki//etc/portage/repos.conf/hr
117+
/wiki//etc/portage/repos.conf/hu
118+
/wiki//etc/portage/repos.conf/it
119+
/wiki//etc/portage/repos.conf/ja
120+
/wiki//etc/portage/repos.conf/ko
121+
/wiki//etc/portage/repos.conf/pl
122+
/wiki//etc/portage/repos.conf/pt-br
123+
/wiki//etc/portage/repos.conf/ru
124+
/wiki//etc/portage/repos.conf/uk
125+
/wiki//etc/portage/repos.conf/zh-cn
126+
/wiki//etc/portage/savedconfig
127+
/wiki//etc/portage/sets
128+
/wiki//etc/profile
129+
/wiki//etc/profile.env
130+
/wiki//etc/sandbox.conf
131+
/wiki//home
132+
/wiki//lib
133+
/wiki//lib64
134+
/wiki//media
135+
/wiki//mnt
136+
/wiki//opt
137+
/wiki//proc
138+
/wiki//proc/config.gz
139+
/wiki//run
140+
/wiki//sbin
141+
/wiki//srv
142+
/wiki//sys
143+
/wiki//tmp
144+
/wiki//usr
145+
/wiki//usr/bin
146+
/wiki//usr_move
147+
/wiki//usr/portage
148+
/wiki//usr/portage/distfiles
149+
/wiki//usr/portage/licenses
150+
/wiki//usr/portage/metadata
151+
/wiki//usr/portage/metadata/md5-cache
152+
/wiki//usr/portage/metadata/md5-cache/usr/portage/metadata/md5-cache
153+
/wiki//usr/portage/metadata/md5-cache/var/db/repos/gentoo//metadata/md5-cache
154+
/wiki//usr/portage/packages
155+
/wiki//usr/portage/profiles
156+
/wiki//usr/portage/profiles/license_groups
157+
/wiki//usr/portage/profiles/license_groups/usr/portage/profiles/license_groups
158+
/wiki//usr/portage/profiles/license_groups/var/db/repos/gentoo//profiles/license_groups
159+
/wiki//usr/share/doc/
160+
/wiki//var/cache/binpkgs
161+
/wiki//var/cache/distfiles
162+
/wiki//var/db/pkg
163+
/wiki//var/db/pkg%22
164+
/wiki//var/db/repos/gentoo
165+
/wiki//var/db/repos/gentoo/licenses
166+
/wiki//var/db/repos/gentoo/licenses/var/db/repos/gentoo//licenses
167+
/wiki//var/db/repos/gentoo/licenses/var/db/repos/gentoo/licenses
168+
/wiki//var/db/repos/gentoo/metadata
169+
/wiki//var/db/repos/gentoo/metadata/md5-cache
170+
/wiki//var/db/repos/gentoo/metadata/var/db/repos/gentoo//metadata
171+
/wiki//var/db/repos/gentoo/metadata/var/db/repos/gentoo/metadata
172+
/wiki//var/db/repos/gentoo/profiles
173+
/wiki//var/db/repos/gentoo/profiles/license_groups
174+
/wiki//var/db/repos/gentoo/profiles/package.mask
175+
/wiki//var/lib/portage
176+
/wiki//var/lib/portage/world
177+
/wiki//var/run
178+
/gcc-bugs/bug-122002-4@http.gcc.gnu.org%2Fbugzilla%2F/T/

test/log-file/test.mjs

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import { statSync } from "fs";
2+
3+
async function getPage(path) {
4+
return fetch(`http://localhost:8923${path}`, {
5+
headers: {
6+
'User-Agent': 'CHALLENGE'
7+
}
8+
})
9+
.then(resp => {
10+
if (resp.status !== 200) {
11+
throw new Error(`wanted status 200, got status: ${resp.status}`);
12+
}
13+
return resp;
14+
})
15+
.then(resp => resp.text());
16+
}
17+
18+
async function getFileSize(filePath) {
19+
try {
20+
return statSync(filePath).size;
21+
} catch (error) {
22+
return 0;
23+
}
24+
}
25+
26+
(async () => {
27+
const logFilePath = "./var/anubis.log";
28+
29+
// Get initial log file size
30+
const initialSize = await getFileSize(logFilePath);
31+
console.log(`Initial log file size: ${initialSize} bytes`);
32+
33+
// Make 35 requests with different paths
34+
const requests = [];
35+
for (let i = 0; i < 35; i++) {
36+
requests.push(`/test${i}`);
37+
}
38+
39+
const resultSheet = {};
40+
let failed = false;
41+
42+
for (const path of requests) {
43+
try {
44+
const resp = await getPage(path);
45+
resultSheet[path] = {
46+
success: true,
47+
line: resp.split("\n")[0],
48+
};
49+
} catch (error) {
50+
resultSheet[path] = {
51+
success: false,
52+
error: error.message,
53+
};
54+
console.log(`✗ Request to ${path} failed: ${error.message}`);
55+
failed = true;
56+
}
57+
}
58+
59+
// Check final log file size
60+
const finalSize = await getFileSize(logFilePath);
61+
console.log(`Final log file size: ${finalSize} bytes`);
62+
console.log(`Size increase: ${finalSize - initialSize} bytes`);
63+
64+
// Verify that log file size increased
65+
if (finalSize <= initialSize) {
66+
console.error("ERROR: Log file size did not increase after making requests!");
67+
failed = true;
68+
}
69+
70+
let successCount = 0;
71+
for (let [k, v] of Object.entries(resultSheet)) {
72+
if (!v.success) {
73+
console.error({ path: k, error: v.error });
74+
} else {
75+
successCount++;
76+
}
77+
}
78+
79+
console.log(`Successful requests: ${successCount}/${requests.length}`);
80+
81+
if (failed) {
82+
console.error("Test failed: Some requests failed or log file size did not increase");
83+
process.exit(1);
84+
} else {
85+
console.log("Test passed: All requests succeeded and log file size increased");
86+
process.exit(0);
87+
}
88+
})();

test/log-file/test.sh

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/usr/bin/env bash
2+
3+
set -euo pipefail
4+
5+
function cleanup() {
6+
pkill -P $$
7+
}
8+
9+
trap cleanup EXIT SIGINT
10+
11+
# Build static assets
12+
(cd ../.. && npm ci && npm run assets)
13+
14+
go tool anubis --help 2>/dev/null || :
15+
16+
go run ../cmd/httpdebug &
17+
18+
go tool anubis \
19+
--policy-fname ./anubis.yaml \
20+
--use-remote-address \
21+
--target=http://localhost:3923 &
22+
23+
sleep 2
24+
25+
backoff-retry node ./test.mjs

test/log-file/var/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
*
2+
!.gitignore

0 commit comments

Comments
 (0)