>>> anubis: Building testing/anubis 1.21.0-r0 (using abuild 3.15.0-r2) started Thu, 17 Jul 2025 11:25:08 +0000 >>> anubis: Validating /home/buildozer/aports/testing/anubis/APKBUILD... >>> anubis: Analyzing dependencies... >>> anubis: Installing for build: build-base go (1/2) Installing go (1.24.5-r1) (2/2) Installing .makedepends-anubis (20250717.112509) busybox-1.37.0-r19.trigger: Executing script... OK: 562 MiB in 110 packages >>> anubis: Cleaning up srcdir >>> anubis: Cleaning up pkgdir >>> anubis: Cleaning up tmpdir >>> anubis: Fetching https://distfiles.alpinelinux.org/distfiles/edge//anubis-src-vendor-npm-1.21.0.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 curl: (22) The requested URL returned error: 404 >>> anubis: Fetching https://github.com/TecharoHQ/anubis/releases/download/v1.21.0/anubis-src-vendor-npm-1.21.0.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 14.3M 100 14.3M 0 0 18.1M 0 --:--:-- --:--:-- --:--:-- 18.1M >>> anubis: Fetching https://distfiles.alpinelinux.org/distfiles/edge//anubis-src-vendor-npm-1.21.0.tar.gz >>> anubis: Checking sha512sums... anubis-src-vendor-npm-1.21.0.tar.gz: OK anubis.initd: OK anubis.confd: OK >>> anubis: Unpacking /var/cache/distfiles/edge/anubis-src-vendor-npm-1.21.0.tar.gz... ? github.com/TecharoHQ/anubis [no test files] ? github.com/TecharoHQ/anubis/cmd/anubis [no test files] ? github.com/TecharoHQ/anubis/cmd/containerbuild [no test files] === RUN TestDataFileConversion === RUN TestDataFileConversion/simple_default === RUN TestDataFileConversion/simple_json === RUN TestDataFileConversion/simple_deny_action === RUN TestDataFileConversion/simple_custom_name === RUN TestDataFileConversion/blacklist_with_crawl_delay === RUN TestDataFileConversion/wildcards === RUN TestDataFileConversion/empty_file === RUN TestDataFileConversion/complex_scenario --- PASS: TestDataFileConversion (0.00s) --- PASS: TestDataFileConversion/simple_default (0.00s) --- PASS: TestDataFileConversion/simple_json (0.00s) --- PASS: TestDataFileConversion/simple_deny_action (0.00s) --- PASS: TestDataFileConversion/simple_custom_name (0.00s) --- PASS: TestDataFileConversion/blacklist_with_crawl_delay (0.00s) --- PASS: TestDataFileConversion/wildcards (0.00s) --- PASS: TestDataFileConversion/empty_file (0.00s) --- PASS: TestDataFileConversion/complex_scenario (0.00s) === RUN TestCaseInsensitiveParsing --- PASS: TestCaseInsensitiveParsing (0.00s) === RUN TestVariousOutputFormats --- PASS: TestVariousOutputFormats (0.00s) === RUN TestDifferentActions === RUN TestDifferentActions/action_ALLOW === RUN TestDifferentActions/action_DENY === RUN TestDifferentActions/action_CHALLENGE === RUN TestDifferentActions/action_WEIGH --- PASS: TestDifferentActions (0.00s) --- PASS: TestDifferentActions/action_ALLOW (0.00s) --- PASS: TestDifferentActions/action_DENY (0.00s) --- PASS: TestDifferentActions/action_CHALLENGE (0.00s) --- PASS: TestDifferentActions/action_WEIGH (0.00s) === RUN TestPolicyNaming === RUN TestPolicyNaming/name_custom-policy === RUN TestPolicyNaming/name_my-rules === RUN TestPolicyNaming/name_site-protection --- PASS: TestPolicyNaming (0.00s) --- PASS: TestPolicyNaming/name_custom-policy (0.00s) --- PASS: TestPolicyNaming/name_my-rules (0.00s) --- PASS: TestPolicyNaming/name_site-protection (0.00s) === RUN TestCrawlDelayWeights === RUN TestCrawlDelayWeights/weight_1 === RUN TestCrawlDelayWeights/weight_5 === RUN TestCrawlDelayWeights/weight_10 === RUN TestCrawlDelayWeights/weight_25 --- PASS: TestCrawlDelayWeights (0.00s) --- PASS: TestCrawlDelayWeights/weight_1 (0.00s) --- PASS: TestCrawlDelayWeights/weight_5 (0.00s) --- PASS: TestCrawlDelayWeights/weight_10 (0.00s) --- PASS: TestCrawlDelayWeights/weight_25 (0.00s) === RUN TestBlacklistActions === RUN TestBlacklistActions/blacklist_DENY === RUN TestBlacklistActions/blacklist_CHALLENGE --- PASS: TestBlacklistActions (0.00s) --- PASS: TestBlacklistActions/blacklist_DENY (0.00s) --- PASS: TestBlacklistActions/blacklist_CHALLENGE (0.00s) PASS ok github.com/TecharoHQ/anubis/cmd/robots2policy 0.006s ? github.com/TecharoHQ/anubis/cmd/robots2policy/batch [no test files] ? github.com/TecharoHQ/anubis/data [no test files] === RUN TestImpl --- PASS: TestImpl (0.00s) === RUN TestCleanup --- PASS: TestCleanup (0.00s) PASS ok github.com/TecharoHQ/anubis/decaymap 0.002s === RUN TestHashCollisions hash_bench_test.go:176: Basic test: 22 realistic inputs, no collisions hash_bench_test.go:199: Stress test 1: 22400 similar string variations, no collisions hash_bench_test.go:224: Stress test 2: 70000 sequential patterns, no collisions hash_bench_test.go:227: TOTAL: Tested 92422 inputs across realistic scenarios - NO COLLISIONS --- PASS: TestHashCollisions (0.06s) === RUN TestXXHashFormat hash_bench_test.go:259: Input: "short" -> Hash: a4dbb3294161a9a4 hash_bench_test.go:259: Input: "" -> Hash: ef46db3751d8e999 hash_bench_test.go:259: Input: "very long string with lots of content that might be used in policy checking and other internal hashing scenarios" -> Hash: 66442c9447f2401b hash_bench_test.go:259: Input: "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" -> Hash: 853008ee50e116bf --- PASS: TestXXHashFormat (0.00s) === RUN TestErrorLogFilter --- PASS: TestErrorLogFilter (0.00s) === RUN TestXForwardedForUpdateIgnoreUnix --- PASS: TestXForwardedForUpdateIgnoreUnix (0.00s) === RUN TestXForwardedForUpdateAddToChain --- PASS: TestXForwardedForUpdateAddToChain (0.00s) === RUN TestComputeXFFHeader === RUN TestComputeXFFHeader/StripPrivate === RUN TestComputeXFFHeader/StripPrivate#01 === RUN TestComputeXFFHeader/StripLoopback === RUN TestComputeXFFHeader/StripCGNAT === RUN TestComputeXFFHeader/StripLinkLocalUnicastIPv4 === RUN TestComputeXFFHeader/StripLinkLocalUnicastIPv6 === RUN TestComputeXFFHeader/Flatten === RUN TestComputeXFFHeader/TrimSpaces === RUN TestComputeXFFHeader/invalid-ip-port === RUN TestComputeXFFHeader/invalid-remote-ip === RUN TestComputeXFFHeader/no-xff-dont-panic --- PASS: TestComputeXFFHeader (0.00s) --- PASS: TestComputeXFFHeader/StripPrivate (0.00s) --- PASS: TestComputeXFFHeader/StripPrivate#01 (0.00s) --- PASS: TestComputeXFFHeader/StripLoopback (0.00s) --- PASS: TestComputeXFFHeader/StripCGNAT (0.00s) --- PASS: TestComputeXFFHeader/StripLinkLocalUnicastIPv4 (0.00s) --- PASS: TestComputeXFFHeader/StripLinkLocalUnicastIPv6 (0.00s) --- PASS: TestComputeXFFHeader/Flatten (0.00s) --- PASS: TestComputeXFFHeader/TrimSpaces (0.00s) --- PASS: TestComputeXFFHeader/invalid-ip-port (0.00s) --- PASS: TestComputeXFFHeader/invalid-remote-ip (0.00s) --- PASS: TestComputeXFFHeader/no-xff-dont-panic (0.00s) PASS ok github.com/TecharoHQ/anubis/internal 0.071s === RUN TestReverse4 === RUN TestReverse4/1.2.3.4->4.3.2.1 --- PASS: TestReverse4 (0.00s) --- PASS: TestReverse4/1.2.3.4->4.3.2.1 (0.00s) === RUN TestReverse6 === RUN TestReverse6/1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0->0.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1 --- PASS: TestReverse6 (0.00s) --- PASS: TestReverse6/1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0->0.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1 (0.00s) === RUN TestLookup dnsbl_test.go:60: response: 0 --- PASS: TestLookup (0.25s) PASS ok github.com/TecharoHQ/anubis/internal/dnsbl 0.252s === RUN TestCacheReturnsDefault === RUN TestCacheReturnsDefault/og:title === RUN TestCacheReturnsDefault/og:description --- PASS: TestCacheReturnsDefault (0.00s) --- PASS: TestCacheReturnsDefault/og:title (0.00s) --- PASS: TestCacheReturnsDefault/og:description (0.00s) === RUN TestCheckCache --- PASS: TestCheckCache (0.00s) === RUN TestGetOGTags --- PASS: TestGetOGTags (0.00s) === RUN TestGetOGTagsWithHostConsideration === RUN TestGetOGTagsWithHostConsideration/Host_Not_Considered_-_Same_Host === RUN TestGetOGTagsWithHostConsideration/Host_Not_Considered_-_Different_Host === RUN TestGetOGTagsWithHostConsideration/Host_Considered_-_Same_Host === RUN TestGetOGTagsWithHostConsideration/Host_Considered_-_Different_Host --- PASS: TestGetOGTagsWithHostConsideration (0.00s) --- PASS: TestGetOGTagsWithHostConsideration/Host_Not_Considered_-_Same_Host (0.00s) --- PASS: TestGetOGTagsWithHostConsideration/Host_Not_Considered_-_Different_Host (0.00s) --- PASS: TestGetOGTagsWithHostConsideration/Host_Considered_-_Same_Host (0.00s) --- PASS: TestGetOGTagsWithHostConsideration/Host_Considered_-_Different_Host (0.00s) === RUN TestFetchHTMLDocument === RUN TestFetchHTMLDocument/Valid_HTML === RUN TestFetchHTMLDocument/Empty_HTML === RUN TestFetchHTMLDocument/Not_found_error === RUN TestFetchHTMLDocument/Unsupported_Content-Type === RUN TestFetchHTMLDocument/Too_large_content --- PASS: TestFetchHTMLDocument (0.00s) --- PASS: TestFetchHTMLDocument/Valid_HTML (0.00s) --- PASS: TestFetchHTMLDocument/Empty_HTML (0.00s) --- PASS: TestFetchHTMLDocument/Not_found_error (0.00s) --- PASS: TestFetchHTMLDocument/Unsupported_Content-Type (0.00s) --- PASS: TestFetchHTMLDocument/Too_large_content (0.00s) === RUN TestFetchHTMLDocumentInvalidURL --- PASS: TestFetchHTMLDocumentInvalidURL (0.08s) === RUN TestIntegrationGetOGTags === RUN TestIntegrationGetOGTags/Simple_page === RUN TestIntegrationGetOGTags/Complete_page === RUN TestIntegrationGetOGTags/Page_with_no_OG_tags === RUN TestIntegrationGetOGTags/Nonexistent_page --- PASS: TestIntegrationGetOGTags (0.00s) --- PASS: TestIntegrationGetOGTags/Simple_page (0.00s) --- PASS: TestIntegrationGetOGTags/Complete_page (0.00s) --- PASS: TestIntegrationGetOGTags/Page_with_no_OG_tags (0.00s) --- PASS: TestIntegrationGetOGTags/Nonexistent_page (0.00s) === RUN TestMemoryUsage mem_test.go:112: Memory allocated for 10k getTarget calls: mem_test.go:113: Total: 630.56 KB (0.62 MB) mem_test.go:114: Per operation: 64.57 bytes mem_test.go:143: Memory allocated for 1k extractOGTags calls: mem_test.go:144: Total: 339.03 KB (0.33 MB) mem_test.go:145: Per operation: 347.17 bytes --- PASS: TestMemoryUsage (0.01s) === RUN TestNewOGTagCache === RUN TestNewOGTagCache/Basic_initialization === RUN TestNewOGTagCache/Empty_target --- PASS: TestNewOGTagCache (0.00s) --- PASS: TestNewOGTagCache/Basic_initialization (0.00s) --- PASS: TestNewOGTagCache/Empty_target (0.00s) === RUN TestNewOGTagCache_UnixSocket --- PASS: TestNewOGTagCache_UnixSocket (0.00s) === RUN TestGetTarget === RUN TestGetTarget/No_path_or_query === RUN TestGetTarget/With_complex_path === RUN TestGetTarget/With_query_and_path === RUN TestGetTarget/Unix_socket_target === RUN TestGetTarget/Unix_socket_target_with_/// --- PASS: TestGetTarget (0.00s) --- PASS: TestGetTarget/No_path_or_query (0.00s) --- PASS: TestGetTarget/With_complex_path (0.00s) --- PASS: TestGetTarget/With_query_and_path (0.00s) --- PASS: TestGetTarget/Unix_socket_target (0.00s) --- PASS: TestGetTarget/Unix_socket_target_with_/// (0.00s) === RUN TestIntegrationGetOGTags_UnixSocket --- PASS: TestIntegrationGetOGTags_UnixSocket (0.10s) === RUN TestExtractOGTags === RUN TestExtractOGTags/Basic_OG_tags === RUN TestExtractOGTags/OG_tags_with_name_attribute === RUN TestExtractOGTags/No_approved_OG_tags === RUN TestExtractOGTags/Empty_content === RUN TestExtractOGTags/Explicitly_approved_tag --- PASS: TestExtractOGTags (0.00s) --- PASS: TestExtractOGTags/Basic_OG_tags (0.00s) --- PASS: TestExtractOGTags/OG_tags_with_name_attribute (0.00s) --- PASS: TestExtractOGTags/No_approved_OG_tags (0.00s) --- PASS: TestExtractOGTags/Empty_content (0.00s) --- PASS: TestExtractOGTags/Explicitly_approved_tag (0.00s) === RUN TestIsOGMetaTag === RUN TestIsOGMetaTag/Meta_OG_tag === RUN TestIsOGMetaTag/Regular_meta_tag === RUN TestIsOGMetaTag/Not_a_meta_tag --- PASS: TestIsOGMetaTag (0.00s) --- PASS: TestIsOGMetaTag/Meta_OG_tag (0.00s) --- PASS: TestIsOGMetaTag/Regular_meta_tag (0.00s) --- PASS: TestIsOGMetaTag/Not_a_meta_tag (0.00s) === RUN TestExtractMetaTagInfo === RUN TestExtractMetaTagInfo/OG_title_with_property_(approved_by_prefix) === RUN TestExtractMetaTagInfo/OG_description_with_name_(approved_by_prefix) === RUN TestExtractMetaTagInfo/Regular_meta_tag_(name=description,_approved_by_exact_match) === RUN TestExtractMetaTagInfo/Regular_meta_tag_(name=keywords,_not_approved) === RUN TestExtractMetaTagInfo/Twitter_tag_(not_approved_by_default) === RUN TestExtractMetaTagInfo/No_content_(but_approved_property) === RUN TestExtractMetaTagInfo/No_property/name_attribute === RUN TestExtractMetaTagInfo/Explicitly_approved_tag_with_property_attribute --- PASS: TestExtractMetaTagInfo (0.00s) --- PASS: TestExtractMetaTagInfo/OG_title_with_property_(approved_by_prefix) (0.00s) --- PASS: TestExtractMetaTagInfo/OG_description_with_name_(approved_by_prefix) (0.00s) --- PASS: TestExtractMetaTagInfo/Regular_meta_tag_(name=description,_approved_by_exact_match) (0.00s) --- PASS: TestExtractMetaTagInfo/Regular_meta_tag_(name=keywords,_not_approved) (0.00s) --- PASS: TestExtractMetaTagInfo/Twitter_tag_(not_approved_by_default) (0.00s) --- PASS: TestExtractMetaTagInfo/No_content_(but_approved_property) (0.00s) --- PASS: TestExtractMetaTagInfo/No_property/name_attribute (0.00s) --- PASS: TestExtractMetaTagInfo/Explicitly_approved_tag_with_property_attribute (0.00s) === RUN FuzzGetTarget === RUN FuzzGetTarget/seed#0 === RUN FuzzGetTarget/seed#1 === RUN FuzzGetTarget/seed#2 === RUN FuzzGetTarget/seed#3 === RUN FuzzGetTarget/seed#4 === RUN FuzzGetTarget/seed#5 === RUN FuzzGetTarget/seed#6 === RUN FuzzGetTarget/seed#7 === RUN FuzzGetTarget/seed#8 === RUN FuzzGetTarget/seed#9 === RUN FuzzGetTarget/seed#10 === RUN FuzzGetTarget/seed#11 === RUN FuzzGetTarget/seed#12 === RUN FuzzGetTarget/seed#13 === RUN FuzzGetTarget/seed#14 --- PASS: FuzzGetTarget (0.00s) --- PASS: FuzzGetTarget/seed#0 (0.00s) --- PASS: FuzzGetTarget/seed#1 (0.00s) --- PASS: FuzzGetTarget/seed#2 (0.00s) --- PASS: FuzzGetTarget/seed#3 (0.00s) --- PASS: FuzzGetTarget/seed#4 (0.00s) --- PASS: FuzzGetTarget/seed#5 (0.00s) --- PASS: FuzzGetTarget/seed#6 (0.00s) --- PASS: FuzzGetTarget/seed#7 (0.00s) --- PASS: FuzzGetTarget/seed#8 (0.00s) --- PASS: FuzzGetTarget/seed#9 (0.00s) --- PASS: FuzzGetTarget/seed#10 (0.00s) --- PASS: FuzzGetTarget/seed#11 (0.00s) --- PASS: FuzzGetTarget/seed#12 (0.00s) --- PASS: FuzzGetTarget/seed#13 (0.00s) --- PASS: FuzzGetTarget/seed#14 (0.00s) === RUN FuzzExtractOGTags === RUN FuzzExtractOGTags/seed#0 === RUN FuzzExtractOGTags/seed#1 === RUN FuzzExtractOGTags/seed#2 === RUN FuzzExtractOGTags/seed#3 === RUN FuzzExtractOGTags/seed#4 === RUN FuzzExtractOGTags/seed#5 === RUN FuzzExtractOGTags/seed#6 === RUN FuzzExtractOGTags/seed#7 === RUN FuzzExtractOGTags/seed#8 === RUN FuzzExtractOGTags/seed#9 === RUN FuzzExtractOGTags/seed#10 === RUN FuzzExtractOGTags/seed#11 === RUN FuzzExtractOGTags/seed#12 === RUN FuzzExtractOGTags/seed#13 === RUN FuzzExtractOGTags/seed#14 === RUN FuzzExtractOGTags/seed#15 === RUN FuzzExtractOGTags/seed#16 === RUN FuzzExtractOGTags/seed#17 === RUN FuzzExtractOGTags/seed#18 === RUN FuzzExtractOGTags/seed#19 === RUN FuzzExtractOGTags/seed#20 === RUN FuzzExtractOGTags/seed#21 --- PASS: FuzzExtractOGTags (0.02s) --- PASS: FuzzExtractOGTags/seed#0 (0.00s) --- PASS: FuzzExtractOGTags/seed#1 (0.00s) --- PASS: FuzzExtractOGTags/seed#2 (0.00s) --- PASS: FuzzExtractOGTags/seed#3 (0.00s) --- PASS: FuzzExtractOGTags/seed#4 (0.00s) --- PASS: FuzzExtractOGTags/seed#5 (0.00s) --- PASS: FuzzExtractOGTags/seed#6 (0.00s) --- PASS: FuzzExtractOGTags/seed#7 (0.00s) --- PASS: FuzzExtractOGTags/seed#8 (0.00s) --- PASS: FuzzExtractOGTags/seed#9 (0.00s) --- PASS: FuzzExtractOGTags/seed#10 (0.00s) --- PASS: FuzzExtractOGTags/seed#11 (0.00s) --- PASS: FuzzExtractOGTags/seed#12 (0.02s) --- PASS: FuzzExtractOGTags/seed#13 (0.00s) --- PASS: FuzzExtractOGTags/seed#14 (0.00s) --- PASS: FuzzExtractOGTags/seed#15 (0.00s) --- PASS: FuzzExtractOGTags/seed#16 (0.00s) --- PASS: FuzzExtractOGTags/seed#17 (0.00s) --- PASS: FuzzExtractOGTags/seed#18 (0.00s) --- PASS: FuzzExtractOGTags/seed#19 (0.00s) --- PASS: FuzzExtractOGTags/seed#20 (0.00s) --- PASS: FuzzExtractOGTags/seed#21 (0.00s) === RUN FuzzGetTargetRoundTrip === RUN FuzzGetTargetRoundTrip/seed#0 === RUN FuzzGetTargetRoundTrip/seed#1 --- PASS: FuzzGetTargetRoundTrip (0.00s) --- PASS: FuzzGetTargetRoundTrip/seed#0 (0.00s) --- PASS: FuzzGetTargetRoundTrip/seed#1 (0.00s) === RUN FuzzExtractMetaTagInfo === RUN FuzzExtractMetaTagInfo/seed#0 === RUN FuzzExtractMetaTagInfo/seed#1 === RUN FuzzExtractMetaTagInfo/seed#2 === RUN FuzzExtractMetaTagInfo/seed#3 === RUN FuzzExtractMetaTagInfo/seed#4 === RUN FuzzExtractMetaTagInfo/seed#5 === RUN FuzzExtractMetaTagInfo/seed#6 --- PASS: FuzzExtractMetaTagInfo (0.00s) --- PASS: FuzzExtractMetaTagInfo/seed#0 (0.00s) --- PASS: FuzzExtractMetaTagInfo/seed#1 (0.00s) --- PASS: FuzzExtractMetaTagInfo/seed#2 (0.00s) --- PASS: FuzzExtractMetaTagInfo/seed#3 (0.00s) --- PASS: FuzzExtractMetaTagInfo/seed#4 (0.00s) --- PASS: FuzzExtractMetaTagInfo/seed#5 (0.00s) --- PASS: FuzzExtractMetaTagInfo/seed#6 (0.00s) PASS ok github.com/TecharoHQ/anubis/internal/ogtags 0.223s === RUN TestPlaywrightBrowser playwright_test.go:222: npx not found in PATH, skipping integration smoke testing: exec: "npx": executable file not found in $PATH --- SKIP: TestPlaywrightBrowser (0.00s) === RUN TestPlaywrightWithBasePrefix playwright_test.go:302: NOTE(Xe)\ these tests require HTTPS support in #364 --- SKIP: TestPlaywrightWithBasePrefix (0.00s) PASS ok github.com/TecharoHQ/anubis/internal/test 0.009s === RUN TestASNChecker asnchecker_test.go:16: using mock thoth === RUN TestASNChecker/{1.1.1.1_true_false} === RUN TestASNChecker/{2.2.2.2_false_false} === RUN TestASNChecker/{taco_false_false} 2025/07/17 11:25:26 ERROR error contacting thoth, please contact support err="ParseAddr(\"taco\"): unable to parse IP" actionable=true === RUN TestASNChecker/{127.0.0.1_false_false} --- PASS: TestASNChecker (0.00s) --- PASS: TestASNChecker/{1.1.1.1_true_false} (0.00s) --- PASS: TestASNChecker/{2.2.2.2_false_false} (0.00s) --- PASS: TestASNChecker/{taco_false_false} (0.00s) --- PASS: TestASNChecker/{127.0.0.1_false_false} (0.00s) === RUN TestGeoIPChecker geoipchecker_test.go:15: using mock thoth === RUN TestGeoIPChecker/{1.1.1.1_true_false} === RUN TestGeoIPChecker/{2.2.2.2_false_false} === RUN TestGeoIPChecker/{taco_false_false} 2025/07/17 11:25:26 ERROR error contacting thoth, please contact support err="ParseAddr(\"taco\"): unable to parse IP" actionable=true === RUN TestGeoIPChecker/{127.0.0.1_false_false} --- PASS: TestGeoIPChecker (0.00s) --- PASS: TestGeoIPChecker/{1.1.1.1_true_false} (0.00s) --- PASS: TestGeoIPChecker/{2.2.2.2_false_false} (0.00s) --- PASS: TestGeoIPChecker/{taco_false_false} (0.00s) --- PASS: TestGeoIPChecker/{127.0.0.1_false_false} (0.00s) === RUN TestNew thoth_test.go:31: using mock thoth --- PASS: TestNew (0.00s) PASS ok github.com/TecharoHQ/anubis/internal/thoth 0.007s ? github.com/TecharoHQ/anubis/internal/thoth/thothmock [no test files] === RUN TestLoadPolicies === RUN TestLoadPolicies/botPolicies.json === RUN TestLoadPolicies/botPolicies.yaml {"time":"2025-07-17T11:25:26.598225453Z","level":"WARN","source":{"function":"github.com/TecharoHQ/anubis/lib/policy.ParseConfig","file":"github.com/TecharoHQ/anubis/lib/policy/policy.go","line":134},"msg":"You have specified a Thoth specific check but you have no Thoth client configured. Please read https://anubis.techaro.lol/docs/admin/thoth for more information","check":"geoip","settings":{"countries":["BR","CN"]}} {"time":"2025-07-17T11:25:26.598273767Z","level":"WARN","source":{"function":"github.com/TecharoHQ/anubis/lib/policy.ParseConfig","file":"github.com/TecharoHQ/anubis/lib/policy/policy.go","line":125},"msg":"You have specified a Thoth specific check but you have no Thoth client configured. Please read https://anubis.techaro.lol/docs/admin/thoth for more information","check":"asn","settings":{"match":[13335,136907,45102]}} --- PASS: TestLoadPolicies (0.03s) --- PASS: TestLoadPolicies/botPolicies.json (0.01s) --- PASS: TestLoadPolicies/botPolicies.yaml (0.01s) === RUN TestCVE2025_24369 {"time":"2025-07-17T11:25:26.615667211Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} {"time":"2025-07-17T11:25:26.628497063Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).MakeChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":375},"msg":"made challenge","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"challenge":{"id":"01981821-d2e4-7628-913e-82b66c7bb691","randomData":"603afe55219f9ebf295465564b87dc667e0181780477be4a48522923d32230109c4783db3cdb4ea36d1f87a1659ed97c52ee60fde5370d44bab1ed48e8205794ed6bc04da206de5413f8537725f19ec676645da8771f4422bb53b97ed82ea364aeefe50c64ad554e8f706d2f79118533c4c40a1e39e6a45f82c4f93dd4f1baa6fff6d19c6e2f6b6af1353fb9b980bded4a8d8f0400b69a0bcbcfc5ef08d3a6c9cb55bfa761cad93d370c7c37ea8dd9a3b3a99c1a0d53f9e587b9da4af0508581fbc6088be2880c00af5c5dfc799b7f1522d52b3d0985f65bd85bbf0aa98299300d2e8edf6c6ee658af1598eb6e7e87311b3f1d2bf05eeb82dcd4e80b4c4dc51f","issuedAt":"2025-07-17T11:25:26.62840955Z","metadata":{"User-Agent":"Go-http-client/1.1","X-Real-Ip":"127.0.0.1"}},"rules":{"algorithm":"fast","difficulty":4,"report_as":4},"cr":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:38197/.within.website/x/cmd/anubis/api/make-challenge?redir=%2F -> techaro.lol-anubis-cookie-verification=01981821-d2e4-7628-913e-82b66c7bb691; Path=/; Expires=Thu, 17 Jul 2025 11:25:26 GMT; SameSite=None anubis_test.go:135: requested cookies for http://127.0.0.1:38197/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=0&redir=%2F&response=555cde7366317bc93a52d36d53dafdb5501b53aa2ea588f8515830ab6a59f1b5 anubis_test.go:138: get cookie: <- techaro.lol-anubis-cookie-verification=01981821-d2e4-7628-913e-82b66c7bb691; Path=/; Expires=Thu, 17 Jul 2025 11:25:26 GMT; SameSite=None {"time":"2025-07-17T11:25:26.62990766Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).PassChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":449},"msg":"challenge validate call failed","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"err":"challenge: error when processing challenge: validate: challenge: user failed challenge: wanted 4 leading zeros but got 555cde7366317bc93a52d36d53dafdb5501b53aa2ea588f8515830ab6a59f1b5"} {"time":"2025-07-17T11:25:26.630132556Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).PassChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":479},"msg":"challenge passed, redirecting to app","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0}} {"time":"2025-07-17T11:25:26.630165301Z","level":"INFO","msg":"http: superfluous response.WriteHeader call from github.com/TecharoHQ/anubis/lib.(*Server).PassChallenge (anubis.go:480)"} anubis_test.go:149: set cookie: http://127.0.0.1:38197/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=0&redir=%2F&response=555cde7366317bc93a52d36d53dafdb5501b53aa2ea588f8515830ab6a59f1b5 -> techaro.lol-anubis-auth=; Path=/; Expires=Thu, 17 Jul 2025 11:24:26 GMT; Max-Age=0; SameSite=None --- PASS: TestCVE2025_24369 (0.03s) === RUN TestCookieCustomExpiration {"time":"2025-07-17T11:25:26.650307445Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} {"time":"2025-07-17T11:25:26.650782334Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).MakeChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":375},"msg":"made challenge","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"challenge":{"id":"01981821-d2fa-7bad-82b3-6c0f2cb43b55","randomData":"8c591b52bdd7185e1b92a71138bf82dc5745e231266b3b3d28e5274aa8736de20efb32e5e151c18908b63d814b4e05e3b56a17a14abb72dd9ee9cae5743ff0500c5787a7556362fa9c26542bb051c47edb1e0f48d36eadb70f765b034686ece68adf0674ac0e0e3b81871e067ae95adedfa38976d8408d99eef2c62df03e58a5f89ca211728625f64731872568733093fd54f18859812f096812d11c83744b6249f1de4836f97b73f27b686380b2606cdd6d3eb5fda38f3db7ec039694e0bed5b8f866401ff792ed24a19a77c4862a2eb2ec34162f297d3b09db18b7a7647a98fcbb146a5ff6730e8bef22231e76956954e9e550b434ae21598c2404b34ebc63","issuedAt":"2025-07-17T11:25:26.650767765Z","metadata":{"User-Agent":"Go-http-client/1.1","X-Real-Ip":"127.0.0.1"}},"rules":{"algorithm":"fast"},"cr":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:33915/.within.website/x/cmd/anubis/api/make-challenge?redir=%2F -> techaro.lol-anubis-cookie-verification=01981821-d2fa-7bad-82b3-6c0f2cb43b55; Path=/; Expires=Thu, 17 Jul 2025 11:35:26 GMT; SameSite=None anubis_test.go:135: requested cookies for http://127.0.0.1:33915/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=0&redir=%2F&response=058b02b9c3c9aad228235d38ea41aecc0b18298899dbcd864edd91e40a3ff3ab anubis_test.go:138: get cookie: <- techaro.lol-anubis-cookie-verification=01981821-d2fa-7bad-82b3-6c0f2cb43b55; Path=/; Expires=Thu, 17 Jul 2025 11:35:26 GMT; SameSite=None {"time":"2025-07-17T11:25:26.650961909Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib/challenge/proofofwork.(*Impl).Validate","file":"github.com/TecharoHQ/anubis/lib/challenge/proofofwork/proofofwork.go","line":83},"msg":"challenge took","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"elapsedTime":420} {"time":"2025-07-17T11:25:26.651055012Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).PassChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":479},"msg":"challenge passed, redirecting to app","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:33915/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=0&redir=%2F&response=058b02b9c3c9aad228235d38ea41aecc0b18298899dbcd864edd91e40a3ff3ab -> techaro.lol-anubis-auth=eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJhY3Rpb24iOiJBTExPVyIsImNoYWxsZW5nZSI6IjAxOTgxODIxLWQyZmEtN2JhZC04MmIzLTZjMGYyY2I0M2I1NSIsImV4cCI6MTc1Mjc1MjEyNiwiaWF0IjoxNzUyNzUxNTI2LCJtZXRob2QiOiJmYXN0IiwibmJmIjoxNzUyNzUxNDY2LCJwb2xpY3lSdWxlIjoiYWM5ODBmNDljNGQzNWZhYiJ9.bvFnUZtOog2dhPaLm8T2RHX-fnDnHZwCGZ8CnhyzM6b0bceVfgZeXIrtiSSneoHUxqUxHtyZoontzEm9QzsdCg; Path=/; Expires=Thu, 17 Jul 2025 11:35:26 GMT; SameSite=None anubis_test.go:235: &http.Cookie{Name:"techaro.lol-anubis-auth", Value:"eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJhY3Rpb24iOiJBTExPVyIsImNoYWxsZW5nZSI6IjAxOTgxODIxLWQyZmEtN2JhZC04MmIzLTZjMGYyY2I0M2I1NSIsImV4cCI6MTc1Mjc1MjEyNiwiaWF0IjoxNzUyNzUxNTI2LCJtZXRob2QiOiJmYXN0IiwibmJmIjoxNzUyNzUxNDY2LCJwb2xpY3lSdWxlIjoiYWM5ODBmNDljNGQzNWZhYiJ9.bvFnUZtOog2dhPaLm8T2RHX-fnDnHZwCGZ8CnhyzM6b0bceVfgZeXIrtiSSneoHUxqUxHtyZoontzEm9QzsdCg", Quoted:false, Path:"/", Domain:"", Expires:time.Date(2025, time.July, 17, 11, 35, 26, 0, time.UTC), RawExpires:"Thu, 17 Jul 2025 11:35:26 GMT", MaxAge:0, Secure:false, HttpOnly:false, SameSite:4, Partitioned:false, Raw:"techaro.lol-anubis-auth=eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJhY3Rpb24iOiJBTExPVyIsImNoYWxsZW5nZSI6IjAxOTgxODIxLWQyZmEtN2JhZC04MmIzLTZjMGYyY2I0M2I1NSIsImV4cCI6MTc1Mjc1MjEyNiwiaWF0IjoxNzUyNzUxNTI2LCJtZXRob2QiOiJmYXN0IiwibmJmIjoxNzUyNzUxNDY2LCJwb2xpY3lSdWxlIjoiYWM5ODBmNDljNGQzNWZhYiJ9.bvFnUZtOog2dhPaLm8T2RHX-fnDnHZwCGZ8CnhyzM6b0bceVfgZeXIrtiSSneoHUxqUxHtyZoontzEm9QzsdCg; Path=/; Expires=Thu, 17 Jul 2025 11:35:26 GMT; SameSite=None", Unparsed:[]string(nil)} --- PASS: TestCookieCustomExpiration (0.02s) === RUN TestCookieSettings {"time":"2025-07-17T11:25:26.668823945Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} {"time":"2025-07-17T11:25:26.669355758Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).MakeChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":375},"msg":"made challenge","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"challenge":{"id":"01981821-d30d-7506-b04a-bb9e7f5e9542","randomData":"16934470ec10750745610a97d0b1cc6c6e162eae3590b794e5df5971e142873f2793b69fb82ee7c08499a10a8f61c06cbf9f907f95eff9966ed8420c186613c8b9978caf4e9bf3ed440bdd7024fe9736551082db040e0edcc409c332a0169a4ca998d0eaba5b993e5b5097a1e83301311504e69c6ac248454bbe92cdf9509a852c17da88915cec351a9a18944f56b2c28b4369eb7563b1c2198655ea8df2e6498ef96046775946ce715a8432b7508697eb1d40d82bf7fcf482404690e6b974a71671176ae5fe81070cad7b20192aa72f4beaa526d7a989a65b9e5fecc1b7f8253ecfca9b7fa5706058236967e08bbbcd46a6009b59798ab8b971b3ffcdaca751","issuedAt":"2025-07-17T11:25:26.66933347Z","metadata":{"User-Agent":"Go-http-client/1.1","X-Real-Ip":"127.0.0.1"}},"rules":{"algorithm":"fast"},"cr":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:34731/.within.website/x/cmd/anubis/api/make-challenge?redir=%2F -> techaro.lol-anubis-cookie-verification=01981821-d30d-7506-b04a-bb9e7f5e9542; Path=/; Domain=127.0.0.1; Expires=Thu, 24 Jul 2025 11:25:26 GMT; Secure; SameSite=None; Partitioned anubis_test.go:135: requested cookies for http://127.0.0.1:34731/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=0&redir=%2F&response=ab03770ca65224a7c49f103989da33169c5720f878ddb100d24eece4fb7999a5 anubis_test.go:138: get cookie: <- techaro.lol-anubis-cookie-verification=01981821-d30d-7506-b04a-bb9e7f5e9542; Path=/; Domain=127.0.0.1; Expires=Thu, 24 Jul 2025 11:25:26 GMT; Secure; SameSite=None; Partitioned {"time":"2025-07-17T11:25:26.669767787Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib/challenge/proofofwork.(*Impl).Validate","file":"github.com/TecharoHQ/anubis/lib/challenge/proofofwork/proofofwork.go","line":83},"msg":"challenge took","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"elapsedTime":420} {"time":"2025-07-17T11:25:26.669870676Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).PassChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":479},"msg":"challenge passed, redirecting to app","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:34731/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=0&redir=%2F&response=ab03770ca65224a7c49f103989da33169c5720f878ddb100d24eece4fb7999a5 -> techaro.lol-anubis-auth=eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJhY3Rpb24iOiJBTExPVyIsImNoYWxsZW5nZSI6IjAxOTgxODIxLWQzMGQtNzUwNi1iMDRhLWJiOWU3ZjVlOTU0MiIsImV4cCI6MTc1MzM1NjMyNiwiaWF0IjoxNzUyNzUxNTI2LCJtZXRob2QiOiJmYXN0IiwibmJmIjoxNzUyNzUxNDY2LCJwb2xpY3lSdWxlIjoiYWM5ODBmNDljNGQzNWZhYiJ9.v-XEmcsf76dzSluErDnuIVh20Y4_un-DtEo2rfTlAkZGLiaBjNGlXbXbkvS6I9qQST-G4dVrIc_wden6QJ5fCg; Path=/; Domain=127.0.0.1; Expires=Thu, 24 Jul 2025 11:25:26 GMT; Secure; SameSite=None; Partitioned anubis_test.go:286: &http.Cookie{Name:"techaro.lol-anubis-auth", Value:"eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJhY3Rpb24iOiJBTExPVyIsImNoYWxsZW5nZSI6IjAxOTgxODIxLWQzMGQtNzUwNi1iMDRhLWJiOWU3ZjVlOTU0MiIsImV4cCI6MTc1MzM1NjMyNiwiaWF0IjoxNzUyNzUxNTI2LCJtZXRob2QiOiJmYXN0IiwibmJmIjoxNzUyNzUxNDY2LCJwb2xpY3lSdWxlIjoiYWM5ODBmNDljNGQzNWZhYiJ9.v-XEmcsf76dzSluErDnuIVh20Y4_un-DtEo2rfTlAkZGLiaBjNGlXbXbkvS6I9qQST-G4dVrIc_wden6QJ5fCg", Quoted:false, Path:"/", Domain:"127.0.0.1", Expires:time.Date(2025, time.July, 24, 11, 25, 26, 0, time.UTC), RawExpires:"Thu, 24 Jul 2025 11:25:26 GMT", MaxAge:0, Secure:true, HttpOnly:false, SameSite:4, Partitioned:true, Raw:"techaro.lol-anubis-auth=eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJhY3Rpb24iOiJBTExPVyIsImNoYWxsZW5nZSI6IjAxOTgxODIxLWQzMGQtNzUwNi1iMDRhLWJiOWU3ZjVlOTU0MiIsImV4cCI6MTc1MzM1NjMyNiwiaWF0IjoxNzUyNzUxNTI2LCJtZXRob2QiOiJmYXN0IiwibmJmIjoxNzUyNzUxNDY2LCJwb2xpY3lSdWxlIjoiYWM5ODBmNDljNGQzNWZhYiJ9.v-XEmcsf76dzSluErDnuIVh20Y4_un-DtEo2rfTlAkZGLiaBjNGlXbXbkvS6I9qQST-G4dVrIc_wden6QJ5fCg; Path=/; Domain=127.0.0.1; Expires=Thu, 24 Jul 2025 11:25:26 GMT; Secure; SameSite=None; Partitioned", Unparsed:[]string(nil)} --- PASS: TestCookieSettings (0.02s) === RUN TestCheckDefaultDifficultyMatchesPolicy === RUN TestCheckDefaultDifficultyMatchesPolicy/1 {"time":"2025-07-17T11:25:26.681416412Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} anubis_test.go:349: default/allow === RUN TestCheckDefaultDifficultyMatchesPolicy/2 {"time":"2025-07-17T11:25:26.697891989Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} anubis_test.go:349: default/allow === RUN TestCheckDefaultDifficultyMatchesPolicy/3 {"time":"2025-07-17T11:25:26.70567047Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} anubis_test.go:349: default/allow === RUN TestCheckDefaultDifficultyMatchesPolicy/4 {"time":"2025-07-17T11:25:26.713537224Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} anubis_test.go:349: default/allow === RUN TestCheckDefaultDifficultyMatchesPolicy/5 {"time":"2025-07-17T11:25:26.72187487Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} anubis_test.go:349: default/allow === RUN TestCheckDefaultDifficultyMatchesPolicy/6 {"time":"2025-07-17T11:25:26.735764076Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} anubis_test.go:349: default/allow === RUN TestCheckDefaultDifficultyMatchesPolicy/7 {"time":"2025-07-17T11:25:26.749937449Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} anubis_test.go:349: default/allow === RUN TestCheckDefaultDifficultyMatchesPolicy/8 {"time":"2025-07-17T11:25:26.758341973Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} anubis_test.go:349: default/allow === RUN TestCheckDefaultDifficultyMatchesPolicy/9 {"time":"2025-07-17T11:25:26.767201584Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} anubis_test.go:349: default/allow --- PASS: TestCheckDefaultDifficultyMatchesPolicy (0.10s) --- PASS: TestCheckDefaultDifficultyMatchesPolicy/1 (0.01s) --- PASS: TestCheckDefaultDifficultyMatchesPolicy/2 (0.02s) --- PASS: TestCheckDefaultDifficultyMatchesPolicy/3 (0.01s) --- PASS: TestCheckDefaultDifficultyMatchesPolicy/4 (0.01s) --- PASS: TestCheckDefaultDifficultyMatchesPolicy/5 (0.01s) --- PASS: TestCheckDefaultDifficultyMatchesPolicy/6 (0.01s) --- PASS: TestCheckDefaultDifficultyMatchesPolicy/7 (0.01s) --- PASS: TestCheckDefaultDifficultyMatchesPolicy/8 (0.01s) --- PASS: TestCheckDefaultDifficultyMatchesPolicy/9 (0.01s) === RUN TestBasePrefix === RUN TestBasePrefix/no_prefix {"time":"2025-07-17T11:25:26.79264797Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} {"time":"2025-07-17T11:25:26.797256432Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).MakeChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":375},"msg":"made challenge","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"challenge":{"id":"01981821-d38d-734e-bbc5-69219037103e","randomData":"cb3167a4862f0f90b8891dc2d0096d59730d5ef07e0421826c67eb1cb7c8ca4e59c7bedf02c86292c9fe68a09294c24ae63fc580d08c59eb0181f39492d4c8f553e26b3c8d732020514618844d4d7182de45458a997ae0203d57742e574aad1cf257f1b539e9bd9b66bf5853f170407b9c392089ff62bc440b06d40ebd7046500916220d54fa1270758f097a01595d6d4bf2b5ec421d53ec07b7eb72f608c9d5e788ab007d7c312d47af47583d70f50771b68162e8a718fb3ff6269a8aad82306c42adfa85c1461da4e3101fccab87c07cc4114e3fe944b9702252bcc9019f77dfb3031b41eb4d32fa1c9b1afcf5c48af0b07c7bc8e19fa9cd0f0351d166e9d0","issuedAt":"2025-07-17T11:25:26.797222399Z","metadata":{"User-Agent":"Go-http-client/1.1","X-Real-Ip":"127.0.0.1"}},"rules":{"algorithm":"fast","difficulty":4,"report_as":4},"cr":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:43143/.within.website/x/cmd/anubis/api/make-challenge?redir=%2F -> techaro.lol-anubis-cookie-verification=01981821-d38d-734e-bbc5-69219037103e; Path=/; Expires=Thu, 17 Jul 2025 11:25:26 GMT; SameSite=None anubis_test.go:135: requested cookies for http://127.0.0.1:43143/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=13601&redir=%2F&response=0000ead7e895144a35d752c56e241ad050e1b8809b69443c4575a626ff122074 anubis_test.go:138: get cookie: <- techaro.lol-anubis-cookie-verification=01981821-d38d-734e-bbc5-69219037103e; Path=/; Expires=Thu, 17 Jul 2025 11:25:26 GMT; SameSite=None {"time":"2025-07-17T11:25:26.881015261Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib/challenge/proofofwork.(*Impl).Validate","file":"github.com/TecharoHQ/anubis/lib/challenge/proofofwork/proofofwork.go","line":83},"msg":"challenge took","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"elapsedTime":420} {"time":"2025-07-17T11:25:26.881158711Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).PassChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":479},"msg":"challenge passed, redirecting to app","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:43143/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=13601&redir=%2F&response=0000ead7e895144a35d752c56e241ad050e1b8809b69443c4575a626ff122074 -> techaro.lol-anubis-auth=eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJhY3Rpb24iOiJBTExPVyIsImNoYWxsZW5nZSI6IjAxOTgxODIxLWQzOGQtNzM0ZS1iYmM1LTY5MjE5MDM3MTAzZSIsImV4cCI6MTc1Mjc1MTUyNiwiaWF0IjoxNzUyNzUxNTI2LCJtZXRob2QiOiJmYXN0IiwibmJmIjoxNzUyNzUxNDY2LCJwb2xpY3lSdWxlIjoiYWM5ODBmNDljNGQzNWZhYiJ9.7PYjdiEC9sGEnvYMhkhtMbY6Yua3wV0ye6jJIwFo6EWTChPldeuD0U_20bs3b1zkLPG3olt3BmN1Q-1FceaICA; Path=/; Expires=Thu, 17 Jul 2025 11:25:26 GMT; SameSite=None === RUN TestBasePrefix/with_prefix {"time":"2025-07-17T11:25:26.894649178Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} {"time":"2025-07-17T11:25:26.895145728Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).MakeChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":375},"msg":"made challenge","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"challenge":{"id":"01981821-d3ef-71cd-bb9d-bd9308db5a63","randomData":"30662b62dd8313f5669ed782ecf2e3e6af3a83e264559df2f8b5cf872cd4d9d4e06a8b3d759df584c2dde2d44a83258863975ad168a2eeb13330e9afd0bd696dfad73e3246ee98c907d50041f89f6e3a5e09654f689a9b21304f52ca8df570c2791c4947f6712fb443ad59c114d5edf71c3e40f52f385504ab6e50a2de4057edde1e9e7176e1bcd0059b08e5deb016c49602c7ec93d886fa4724c9aac812923a8e60a5c372a000c4a858e4e34d94673d1e2d6e6af46519174ee917de9223349f78f8b802389d3eda63d48de9c0514a69b8010cb3a2a974b3f68a3be094ed797791b8e2c7ea98a74742e3ba787c62c7e02efc983dc6f05ba4fa834f6def2e4e26","issuedAt":"2025-07-17T11:25:26.895122849Z","metadata":{"User-Agent":"Go-http-client/1.1","X-Real-Ip":"127.0.0.1"}},"rules":{"algorithm":"fast","difficulty":4,"report_as":4},"cr":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:33749/myapp/.within.website/x/cmd/anubis/api/make-challenge?redir=%2Fmyapp -> techaro.lol-anubis-cookie-verification=01981821-d3ef-71cd-bb9d-bd9308db5a63; Path=/; Expires=Thu, 17 Jul 2025 11:25:26 GMT; SameSite=None anubis_test.go:135: requested cookies for http://127.0.0.1:33749/myapp/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=11001&redir=%2F&response=00004b63929a7637204919b81e216e33008b31a580b0b72a732f65f180fb476a anubis_test.go:138: get cookie: <- techaro.lol-anubis-cookie-verification=01981821-d3ef-71cd-bb9d-bd9308db5a63; Path=/; Expires=Thu, 17 Jul 2025 11:25:26 GMT; SameSite=None {"time":"2025-07-17T11:25:26.918724494Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib/challenge/proofofwork.(*Impl).Validate","file":"github.com/TecharoHQ/anubis/lib/challenge/proofofwork/proofofwork.go","line":83},"msg":"challenge took","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"elapsedTime":420} {"time":"2025-07-17T11:25:26.918824115Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).PassChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":479},"msg":"challenge passed, redirecting to app","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:33749/myapp/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=11001&redir=%2F&response=00004b63929a7637204919b81e216e33008b31a580b0b72a732f65f180fb476a -> techaro.lol-anubis-auth=eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJhY3Rpb24iOiJBTExPVyIsImNoYWxsZW5nZSI6IjAxOTgxODIxLWQzZWYtNzFjZC1iYjlkLWJkOTMwOGRiNWE2MyIsImV4cCI6MTc1Mjc1MTUyNiwiaWF0IjoxNzUyNzUxNTI2LCJtZXRob2QiOiJmYXN0IiwibmJmIjoxNzUyNzUxNDY2LCJwb2xpY3lSdWxlIjoiYWM5ODBmNDljNGQzNWZhYiJ9.awU8C5dGE0WeI_Q0PLUP74zdQGHRx2ShFLjfrdgh6XW5e3VtZjDFGvSM97ulq9gh_Km6S7rHDCsTo94ZF1XrBA; Path=/myapp/; Expires=Thu, 17 Jul 2025 11:25:26 GMT; SameSite=None === RUN TestBasePrefix/with_prefix_and_trailing_slash {"time":"2025-07-17T11:25:26.931858025Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} {"time":"2025-07-17T11:25:26.938533122Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).MakeChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":375},"msg":"made challenge","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"challenge":{"id":"01981821-d41a-77bd-8118-cb9ad4d203e5","randomData":"e62b7e52989bfd93eddb1285b06871eb360d50c5c91608d0ac6bfc903f434da85c5fd0388ab57d0ddcc99ea1e36687d5b533fdd4069326a37046fd640648d80a4fa8cf4c7e11d3b2c546b014c4c95adc2751e2917f900333c458f278e15ac09c7f2ca1940c591391baf652276d2c6ae8275ee128a3864e64ef23d57e7aae0b63336243ec4dbf363ddfc7fb63672b71cf447d30eef5a1f7468009eb833fe49090c70b24940af0a6f672d995697be27b94a58c080b360441496c96cf9a764b5fc335ce85cb60c23b25becc913b50a622f28ca2122b922e89ab44a4dda58669add718a68a550eb0df71c273cf2dbe2240cde01cd9b615e4057a4ff4681436ccadba","issuedAt":"2025-07-17T11:25:26.938512679Z","metadata":{"User-Agent":"Go-http-client/1.1","X-Real-Ip":"127.0.0.1"}},"rules":{"algorithm":"fast","difficulty":4,"report_as":4},"cr":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:36043/myapp/.within.website/x/cmd/anubis/api/make-challenge?redir=%2Fmyapp%2F -> techaro.lol-anubis-cookie-verification=01981821-d41a-77bd-8118-cb9ad4d203e5; Path=/; Expires=Thu, 17 Jul 2025 11:25:26 GMT; SameSite=None anubis_test.go:135: requested cookies for http://127.0.0.1:36043/myapp/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=8330&redir=%2F&response=0000d524375727bd8cbf73c71f721170778bcf2aa25a8eb635c4e4b5878ba092 anubis_test.go:138: get cookie: <- techaro.lol-anubis-cookie-verification=01981821-d41a-77bd-8118-cb9ad4d203e5; Path=/; Expires=Thu, 17 Jul 2025 11:25:26 GMT; SameSite=None {"time":"2025-07-17T11:25:26.962003217Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib/challenge/proofofwork.(*Impl).Validate","file":"github.com/TecharoHQ/anubis/lib/challenge/proofofwork/proofofwork.go","line":83},"msg":"challenge took","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"elapsedTime":420} {"time":"2025-07-17T11:25:26.962102723Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).PassChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":479},"msg":"challenge passed, redirecting to app","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:36043/myapp/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=8330&redir=%2F&response=0000d524375727bd8cbf73c71f721170778bcf2aa25a8eb635c4e4b5878ba092 -> techaro.lol-anubis-auth=eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJhY3Rpb24iOiJBTExPVyIsImNoYWxsZW5nZSI6IjAxOTgxODIxLWQ0MWEtNzdiZC04MTE4LWNiOWFkNGQyMDNlNSIsImV4cCI6MTc1Mjc1MTUyNiwiaWF0IjoxNzUyNzUxNTI2LCJtZXRob2QiOiJmYXN0IiwibmJmIjoxNzUyNzUxNDY2LCJwb2xpY3lSdWxlIjoiYWM5ODBmNDljNGQzNWZhYiJ9.OvEynD6ffsUsAd55W7L7SD7GzXGlZyywHzL3v5bndlsBY8LvxLo2xHlV9MD1F_dMXnPf3SK40ps-c9nOkCwhDg; Path=/myapp/; Expires=Thu, 17 Jul 2025 11:25:26 GMT; SameSite=None --- PASS: TestBasePrefix (0.20s) --- PASS: TestBasePrefix/no_prefix (0.11s) --- PASS: TestBasePrefix/with_prefix (0.04s) --- PASS: TestBasePrefix/with_prefix_and_trailing_slash (0.05s) === RUN TestCustomStatusCodes {"time":"2025-07-17T11:25:26.965070788Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} === RUN TestCustomStatusCodes/ALLOW {"time":"2025-07-17T11:25:26.965470958Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).checkRules","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":249},"msg":"allowing traffic to origin (explicit)","user_agent":"ALLOW","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0}} === NAME TestCustomStatusCodes anubis_test.go:515: ALLOW === RUN TestCustomStatusCodes/CHALLENGE {"time":"2025-07-17T11:25:26.965700036Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).checkRules","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":266},"msg":"challenge requested","user_agent":"CHALLENGE","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"bot/challenge","rule":"CHALLENGE","weight":0}} {"time":"2025-07-17T11:25:26.965709591Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).maybeReverseProxy","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":182},"msg":"cookie not found","user_agent":"CHALLENGE","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"bot/challenge","rule":"CHALLENGE","weight":0},"path":"/"} === RUN TestCustomStatusCodes/DENY {"time":"2025-07-17T11:25:26.9666207Z","level":"INFO","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).checkRules","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":254},"msg":"explicit deny","user_agent":"DENY","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"bot/deny","rule":"DENY","weight":0}} {"time":"2025-07-17T11:25:26.96663048Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).checkRules","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":262},"msg":"rule hash","user_agent":"DENY","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"bot/deny","rule":"DENY","weight":0},"hash":"484487c000d57854"} --- PASS: TestCustomStatusCodes (0.00s) --- PASS: TestCustomStatusCodes/ALLOW (0.00s) --- PASS: TestCustomStatusCodes/CHALLENGE (0.00s) --- PASS: TestCustomStatusCodes/DENY (0.00s) === RUN TestCloudflareWorkersRule === RUN TestCloudflareWorkersRule/cel {"time":"2025-07-17T11:25:26.968156996Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} === RUN TestCloudflareWorkersRule/cel/with-cf-worker-header === RUN TestCloudflareWorkersRule/cel/no-cf-worker-header === RUN TestCloudflareWorkersRule/header {"time":"2025-07-17T11:25:26.969051522Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} === RUN TestCloudflareWorkersRule/header/with-cf-worker-header === RUN TestCloudflareWorkersRule/header/no-cf-worker-header --- PASS: TestCloudflareWorkersRule (0.00s) --- PASS: TestCloudflareWorkersRule/cel (0.00s) --- PASS: TestCloudflareWorkersRule/cel/with-cf-worker-header (0.00s) --- PASS: TestCloudflareWorkersRule/cel/no-cf-worker-header (0.00s) --- PASS: TestCloudflareWorkersRule/header (0.00s) --- PASS: TestCloudflareWorkersRule/header/with-cf-worker-header (0.00s) --- PASS: TestCloudflareWorkersRule/header/no-cf-worker-header (0.00s) === RUN TestRuleChange {"time":"2025-07-17T11:25:26.969739066Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} {"time":"2025-07-17T11:25:26.970320373Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).MakeChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":375},"msg":"made challenge","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"challenge":{"id":"01981821-d43a-7474-b359-e8a69750770a","randomData":"bf29ec495444bef6b801185a8bcc38ccfdb069f1660df806a898b3e882b01909cc84011259a5b66c6b69ff1ad87924892791dd91f91bd90a41e5811a39c854cc0c4872942891633ee76823e777b836e53aaeac62a89de59152a6dd5033d27fe22a0dbfd2dea7304de15defc6d899156b3c9d8c752a4572c0d69dab4f73831d734e2242def76c0d94d1c59d06641ea3a154f3b12de2921c24ecd61205750986c08341083ebb077c026103f1fd1af893c44cafeb0dfb664ca65101b23d4ee934566f64a8984e5a1aa0b15b9751fe051b22c7c1fd21339676beea3cf4db0229f68134111314b805d849bcbea5c7a8f2998f8bdef00bc2b5aeae942ccec662b546bb","issuedAt":"2025-07-17T11:25:26.970295946Z","metadata":{"User-Agent":"Go-http-client/1.1","X-Real-Ip":"127.0.0.1"}},"rules":{"algorithm":"fast"},"cr":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:45627/.within.website/x/cmd/anubis/api/make-challenge?redir=%2F -> techaro.lol-anubis-cookie-verification=01981821-d43a-7474-b359-e8a69750770a; Path=/; Domain=127.0.0.1; Expires=Thu, 17 Jul 2025 11:35:26 GMT; SameSite=None anubis_test.go:135: requested cookies for http://127.0.0.1:45627/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=0&redir=%2F&response=b13adfc3b5dcc1e3ee9736915bfb8f3a8f54973eab78d87266a7140616ef5d04 anubis_test.go:138: get cookie: <- techaro.lol-anubis-cookie-verification=01981821-d43a-7474-b359-e8a69750770a; Path=/; Domain=127.0.0.1; Expires=Thu, 17 Jul 2025 11:35:26 GMT; SameSite=None {"time":"2025-07-17T11:25:26.970625112Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib/challenge/proofofwork.(*Impl).Validate","file":"github.com/TecharoHQ/anubis/lib/challenge/proofofwork/proofofwork.go","line":83},"msg":"challenge took","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0},"elapsedTime":420} {"time":"2025-07-17T11:25:26.970728741Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.(*Server).PassChallenge","file":"github.com/TecharoHQ/anubis/lib/anubis.go","line":479},"msg":"challenge passed, redirecting to app","user_agent":"Go-http-client/1.1","accept_language":"","priority":"","x-forwarded-for":"","x-real-ip":"127.0.0.1","check_result":{"name":"default/allow","rule":"ALLOW","weight":0}} anubis_test.go:149: set cookie: http://127.0.0.1:45627/.within.website/x/cmd/anubis/api/pass-challenge?elapsedTime=420&nonce=0&redir=%2F&response=b13adfc3b5dcc1e3ee9736915bfb8f3a8f54973eab78d87266a7140616ef5d04 -> techaro.lol-anubis-auth=eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJhY3Rpb24iOiJBTExPVyIsImNoYWxsZW5nZSI6IjAxOTgxODIxLWQ0M2EtNzQ3NC1iMzU5LWU4YTY5NzUwNzcwYSIsImV4cCI6MTc1Mjc1MjEyNiwiaWF0IjoxNzUyNzUxNTI2LCJtZXRob2QiOiJmYXN0IiwibmJmIjoxNzUyNzUxNDY2LCJwb2xpY3lSdWxlIjoiYWM5ODBmNDljNGQzNWZhYiJ9.VURoT7qzOHlXM29gZcpMdODfL_EYEmMT_30iqQ7IwpCXzJL8pRwE8L49zuYmUM4eI8-UEuMsg2Q5NMgTbh8xCg; Path=/; Domain=127.0.0.1; Expires=Thu, 17 Jul 2025 11:35:26 GMT; SameSite=None --- PASS: TestRuleChange (0.00s) === RUN TestStripBasePrefixFromRequest === RUN TestStripBasePrefixFromRequest/strip_disabled_-_no_change === RUN TestStripBasePrefixFromRequest/strip_enabled_-_removes_prefix === RUN TestStripBasePrefixFromRequest/strip_enabled_-_root_becomes_slash === RUN TestStripBasePrefixFromRequest/strip_enabled_-_trailing_slash_on_base_prefix === RUN TestStripBasePrefixFromRequest/strip_enabled_-_no_prefix_match === RUN TestStripBasePrefixFromRequest/strip_enabled_-_empty_base_prefix === RUN TestStripBasePrefixFromRequest/strip_enabled_-_nested_path === RUN TestStripBasePrefixFromRequest/strip_enabled_-_exact_match_becomes_root --- PASS: TestStripBasePrefixFromRequest (0.00s) --- PASS: TestStripBasePrefixFromRequest/strip_disabled_-_no_change (0.00s) --- PASS: TestStripBasePrefixFromRequest/strip_enabled_-_removes_prefix (0.00s) --- PASS: TestStripBasePrefixFromRequest/strip_enabled_-_root_becomes_slash (0.00s) --- PASS: TestStripBasePrefixFromRequest/strip_enabled_-_trailing_slash_on_base_prefix (0.00s) --- PASS: TestStripBasePrefixFromRequest/strip_enabled_-_no_prefix_match (0.00s) --- PASS: TestStripBasePrefixFromRequest/strip_enabled_-_empty_base_prefix (0.00s) --- PASS: TestStripBasePrefixFromRequest/strip_enabled_-_nested_path (0.00s) --- PASS: TestStripBasePrefixFromRequest/strip_enabled_-_exact_match_becomes_root (0.00s) === RUN TestInvalidChallengeMethod --- PASS: TestInvalidChallengeMethod (0.00s) === RUN TestBadConfigs === RUN TestBadConfigs/badregexes.json config_test.go:32: can't parse policy file policy/config/testdata/bad/badregexes.json: config is not valid: bot 0: config: bot entry for "path-bad" is not valid: config.Bot: invalid path regex error parsing regexp: missing closing ): `a(b` bot 1: config: bot entry for "user-agent-bad" is not valid: config.Bot: invalid user agent regex error parsing regexp: missing closing ): `a(b` bot 2: config: bot entry for "headers-bad" is not valid: config.Bot: must set either user_agent_regex, path_regex, headers_regex, or remote_addresses === RUN TestBadConfigs/badregexes.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/badregexes.yaml: config is not valid: bot 0: config: bot entry for "path-bad" is not valid: config.Bot: invalid path regex error parsing regexp: missing closing ): `a(b` bot 1: config: bot entry for "user-agent-bad" is not valid: config.Bot: invalid user agent regex error parsing regexp: missing closing ): `a(b` === RUN TestBadConfigs/import_and_bot.json config_test.go:32: can't parse policy file policy/config/testdata/bad/import_and_bot.json: config is not valid: bot 0: config.BotOrImport: can't set bot rules and import values at the same time === RUN TestBadConfigs/import_and_bot.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/import_and_bot.yaml: config is not valid: bot 0: config.BotOrImport: can't set bot rules and import values at the same time === RUN TestBadConfigs/import_invalid_file.json config_test.go:32: can't parse policy file policy/config/testdata/bad/import_invalid_file.json: config is not valid: bot 0: config.ImportStatement: invalid source file: (data)/does-not-exist-fake-file.yaml: open does-not-exist-fake-file.yaml: file does not exist === RUN TestBadConfigs/import_invalid_file.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/import_invalid_file.yaml: config is not valid: bot 0: config.ImportStatement: invalid source file: (data)/does-not-exist-fake-file.yaml: open does-not-exist-fake-file.yaml: file does not exist === RUN TestBadConfigs/impressum-no-footer.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/impressum-no-footer.yaml: errors validating policy config policy/config/testdata/bad/impressum-no-footer.yaml: config: missing value: impressum footer must be defined === RUN TestBadConfigs/impressum-no-page-contents.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/impressum-no-page-contents.yaml: errors validating policy config policy/config/testdata/bad/impressum-no-page-contents.yaml: config: missing value: impressum page title must be defined config: missing value: impressum body title must be defined === RUN TestBadConfigs/invalid.json config_test.go:32: can't parse policy file policy/config/testdata/bad/invalid.json: config is not valid: bot 0: config.BotOrImport: rule definition is invalid, you must set either bot rules or an import statement, not both === RUN TestBadConfigs/invalid.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/invalid.yaml: config is not valid: config: must define at least one (1) bot rule === RUN TestBadConfigs/multiple_expression_types.json config_test.go:32: can't parse policy file policy/config/testdata/bad/multiple_expression_types.json: config is not valid: bot 0: config: bot entry for "multiple-expression-types" is not valid: config: expression block can't contain multiple expression types === RUN TestBadConfigs/multiple_expression_types.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/multiple_expression_types.yaml: config is not valid: bot 0: config: bot entry for "multiple-expression-types" is not valid: config: expression block can't contain multiple expression types === RUN TestBadConfigs/nobots.json config_test.go:32: can't parse policy file policy/config/testdata/bad/nobots.json: config is not valid: config: must define at least one (1) bot rule === RUN TestBadConfigs/nobots.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/nobots.yaml: config is not valid: config: must define at least one (1) bot rule === RUN TestBadConfigs/opengraph_bad_ttl.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/opengraph_bad_ttl.yaml: config is not valid: config.OpenGraph: invalid OpenGraph configuration config.OpenGraph: ttl does not parse as a Duration, see https://pkg.go.dev/time#ParseDuration (formatted like 5m -> 5 minutes, 2h -> 2 hours, etc): ParseDuration("taco") returned: time: invalid duration "taco" === RUN TestBadConfigs/regex_ends_newline.json config_test.go:32: can't parse policy file policy/config/testdata/bad/regex_ends_newline.json: config is not valid: bot 0: config: bot entry for "user-agent-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): user agent regex: "Mozilla\n" bot 1: config: bot entry for "path-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): path regex: "^/evil/.*$\n" bot 2: config: bot entry for "headers-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): header CF-Worker regex: ".*\n" === RUN TestBadConfigs/regex_ends_newline.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/regex_ends_newline.yaml: config is not valid: bot 0: config: bot entry for "user-agent-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): user agent regex: "Mozilla\n" bot 1: config: bot entry for "path-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): path regex: "^/evil/.*$\n" bot 2: config: bot entry for "headers-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): header CF-Worker regex: ".*\n" === RUN TestBadConfigs/status-codes-0.json config_test.go:32: can't parse policy file policy/config/testdata/bad/status-codes-0.json: config is not valid: status codes not valid: config.StatusCode: status code not valid, must be between 100 and 599: challenge is 0 config.StatusCode: status code not valid, must be between 100 and 599: deny is 0 === RUN TestBadConfigs/status-codes-0.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/status-codes-0.yaml: config is not valid: status codes not valid: config.StatusCode: status code not valid, must be between 100 and 599: challenge is 0 config.StatusCode: status code not valid, must be between 100 and 599: deny is 0 === RUN TestBadConfigs/threshold-challenge-without-challenge.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/threshold-challenge-without-challenge.yaml: config is not valid: threshold 0: config: threshold entry for "extreme-suspicion" is not valid: config.Threshold: a threshold cannot have the WEIGH action === RUN TestBadConfigs/thresholds.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/thresholds.yaml: config is not valid: threshold 0: config: threshold entry for "extreme-suspicion" is not valid: config.Threshold: a threshold cannot have the WEIGH action === RUN TestBadConfigs/unparseable.json config_test.go:32: can't parse policy file policy/config/testdata/bad/unparseable.json: can't parse policy config YAML policy/config/testdata/bad/unparseable.json: error converting YAML to JSON: yaml: did not find expected node content === RUN TestBadConfigs/unparseable.yaml config_test.go:32: can't parse policy file policy/config/testdata/bad/unparseable.yaml: can't parse policy config YAML policy/config/testdata/bad/unparseable.yaml: error converting YAML to JSON: yaml: did not find expected node content --- PASS: TestBadConfigs (0.01s) --- PASS: TestBadConfigs/badregexes.json (0.00s) --- PASS: TestBadConfigs/badregexes.yaml (0.00s) --- PASS: TestBadConfigs/import_and_bot.json (0.00s) --- PASS: TestBadConfigs/import_and_bot.yaml (0.00s) --- PASS: TestBadConfigs/import_invalid_file.json (0.00s) --- PASS: TestBadConfigs/import_invalid_file.yaml (0.00s) --- PASS: TestBadConfigs/impressum-no-footer.yaml (0.00s) --- PASS: TestBadConfigs/impressum-no-page-contents.yaml (0.00s) --- PASS: TestBadConfigs/invalid.json (0.00s) --- PASS: TestBadConfigs/invalid.yaml (0.00s) --- PASS: TestBadConfigs/multiple_expression_types.json (0.00s) --- PASS: TestBadConfigs/multiple_expression_types.yaml (0.00s) --- PASS: TestBadConfigs/nobots.json (0.00s) --- PASS: TestBadConfigs/nobots.yaml (0.00s) --- PASS: TestBadConfigs/opengraph_bad_ttl.yaml (0.00s) --- PASS: TestBadConfigs/regex_ends_newline.json (0.00s) --- PASS: TestBadConfigs/regex_ends_newline.yaml (0.00s) --- PASS: TestBadConfigs/status-codes-0.json (0.00s) --- PASS: TestBadConfigs/status-codes-0.yaml (0.00s) --- PASS: TestBadConfigs/threshold-challenge-without-challenge.yaml (0.00s) --- PASS: TestBadConfigs/thresholds.yaml (0.00s) --- PASS: TestBadConfigs/unparseable.json (0.00s) --- PASS: TestBadConfigs/unparseable.yaml (0.00s) === RUN TestGoodConfigs === RUN TestGoodConfigs/allow_everyone.json === RUN TestGoodConfigs/allow_everyone.json/with-thoth === RUN TestGoodConfigs/allow_everyone.json/without-thoth === RUN TestGoodConfigs/allow_everyone.yaml === RUN TestGoodConfigs/allow_everyone.yaml/with-thoth === RUN TestGoodConfigs/allow_everyone.yaml/without-thoth === RUN TestGoodConfigs/block_cf_workers.json === RUN TestGoodConfigs/block_cf_workers.json/with-thoth === RUN TestGoodConfigs/block_cf_workers.json/without-thoth === RUN TestGoodConfigs/block_cf_workers.yaml === RUN TestGoodConfigs/block_cf_workers.yaml/with-thoth === RUN TestGoodConfigs/block_cf_workers.yaml/without-thoth === RUN TestGoodConfigs/challenge_cloudflare.yaml === RUN TestGoodConfigs/challenge_cloudflare.yaml/with-thoth === RUN TestGoodConfigs/challenge_cloudflare.yaml/without-thoth {"time":"2025-07-17T11:25:26.979967339Z","level":"WARN","source":{"function":"github.com/TecharoHQ/anubis/lib/policy.ParseConfig","file":"github.com/TecharoHQ/anubis/lib/policy/policy.go","line":125},"msg":"You have specified a Thoth specific check but you have no Thoth client configured. Please read https://anubis.techaro.lol/docs/admin/thoth for more information","check":"asn","settings":{"match":[13335]}} === RUN TestGoodConfigs/challengemozilla.json === RUN TestGoodConfigs/challengemozilla.json/with-thoth === RUN TestGoodConfigs/challengemozilla.json/without-thoth === RUN TestGoodConfigs/challengemozilla.yaml === RUN TestGoodConfigs/challengemozilla.yaml/with-thoth === RUN TestGoodConfigs/challengemozilla.yaml/without-thoth === RUN TestGoodConfigs/entropy.yaml === RUN TestGoodConfigs/entropy.yaml/with-thoth === RUN TestGoodConfigs/entropy.yaml/without-thoth === RUN TestGoodConfigs/everything_blocked.json === RUN TestGoodConfigs/everything_blocked.json/with-thoth === RUN TestGoodConfigs/everything_blocked.json/without-thoth === RUN TestGoodConfigs/everything_blocked.yaml === RUN TestGoodConfigs/everything_blocked.yaml/with-thoth === RUN TestGoodConfigs/everything_blocked.yaml/without-thoth === RUN TestGoodConfigs/geoip_us.yaml === RUN TestGoodConfigs/geoip_us.yaml/with-thoth === RUN TestGoodConfigs/geoip_us.yaml/without-thoth {"time":"2025-07-17T11:25:26.984878271Z","level":"WARN","source":{"function":"github.com/TecharoHQ/anubis/lib/policy.ParseConfig","file":"github.com/TecharoHQ/anubis/lib/policy/policy.go","line":134},"msg":"You have specified a Thoth specific check but you have no Thoth client configured. Please read https://anubis.techaro.lol/docs/admin/thoth for more information","check":"geoip","settings":{"countries":["US"]}} === RUN TestGoodConfigs/git_client.json === RUN TestGoodConfigs/git_client.json/with-thoth === RUN TestGoodConfigs/git_client.json/without-thoth === RUN TestGoodConfigs/git_client.yaml === RUN TestGoodConfigs/git_client.yaml/with-thoth === RUN TestGoodConfigs/git_client.yaml/without-thoth === RUN TestGoodConfigs/import_filesystem.json === RUN TestGoodConfigs/import_filesystem.json/with-thoth === RUN TestGoodConfigs/import_filesystem.json/without-thoth === RUN TestGoodConfigs/import_filesystem.yaml === RUN TestGoodConfigs/import_filesystem.yaml/with-thoth === RUN TestGoodConfigs/import_filesystem.yaml/without-thoth === RUN TestGoodConfigs/import_keep_internet_working.json === RUN TestGoodConfigs/import_keep_internet_working.json/with-thoth === RUN TestGoodConfigs/import_keep_internet_working.json/without-thoth === RUN TestGoodConfigs/import_keep_internet_working.yaml === RUN TestGoodConfigs/import_keep_internet_working.yaml/with-thoth === RUN TestGoodConfigs/import_keep_internet_working.yaml/without-thoth === RUN TestGoodConfigs/impressum.yaml === RUN TestGoodConfigs/impressum.yaml/with-thoth === RUN TestGoodConfigs/impressum.yaml/without-thoth === RUN TestGoodConfigs/no-thresholds.yaml === RUN TestGoodConfigs/no-thresholds.yaml/with-thoth === RUN TestGoodConfigs/no-thresholds.yaml/without-thoth === RUN TestGoodConfigs/old_xesite.json === RUN TestGoodConfigs/old_xesite.json/with-thoth === RUN TestGoodConfigs/old_xesite.json/without-thoth === RUN TestGoodConfigs/opengraph_all_good.yaml === RUN TestGoodConfigs/opengraph_all_good.yaml/with-thoth === RUN TestGoodConfigs/opengraph_all_good.yaml/without-thoth === RUN TestGoodConfigs/simple-weight.yaml === RUN TestGoodConfigs/simple-weight.yaml/with-thoth === RUN TestGoodConfigs/simple-weight.yaml/without-thoth === RUN TestGoodConfigs/status-codes-paranoid.json === RUN TestGoodConfigs/status-codes-paranoid.json/with-thoth === RUN TestGoodConfigs/status-codes-paranoid.json/without-thoth === RUN TestGoodConfigs/status-codes-paranoid.yaml === RUN TestGoodConfigs/status-codes-paranoid.yaml/with-thoth === RUN TestGoodConfigs/status-codes-paranoid.yaml/without-thoth === RUN TestGoodConfigs/status-codes-rfc.json === RUN TestGoodConfigs/status-codes-rfc.json/with-thoth === RUN TestGoodConfigs/status-codes-rfc.json/without-thoth === RUN TestGoodConfigs/status-codes-rfc.yaml === RUN TestGoodConfigs/status-codes-rfc.yaml/with-thoth === RUN TestGoodConfigs/status-codes-rfc.yaml/without-thoth === RUN TestGoodConfigs/thresholds.yaml === RUN TestGoodConfigs/thresholds.yaml/with-thoth === RUN TestGoodConfigs/thresholds.yaml/without-thoth === RUN TestGoodConfigs/weight-no-weight.yaml === RUN TestGoodConfigs/weight-no-weight.yaml/with-thoth === RUN TestGoodConfigs/weight-no-weight.yaml/without-thoth --- PASS: TestGoodConfigs (0.03s) --- PASS: TestGoodConfigs/allow_everyone.json (0.00s) --- PASS: TestGoodConfigs/allow_everyone.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/allow_everyone.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/allow_everyone.yaml (0.00s) --- PASS: TestGoodConfigs/allow_everyone.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/allow_everyone.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/block_cf_workers.json (0.00s) --- PASS: TestGoodConfigs/block_cf_workers.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/block_cf_workers.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/block_cf_workers.yaml (0.00s) --- PASS: TestGoodConfigs/block_cf_workers.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/block_cf_workers.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/challenge_cloudflare.yaml (0.00s) --- PASS: TestGoodConfigs/challenge_cloudflare.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/challenge_cloudflare.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/challengemozilla.json (0.00s) --- PASS: TestGoodConfigs/challengemozilla.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/challengemozilla.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/challengemozilla.yaml (0.00s) --- PASS: TestGoodConfigs/challengemozilla.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/challengemozilla.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/entropy.yaml (0.00s) --- PASS: TestGoodConfigs/entropy.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/entropy.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/everything_blocked.json (0.00s) --- PASS: TestGoodConfigs/everything_blocked.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/everything_blocked.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/everything_blocked.yaml (0.00s) --- PASS: TestGoodConfigs/everything_blocked.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/everything_blocked.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/geoip_us.yaml (0.00s) --- PASS: TestGoodConfigs/geoip_us.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/geoip_us.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/git_client.json (0.00s) --- PASS: TestGoodConfigs/git_client.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/git_client.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/git_client.yaml (0.00s) --- PASS: TestGoodConfigs/git_client.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/git_client.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/import_filesystem.json (0.00s) --- PASS: TestGoodConfigs/import_filesystem.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/import_filesystem.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/import_filesystem.yaml (0.00s) --- PASS: TestGoodConfigs/import_filesystem.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/import_filesystem.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/import_keep_internet_working.json (0.00s) --- PASS: TestGoodConfigs/import_keep_internet_working.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/import_keep_internet_working.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/import_keep_internet_working.yaml (0.00s) --- PASS: TestGoodConfigs/import_keep_internet_working.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/import_keep_internet_working.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/impressum.yaml (0.00s) --- PASS: TestGoodConfigs/impressum.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/impressum.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/no-thresholds.yaml (0.00s) --- PASS: TestGoodConfigs/no-thresholds.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/no-thresholds.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/old_xesite.json (0.01s) --- PASS: TestGoodConfigs/old_xesite.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/old_xesite.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/opengraph_all_good.yaml (0.00s) --- PASS: TestGoodConfigs/opengraph_all_good.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/opengraph_all_good.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/simple-weight.yaml (0.00s) --- PASS: TestGoodConfigs/simple-weight.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/simple-weight.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-paranoid.json (0.00s) --- PASS: TestGoodConfigs/status-codes-paranoid.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-paranoid.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-paranoid.yaml (0.00s) --- PASS: TestGoodConfigs/status-codes-paranoid.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-paranoid.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-rfc.json (0.00s) --- PASS: TestGoodConfigs/status-codes-rfc.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-rfc.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-rfc.yaml (0.00s) --- PASS: TestGoodConfigs/status-codes-rfc.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-rfc.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/thresholds.yaml (0.00s) --- PASS: TestGoodConfigs/thresholds.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/thresholds.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/weight-no-weight.yaml (0.00s) --- PASS: TestGoodConfigs/weight-no-weight.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/weight-no-weight.yaml/without-thoth (0.00s) === RUN TestSetCookie === RUN TestSetCookie/basic {"time":"2025-07-17T11:25:27.018008898Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} === RUN TestSetCookie/domain_techaro.lol {"time":"2025-07-17T11:25:27.036350632Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} === RUN TestSetCookie/dynamic_cookie_domain {"time":"2025-07-17T11:25:27.050848565Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} --- PASS: TestSetCookie (0.04s) --- PASS: TestSetCookie/basic (0.01s) --- PASS: TestSetCookie/domain_techaro.lol (0.02s) --- PASS: TestSetCookie/dynamic_cookie_domain (0.01s) === RUN TestClearCookie {"time":"2025-07-17T11:25:27.060073951Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} --- PASS: TestClearCookie (0.01s) === RUN TestClearCookieWithDomain {"time":"2025-07-17T11:25:27.067781626Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} --- PASS: TestClearCookieWithDomain (0.01s) === RUN TestClearCookieWithDynamicDomain {"time":"2025-07-17T11:25:27.077495326Z","level":"DEBUG","source":{"function":"github.com/TecharoHQ/anubis/lib.New","file":"github.com/TecharoHQ/anubis/lib/config.go","line":93},"msg":"opts.PrivateKey not set, generating a new one"} --- PASS: TestClearCookieWithDynamicDomain (0.01s) PASS ok github.com/TecharoHQ/anubis/lib 0.510s ? github.com/TecharoHQ/anubis/lib/challenge [no test files] === RUN TestNew --- PASS: TestNew (0.00s) PASS ok github.com/TecharoHQ/anubis/lib/challenge/challengetest 0.012s ? github.com/TecharoHQ/anubis/lib/challenge/metarefresh [no test files] === RUN TestBasic === RUN TestBasic/allgood === RUN TestBasic/no-params === RUN TestBasic/missing-nonce === RUN TestBasic/missing-elapsedTime === RUN TestBasic/missing-response === RUN TestBasic/wrong-nonce-format === RUN TestBasic/wrong-elapsedTime-format === RUN TestBasic/invalid-response --- PASS: TestBasic (0.00s) --- PASS: TestBasic/allgood (0.00s) --- PASS: TestBasic/no-params (0.00s) --- PASS: TestBasic/missing-nonce (0.00s) --- PASS: TestBasic/missing-elapsedTime (0.00s) --- PASS: TestBasic/missing-response (0.00s) --- PASS: TestBasic/wrong-nonce-format (0.00s) --- PASS: TestBasic/wrong-elapsedTime-format (0.00s) --- PASS: TestBasic/invalid-response (0.00s) PASS ok github.com/TecharoHQ/anubis/lib/challenge/proofofwork 0.013s === RUN TestLocalizationService === RUN TestLocalizationService/en_localization === RUN TestLocalizationService/es_localization === RUN TestLocalizationService/et_localization === RUN TestLocalizationService/ja_localization === RUN TestLocalizationService/pt-BR_localization === RUN TestLocalizationService/zh-CN_localization === RUN TestLocalizationService/fil_localization === RUN TestLocalizationService/fr_localization === RUN TestLocalizationService/is_localization === RUN TestLocalizationService/tr_localization === RUN TestLocalizationService/zh-TW_localization === RUN TestLocalizationService/de_localization === RUN TestLocalizationService/All_required_keys_exist_in_es === RUN TestLocalizationService/All_required_keys_exist_in_et === RUN TestLocalizationService/All_required_keys_exist_in_ja === RUN TestLocalizationService/All_required_keys_exist_in_pt-BR === RUN TestLocalizationService/All_required_keys_exist_in_zh-CN === RUN TestLocalizationService/All_required_keys_exist_in_fil === RUN TestLocalizationService/All_required_keys_exist_in_fr === RUN TestLocalizationService/All_required_keys_exist_in_is === RUN TestLocalizationService/All_required_keys_exist_in_tr === RUN TestLocalizationService/All_required_keys_exist_in_zh-TW === RUN TestLocalizationService/All_required_keys_exist_in_de === RUN TestLocalizationService/All_required_keys_exist_in_en --- PASS: TestLocalizationService (0.00s) --- PASS: TestLocalizationService/en_localization (0.00s) --- PASS: TestLocalizationService/es_localization (0.00s) --- PASS: TestLocalizationService/et_localization (0.00s) --- PASS: TestLocalizationService/ja_localization (0.00s) --- PASS: TestLocalizationService/pt-BR_localization (0.00s) --- PASS: TestLocalizationService/zh-CN_localization (0.00s) --- PASS: TestLocalizationService/fil_localization (0.00s) --- PASS: TestLocalizationService/fr_localization (0.00s) --- PASS: TestLocalizationService/is_localization (0.00s) --- PASS: TestLocalizationService/tr_localization (0.00s) --- PASS: TestLocalizationService/zh-TW_localization (0.00s) --- PASS: TestLocalizationService/de_localization (0.00s) --- PASS: TestLocalizationService/All_required_keys_exist_in_es (0.00s) --- PASS: TestLocalizationService/All_required_keys_exist_in_et (0.00s) --- PASS: TestLocalizationService/All_required_keys_exist_in_ja (0.00s) --- PASS: TestLocalizationService/All_required_keys_exist_in_pt-BR (0.00s) --- PASS: TestLocalizationService/All_required_keys_exist_in_zh-CN (0.00s) --- PASS: TestLocalizationService/All_required_keys_exist_in_fil (0.00s) --- PASS: TestLocalizationService/All_required_keys_exist_in_fr (0.00s) --- PASS: TestLocalizationService/All_required_keys_exist_in_is (0.00s) --- PASS: TestLocalizationService/All_required_keys_exist_in_tr (0.00s) --- PASS: TestLocalizationService/All_required_keys_exist_in_zh-TW (0.00s) --- PASS: TestLocalizationService/All_required_keys_exist_in_de (0.00s) --- PASS: TestLocalizationService/All_required_keys_exist_in_en (0.00s) === RUN TestComprehensiveTranslations --- PASS: TestComprehensiveTranslations (0.00s) PASS ok github.com/TecharoHQ/anubis/lib/localization 0.008s === RUN TestRemoteAddrChecker === RUN TestRemoteAddrChecker/match_ipv4 === RUN TestRemoteAddrChecker/match_ipv6 === RUN TestRemoteAddrChecker/not_match_ipv4 === RUN TestRemoteAddrChecker/not_match_ipv6 === RUN TestRemoteAddrChecker/no_ip_set === RUN TestRemoteAddrChecker/invalid_ip --- PASS: TestRemoteAddrChecker (0.00s) --- PASS: TestRemoteAddrChecker/match_ipv4 (0.00s) --- PASS: TestRemoteAddrChecker/match_ipv6 (0.00s) --- PASS: TestRemoteAddrChecker/not_match_ipv4 (0.00s) --- PASS: TestRemoteAddrChecker/not_match_ipv6 (0.00s) --- PASS: TestRemoteAddrChecker/no_ip_set (0.00s) --- PASS: TestRemoteAddrChecker/invalid_ip (0.00s) === RUN TestHeaderMatchesChecker === RUN TestHeaderMatchesChecker/match === RUN TestHeaderMatchesChecker/not_match === RUN TestHeaderMatchesChecker/not_present === RUN TestHeaderMatchesChecker/invalid_regex --- PASS: TestHeaderMatchesChecker (0.00s) --- PASS: TestHeaderMatchesChecker/match (0.00s) --- PASS: TestHeaderMatchesChecker/not_match (0.00s) --- PASS: TestHeaderMatchesChecker/not_present (0.00s) --- PASS: TestHeaderMatchesChecker/invalid_regex (0.00s) === RUN TestHeaderExistsChecker === RUN TestHeaderExistsChecker/match === RUN TestHeaderExistsChecker/not_match --- PASS: TestHeaderExistsChecker (0.00s) --- PASS: TestHeaderExistsChecker/match (0.00s) --- PASS: TestHeaderExistsChecker/not_match (0.00s) === RUN TestDefaultPolicyMustParse --- PASS: TestDefaultPolicyMustParse (0.01s) === RUN TestGoodConfigs === RUN TestGoodConfigs/allow_everyone.json === RUN TestGoodConfigs/allow_everyone.json/with-thoth === RUN TestGoodConfigs/allow_everyone.json/without-thoth === RUN TestGoodConfigs/allow_everyone.yaml === RUN TestGoodConfigs/allow_everyone.yaml/with-thoth === RUN TestGoodConfigs/allow_everyone.yaml/without-thoth === RUN TestGoodConfigs/block_cf_workers.json === RUN TestGoodConfigs/block_cf_workers.json/with-thoth === RUN TestGoodConfigs/block_cf_workers.json/without-thoth === RUN TestGoodConfigs/block_cf_workers.yaml === RUN TestGoodConfigs/block_cf_workers.yaml/with-thoth === RUN TestGoodConfigs/block_cf_workers.yaml/without-thoth === RUN TestGoodConfigs/challenge_cloudflare.yaml === RUN TestGoodConfigs/challenge_cloudflare.yaml/with-thoth === RUN TestGoodConfigs/challenge_cloudflare.yaml/without-thoth 2025/07/17 11:25:27 WARN You have specified a Thoth specific check but you have no Thoth client configured. Please read https://anubis.techaro.lol/docs/admin/thoth for more information check=asn settings=&{Match:[13335]} === RUN TestGoodConfigs/challengemozilla.json === RUN TestGoodConfigs/challengemozilla.json/with-thoth === RUN TestGoodConfigs/challengemozilla.json/without-thoth === RUN TestGoodConfigs/challengemozilla.yaml === RUN TestGoodConfigs/challengemozilla.yaml/with-thoth === RUN TestGoodConfigs/challengemozilla.yaml/without-thoth === RUN TestGoodConfigs/entropy.yaml === RUN TestGoodConfigs/entropy.yaml/with-thoth === RUN TestGoodConfigs/entropy.yaml/without-thoth === RUN TestGoodConfigs/everything_blocked.json === RUN TestGoodConfigs/everything_blocked.json/with-thoth === RUN TestGoodConfigs/everything_blocked.json/without-thoth === RUN TestGoodConfigs/everything_blocked.yaml === RUN TestGoodConfigs/everything_blocked.yaml/with-thoth === RUN TestGoodConfigs/everything_blocked.yaml/without-thoth === RUN TestGoodConfigs/geoip_us.yaml === RUN TestGoodConfigs/geoip_us.yaml/with-thoth === RUN TestGoodConfigs/geoip_us.yaml/without-thoth 2025/07/17 11:25:27 WARN You have specified a Thoth specific check but you have no Thoth client configured. Please read https://anubis.techaro.lol/docs/admin/thoth for more information check=geoip settings=&{Countries:[US]} === RUN TestGoodConfigs/git_client.json === RUN TestGoodConfigs/git_client.json/with-thoth === RUN TestGoodConfigs/git_client.json/without-thoth === RUN TestGoodConfigs/git_client.yaml === RUN TestGoodConfigs/git_client.yaml/with-thoth === RUN TestGoodConfigs/git_client.yaml/without-thoth === RUN TestGoodConfigs/import_filesystem.json === RUN TestGoodConfigs/import_filesystem.json/with-thoth === RUN TestGoodConfigs/import_filesystem.json/without-thoth === RUN TestGoodConfigs/import_filesystem.yaml === RUN TestGoodConfigs/import_filesystem.yaml/with-thoth === RUN TestGoodConfigs/import_filesystem.yaml/without-thoth === RUN TestGoodConfigs/import_keep_internet_working.json === RUN TestGoodConfigs/import_keep_internet_working.json/with-thoth === RUN TestGoodConfigs/import_keep_internet_working.json/without-thoth === RUN TestGoodConfigs/import_keep_internet_working.yaml === RUN TestGoodConfigs/import_keep_internet_working.yaml/with-thoth === RUN TestGoodConfigs/import_keep_internet_working.yaml/without-thoth === RUN TestGoodConfigs/impressum.yaml === RUN TestGoodConfigs/impressum.yaml/with-thoth === RUN TestGoodConfigs/impressum.yaml/without-thoth === RUN TestGoodConfigs/no-thresholds.yaml === RUN TestGoodConfigs/no-thresholds.yaml/with-thoth === RUN TestGoodConfigs/no-thresholds.yaml/without-thoth === RUN TestGoodConfigs/old_xesite.json === RUN TestGoodConfigs/old_xesite.json/with-thoth === RUN TestGoodConfigs/old_xesite.json/without-thoth === RUN TestGoodConfigs/opengraph_all_good.yaml === RUN TestGoodConfigs/opengraph_all_good.yaml/with-thoth === RUN TestGoodConfigs/opengraph_all_good.yaml/without-thoth === RUN TestGoodConfigs/simple-weight.yaml === RUN TestGoodConfigs/simple-weight.yaml/with-thoth === RUN TestGoodConfigs/simple-weight.yaml/without-thoth === RUN TestGoodConfigs/status-codes-paranoid.json === RUN TestGoodConfigs/status-codes-paranoid.json/with-thoth === RUN TestGoodConfigs/status-codes-paranoid.json/without-thoth === RUN TestGoodConfigs/status-codes-paranoid.yaml === RUN TestGoodConfigs/status-codes-paranoid.yaml/with-thoth === RUN TestGoodConfigs/status-codes-paranoid.yaml/without-thoth === RUN TestGoodConfigs/status-codes-rfc.json === RUN TestGoodConfigs/status-codes-rfc.json/with-thoth === RUN TestGoodConfigs/status-codes-rfc.json/without-thoth === RUN TestGoodConfigs/status-codes-rfc.yaml === RUN TestGoodConfigs/status-codes-rfc.yaml/with-thoth === RUN TestGoodConfigs/status-codes-rfc.yaml/without-thoth === RUN TestGoodConfigs/thresholds.yaml === RUN TestGoodConfigs/thresholds.yaml/with-thoth === RUN TestGoodConfigs/thresholds.yaml/without-thoth === RUN TestGoodConfigs/weight-no-weight.yaml === RUN TestGoodConfigs/weight-no-weight.yaml/with-thoth === RUN TestGoodConfigs/weight-no-weight.yaml/without-thoth --- PASS: TestGoodConfigs (0.03s) --- PASS: TestGoodConfigs/allow_everyone.json (0.00s) --- PASS: TestGoodConfigs/allow_everyone.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/allow_everyone.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/allow_everyone.yaml (0.00s) --- PASS: TestGoodConfigs/allow_everyone.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/allow_everyone.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/block_cf_workers.json (0.00s) --- PASS: TestGoodConfigs/block_cf_workers.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/block_cf_workers.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/block_cf_workers.yaml (0.00s) --- PASS: TestGoodConfigs/block_cf_workers.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/block_cf_workers.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/challenge_cloudflare.yaml (0.00s) --- PASS: TestGoodConfigs/challenge_cloudflare.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/challenge_cloudflare.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/challengemozilla.json (0.00s) --- PASS: TestGoodConfigs/challengemozilla.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/challengemozilla.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/challengemozilla.yaml (0.00s) --- PASS: TestGoodConfigs/challengemozilla.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/challengemozilla.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/entropy.yaml (0.00s) --- PASS: TestGoodConfigs/entropy.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/entropy.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/everything_blocked.json (0.00s) --- PASS: TestGoodConfigs/everything_blocked.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/everything_blocked.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/everything_blocked.yaml (0.00s) --- PASS: TestGoodConfigs/everything_blocked.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/everything_blocked.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/geoip_us.yaml (0.00s) --- PASS: TestGoodConfigs/geoip_us.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/geoip_us.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/git_client.json (0.00s) --- PASS: TestGoodConfigs/git_client.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/git_client.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/git_client.yaml (0.00s) --- PASS: TestGoodConfigs/git_client.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/git_client.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/import_filesystem.json (0.00s) --- PASS: TestGoodConfigs/import_filesystem.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/import_filesystem.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/import_filesystem.yaml (0.00s) --- PASS: TestGoodConfigs/import_filesystem.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/import_filesystem.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/import_keep_internet_working.json (0.00s) --- PASS: TestGoodConfigs/import_keep_internet_working.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/import_keep_internet_working.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/import_keep_internet_working.yaml (0.00s) --- PASS: TestGoodConfigs/import_keep_internet_working.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/import_keep_internet_working.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/impressum.yaml (0.00s) --- PASS: TestGoodConfigs/impressum.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/impressum.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/no-thresholds.yaml (0.00s) --- PASS: TestGoodConfigs/no-thresholds.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/no-thresholds.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/old_xesite.json (0.00s) --- PASS: TestGoodConfigs/old_xesite.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/old_xesite.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/opengraph_all_good.yaml (0.00s) --- PASS: TestGoodConfigs/opengraph_all_good.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/opengraph_all_good.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/simple-weight.yaml (0.00s) --- PASS: TestGoodConfigs/simple-weight.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/simple-weight.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-paranoid.json (0.00s) --- PASS: TestGoodConfigs/status-codes-paranoid.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-paranoid.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-paranoid.yaml (0.00s) --- PASS: TestGoodConfigs/status-codes-paranoid.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-paranoid.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-rfc.json (0.00s) --- PASS: TestGoodConfigs/status-codes-rfc.json/with-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-rfc.json/without-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-rfc.yaml (0.00s) --- PASS: TestGoodConfigs/status-codes-rfc.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/status-codes-rfc.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/thresholds.yaml (0.00s) --- PASS: TestGoodConfigs/thresholds.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/thresholds.yaml/without-thoth (0.00s) --- PASS: TestGoodConfigs/weight-no-weight.yaml (0.00s) --- PASS: TestGoodConfigs/weight-no-weight.yaml/with-thoth (0.00s) --- PASS: TestGoodConfigs/weight-no-weight.yaml/without-thoth (0.00s) === RUN TestBadConfigs === RUN TestBadConfigs/badregexes.json policy_test.go:85: config is not valid: bot 0: config: bot entry for "path-bad" is not valid: config.Bot: invalid path regex error parsing regexp: missing closing ): `a(b` bot 1: config: bot entry for "user-agent-bad" is not valid: config.Bot: invalid user agent regex error parsing regexp: missing closing ): `a(b` bot 2: config: bot entry for "headers-bad" is not valid: config.Bot: must set either user_agent_regex, path_regex, headers_regex, or remote_addresses === RUN TestBadConfigs/badregexes.yaml policy_test.go:85: config is not valid: bot 0: config: bot entry for "path-bad" is not valid: config.Bot: invalid path regex error parsing regexp: missing closing ): `a(b` bot 1: config: bot entry for "user-agent-bad" is not valid: config.Bot: invalid user agent regex error parsing regexp: missing closing ): `a(b` === RUN TestBadConfigs/import_and_bot.json policy_test.go:85: config is not valid: bot 0: config.BotOrImport: can't set bot rules and import values at the same time === RUN TestBadConfigs/import_and_bot.yaml policy_test.go:85: config is not valid: bot 0: config.BotOrImport: can't set bot rules and import values at the same time === RUN TestBadConfigs/import_invalid_file.json policy_test.go:85: config is not valid: bot 0: config.ImportStatement: invalid source file: (data)/does-not-exist-fake-file.yaml: open does-not-exist-fake-file.yaml: file does not exist === RUN TestBadConfigs/import_invalid_file.yaml policy_test.go:85: config is not valid: bot 0: config.ImportStatement: invalid source file: (data)/does-not-exist-fake-file.yaml: open does-not-exist-fake-file.yaml: file does not exist === RUN TestBadConfigs/impressum-no-footer.yaml policy_test.go:85: errors validating policy config config/testdata/bad/impressum-no-footer.yaml: config: missing value: impressum footer must be defined === RUN TestBadConfigs/impressum-no-page-contents.yaml policy_test.go:85: errors validating policy config config/testdata/bad/impressum-no-page-contents.yaml: config: missing value: impressum page title must be defined config: missing value: impressum body title must be defined === RUN TestBadConfigs/invalid.json policy_test.go:85: config is not valid: bot 0: config.BotOrImport: rule definition is invalid, you must set either bot rules or an import statement, not both === RUN TestBadConfigs/invalid.yaml policy_test.go:85: config is not valid: config: must define at least one (1) bot rule === RUN TestBadConfigs/multiple_expression_types.json policy_test.go:85: config is not valid: bot 0: config: bot entry for "multiple-expression-types" is not valid: config: expression block can't contain multiple expression types === RUN TestBadConfigs/multiple_expression_types.yaml policy_test.go:85: config is not valid: bot 0: config: bot entry for "multiple-expression-types" is not valid: config: expression block can't contain multiple expression types === RUN TestBadConfigs/nobots.json policy_test.go:85: config is not valid: config: must define at least one (1) bot rule === RUN TestBadConfigs/nobots.yaml policy_test.go:85: config is not valid: config: must define at least one (1) bot rule === RUN TestBadConfigs/opengraph_bad_ttl.yaml policy_test.go:85: config is not valid: config.OpenGraph: invalid OpenGraph configuration config.OpenGraph: ttl does not parse as a Duration, see https://pkg.go.dev/time#ParseDuration (formatted like 5m -> 5 minutes, 2h -> 2 hours, etc): ParseDuration("taco") returned: time: invalid duration "taco" === RUN TestBadConfigs/regex_ends_newline.json policy_test.go:85: config is not valid: bot 0: config: bot entry for "user-agent-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): user agent regex: "Mozilla\n" bot 1: config: bot entry for "path-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): path regex: "^/evil/.*$\n" bot 2: config: bot entry for "headers-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): header CF-Worker regex: ".*\n" === RUN TestBadConfigs/regex_ends_newline.yaml policy_test.go:85: config is not valid: bot 0: config: bot entry for "user-agent-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): user agent regex: "Mozilla\n" bot 1: config: bot entry for "path-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): path regex: "^/evil/.*$\n" bot 2: config: bot entry for "headers-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): header CF-Worker regex: ".*\n" === RUN TestBadConfigs/status-codes-0.json policy_test.go:85: config is not valid: status codes not valid: config.StatusCode: status code not valid, must be between 100 and 599: challenge is 0 config.StatusCode: status code not valid, must be between 100 and 599: deny is 0 === RUN TestBadConfigs/status-codes-0.yaml policy_test.go:85: config is not valid: status codes not valid: config.StatusCode: status code not valid, must be between 100 and 599: challenge is 0 config.StatusCode: status code not valid, must be between 100 and 599: deny is 0 === RUN TestBadConfigs/threshold-challenge-without-challenge.yaml policy_test.go:85: config is not valid: threshold 0: config: threshold entry for "extreme-suspicion" is not valid: config.Threshold: a threshold cannot have the WEIGH action === RUN TestBadConfigs/thresholds.yaml policy_test.go:85: config is not valid: threshold 0: config: threshold entry for "extreme-suspicion" is not valid: config.Threshold: a threshold cannot have the WEIGH action === RUN TestBadConfigs/unparseable.json policy_test.go:85: can't parse policy config YAML config/testdata/bad/unparseable.json: error converting YAML to JSON: yaml: did not find expected node content === RUN TestBadConfigs/unparseable.yaml policy_test.go:85: can't parse policy config YAML config/testdata/bad/unparseable.yaml: error converting YAML to JSON: yaml: did not find expected node content --- PASS: TestBadConfigs (0.00s) --- PASS: TestBadConfigs/badregexes.json (0.00s) --- PASS: TestBadConfigs/badregexes.yaml (0.00s) --- PASS: TestBadConfigs/import_and_bot.json (0.00s) --- PASS: TestBadConfigs/import_and_bot.yaml (0.00s) --- PASS: TestBadConfigs/import_invalid_file.json (0.00s) --- PASS: TestBadConfigs/import_invalid_file.yaml (0.00s) --- PASS: TestBadConfigs/impressum-no-footer.yaml (0.00s) --- PASS: TestBadConfigs/impressum-no-page-contents.yaml (0.00s) --- PASS: TestBadConfigs/invalid.json (0.00s) --- PASS: TestBadConfigs/invalid.yaml (0.00s) --- PASS: TestBadConfigs/multiple_expression_types.json (0.00s) --- PASS: TestBadConfigs/multiple_expression_types.yaml (0.00s) --- PASS: TestBadConfigs/nobots.json (0.00s) --- PASS: TestBadConfigs/nobots.yaml (0.00s) --- PASS: TestBadConfigs/opengraph_bad_ttl.yaml (0.00s) --- PASS: TestBadConfigs/regex_ends_newline.json (0.00s) --- PASS: TestBadConfigs/regex_ends_newline.yaml (0.00s) --- PASS: TestBadConfigs/status-codes-0.json (0.00s) --- PASS: TestBadConfigs/status-codes-0.yaml (0.00s) --- PASS: TestBadConfigs/threshold-challenge-without-challenge.yaml (0.00s) --- PASS: TestBadConfigs/thresholds.yaml (0.00s) --- PASS: TestBadConfigs/unparseable.json (0.00s) --- PASS: TestBadConfigs/unparseable.yaml (0.00s) PASS ok github.com/TecharoHQ/anubis/lib/policy 0.058s ? github.com/TecharoHQ/anubis/lib/policy/checker [no test files] === RUN TestASNsValid === RUN TestASNsValid/basic_valid === RUN TestASNsValid/private_ASN --- PASS: TestASNsValid (0.00s) --- PASS: TestASNsValid/basic_valid (0.00s) --- PASS: TestASNsValid/private_ASN (0.00s) === RUN TestIsPrivateASN === RUN TestIsPrivateASN/13335->false === RUN TestIsPrivateASN/64513->true === RUN TestIsPrivateASN/4206942069->true --- PASS: TestIsPrivateASN (0.00s) --- PASS: TestIsPrivateASN/13335->false (0.00s) --- PASS: TestIsPrivateASN/64513->true (0.00s) --- PASS: TestIsPrivateASN/4206942069->true (0.00s) === RUN TestExpressionOrListMarshalJSON === RUN TestExpressionOrListMarshalJSON/single_expression === RUN TestExpressionOrListMarshalJSON/all === RUN TestExpressionOrListMarshalJSON/all_one === RUN TestExpressionOrListMarshalJSON/any === RUN TestExpressionOrListMarshalJSON/any_one --- PASS: TestExpressionOrListMarshalJSON (0.00s) --- PASS: TestExpressionOrListMarshalJSON/single_expression (0.00s) --- PASS: TestExpressionOrListMarshalJSON/all (0.00s) --- PASS: TestExpressionOrListMarshalJSON/all_one (0.00s) --- PASS: TestExpressionOrListMarshalJSON/any (0.00s) --- PASS: TestExpressionOrListMarshalJSON/any_one (0.00s) === RUN TestExpressionOrListMarshalYAML === RUN TestExpressionOrListMarshalYAML/single_expression === RUN TestExpressionOrListMarshalYAML/all === RUN TestExpressionOrListMarshalYAML/all_one === RUN TestExpressionOrListMarshalYAML/any === RUN TestExpressionOrListMarshalYAML/any_one --- PASS: TestExpressionOrListMarshalYAML (0.00s) --- PASS: TestExpressionOrListMarshalYAML/single_expression (0.00s) --- PASS: TestExpressionOrListMarshalYAML/all (0.00s) --- PASS: TestExpressionOrListMarshalYAML/all_one (0.00s) --- PASS: TestExpressionOrListMarshalYAML/any (0.00s) --- PASS: TestExpressionOrListMarshalYAML/any_one (0.00s) === RUN TestExpressionOrListUnmarshalJSON === RUN TestExpressionOrListUnmarshalJSON/simple === RUN TestExpressionOrListUnmarshalJSON/object-and === RUN TestExpressionOrListUnmarshalJSON/object-or === RUN TestExpressionOrListUnmarshalJSON/both-or-and === RUN TestExpressionOrListUnmarshalJSON/expression-empty --- PASS: TestExpressionOrListUnmarshalJSON (0.00s) --- PASS: TestExpressionOrListUnmarshalJSON/simple (0.00s) --- PASS: TestExpressionOrListUnmarshalJSON/object-and (0.00s) --- PASS: TestExpressionOrListUnmarshalJSON/object-or (0.00s) --- PASS: TestExpressionOrListUnmarshalJSON/both-or-and (0.00s) --- PASS: TestExpressionOrListUnmarshalJSON/expression-empty (0.00s) === RUN TestExpressionOrListString === RUN TestExpressionOrListString/single_expression === RUN TestExpressionOrListString/all === RUN TestExpressionOrListString/all_with_&& === RUN TestExpressionOrListString/any === RUN TestExpressionOrListString/any_with_|| --- PASS: TestExpressionOrListString (0.00s) --- PASS: TestExpressionOrListString/single_expression (0.00s) --- PASS: TestExpressionOrListString/all (0.00s) --- PASS: TestExpressionOrListString/all_with_&& (0.00s) --- PASS: TestExpressionOrListString/any (0.00s) --- PASS: TestExpressionOrListString/any_with_|| (0.00s) === RUN TestGeoIPValid === RUN TestGeoIPValid/basic_valid === RUN TestGeoIPValid/invalid_country --- PASS: TestGeoIPValid (0.00s) --- PASS: TestGeoIPValid/basic_valid (0.00s) --- PASS: TestGeoIPValid/invalid_country (0.00s) === RUN TestImpressumValid === RUN TestImpressumValid/basic_happy_path === RUN TestImpressumValid/no_footer === RUN TestImpressumValid/page_not_valid --- PASS: TestImpressumValid (0.00s) --- PASS: TestImpressumValid/basic_happy_path (0.00s) --- PASS: TestImpressumValid/no_footer (0.00s) --- PASS: TestImpressumValid/page_not_valid (0.00s) === RUN TestOpenGraphFileConfigValid === RUN TestOpenGraphFileConfigValid/basic_happy_path === RUN TestOpenGraphFileConfigValid/basic_happy_path_with_default === RUN TestOpenGraphFileConfigValid/invalid_time_duration === RUN TestOpenGraphFileConfigValid/missing_og:title_in_defaults --- PASS: TestOpenGraphFileConfigValid (0.00s) --- PASS: TestOpenGraphFileConfigValid/basic_happy_path (0.00s) --- PASS: TestOpenGraphFileConfigValid/basic_happy_path_with_default (0.00s) --- PASS: TestOpenGraphFileConfigValid/invalid_time_duration (0.00s) --- PASS: TestOpenGraphFileConfigValid/missing_og:title_in_defaults (0.00s) === RUN TestThresholdValid === RUN TestThresholdValid/basic_allow === RUN TestThresholdValid/basic_challenge === RUN TestThresholdValid/no_name === RUN TestThresholdValid/no_expression === RUN TestThresholdValid/invalid_expression === RUN TestThresholdValid/invalid_action === RUN TestThresholdValid/challenge_action_but_no_challenge === RUN TestThresholdValid/challenge_invalid --- PASS: TestThresholdValid (0.00s) --- PASS: TestThresholdValid/basic_allow (0.00s) --- PASS: TestThresholdValid/basic_challenge (0.00s) --- PASS: TestThresholdValid/no_name (0.00s) --- PASS: TestThresholdValid/no_expression (0.00s) --- PASS: TestThresholdValid/invalid_expression (0.00s) --- PASS: TestThresholdValid/invalid_action (0.00s) --- PASS: TestThresholdValid/challenge_action_but_no_challenge (0.00s) --- PASS: TestThresholdValid/challenge_invalid (0.00s) === RUN TestDefaultThresholdsValid === RUN TestDefaultThresholdsValid/0_legacy-anubis-behaviour --- PASS: TestDefaultThresholdsValid (0.00s) --- PASS: TestDefaultThresholdsValid/0_legacy-anubis-behaviour (0.00s) === RUN TestLoadActuallyLoadsThresholds --- PASS: TestLoadActuallyLoadsThresholds (0.00s) === RUN TestBotValid === RUN TestBotValid/simple_user_agent === RUN TestBotValid/simple_path === RUN TestBotValid/no_rule_name === RUN TestBotValid/no_rule_matcher === RUN TestBotValid/both_user-agent_and_path === RUN TestBotValid/unknown_action === RUN TestBotValid/invalid_user_agent_regex === RUN TestBotValid/invalid_path_regex === RUN TestBotValid/invalid_headers_regex === RUN TestBotValid/challenge_difficulty_too_low === RUN TestBotValid/challenge_difficulty_too_high === RUN TestBotValid/invalid_cidr_range === RUN TestBotValid/only_filter_by_IP_range === RUN TestBotValid/filter_by_user_agent_and_IP_range === RUN TestBotValid/filter_by_path_and_IP_range === RUN TestBotValid/weight_rule_without_weight === RUN TestBotValid/weight_rule_with_weight_adjust --- PASS: TestBotValid (0.00s) --- PASS: TestBotValid/simple_user_agent (0.00s) --- PASS: TestBotValid/simple_path (0.00s) --- PASS: TestBotValid/no_rule_name (0.00s) --- PASS: TestBotValid/no_rule_matcher (0.00s) --- PASS: TestBotValid/both_user-agent_and_path (0.00s) --- PASS: TestBotValid/unknown_action (0.00s) --- PASS: TestBotValid/invalid_user_agent_regex (0.00s) --- PASS: TestBotValid/invalid_path_regex (0.00s) --- PASS: TestBotValid/invalid_headers_regex (0.00s) --- PASS: TestBotValid/challenge_difficulty_too_low (0.00s) --- PASS: TestBotValid/challenge_difficulty_too_high (0.00s) --- PASS: TestBotValid/invalid_cidr_range (0.00s) --- PASS: TestBotValid/only_filter_by_IP_range (0.00s) --- PASS: TestBotValid/filter_by_user_agent_and_IP_range (0.00s) --- PASS: TestBotValid/filter_by_path_and_IP_range (0.00s) --- PASS: TestBotValid/weight_rule_without_weight (0.00s) --- PASS: TestBotValid/weight_rule_with_weight_adjust (0.00s) === RUN TestConfigValidKnownGood === RUN TestConfigValidKnownGood/allow_everyone.json === RUN TestConfigValidKnownGood/allow_everyone.yaml === RUN TestConfigValidKnownGood/block_cf_workers.json === RUN TestConfigValidKnownGood/block_cf_workers.yaml === RUN TestConfigValidKnownGood/challenge_cloudflare.yaml === RUN TestConfigValidKnownGood/challengemozilla.json === RUN TestConfigValidKnownGood/challengemozilla.yaml === RUN TestConfigValidKnownGood/entropy.yaml === RUN TestConfigValidKnownGood/everything_blocked.json === RUN TestConfigValidKnownGood/everything_blocked.yaml === RUN TestConfigValidKnownGood/geoip_us.yaml === RUN TestConfigValidKnownGood/git_client.json === RUN TestConfigValidKnownGood/git_client.yaml === RUN TestConfigValidKnownGood/import_filesystem.json === RUN TestConfigValidKnownGood/import_filesystem.yaml === RUN TestConfigValidKnownGood/import_keep_internet_working.json === RUN TestConfigValidKnownGood/import_keep_internet_working.yaml === RUN TestConfigValidKnownGood/impressum.yaml === RUN TestConfigValidKnownGood/no-thresholds.yaml === RUN TestConfigValidKnownGood/old_xesite.json === RUN TestConfigValidKnownGood/opengraph_all_good.yaml === RUN TestConfigValidKnownGood/simple-weight.yaml === RUN TestConfigValidKnownGood/status-codes-paranoid.json === RUN TestConfigValidKnownGood/status-codes-paranoid.yaml === RUN TestConfigValidKnownGood/status-codes-rfc.json === RUN TestConfigValidKnownGood/status-codes-rfc.yaml === RUN TestConfigValidKnownGood/thresholds.yaml === RUN TestConfigValidKnownGood/weight-no-weight.yaml --- PASS: TestConfigValidKnownGood (0.00s) --- PASS: TestConfigValidKnownGood/allow_everyone.json (0.00s) --- PASS: TestConfigValidKnownGood/allow_everyone.yaml (0.00s) --- PASS: TestConfigValidKnownGood/block_cf_workers.json (0.00s) --- PASS: TestConfigValidKnownGood/block_cf_workers.yaml (0.00s) --- PASS: TestConfigValidKnownGood/challenge_cloudflare.yaml (0.00s) --- PASS: TestConfigValidKnownGood/challengemozilla.json (0.00s) --- PASS: TestConfigValidKnownGood/challengemozilla.yaml (0.00s) --- PASS: TestConfigValidKnownGood/entropy.yaml (0.00s) --- PASS: TestConfigValidKnownGood/everything_blocked.json (0.00s) --- PASS: TestConfigValidKnownGood/everything_blocked.yaml (0.00s) --- PASS: TestConfigValidKnownGood/geoip_us.yaml (0.00s) --- PASS: TestConfigValidKnownGood/git_client.json (0.00s) --- PASS: TestConfigValidKnownGood/git_client.yaml (0.00s) --- PASS: TestConfigValidKnownGood/import_filesystem.json (0.00s) --- PASS: TestConfigValidKnownGood/import_filesystem.yaml (0.00s) --- PASS: TestConfigValidKnownGood/import_keep_internet_working.json (0.00s) --- PASS: TestConfigValidKnownGood/import_keep_internet_working.yaml (0.00s) --- PASS: TestConfigValidKnownGood/impressum.yaml (0.00s) --- PASS: TestConfigValidKnownGood/no-thresholds.yaml (0.00s) --- PASS: TestConfigValidKnownGood/old_xesite.json (0.00s) --- PASS: TestConfigValidKnownGood/opengraph_all_good.yaml (0.00s) --- PASS: TestConfigValidKnownGood/simple-weight.yaml (0.00s) --- PASS: TestConfigValidKnownGood/status-codes-paranoid.json (0.00s) --- PASS: TestConfigValidKnownGood/status-codes-paranoid.yaml (0.00s) --- PASS: TestConfigValidKnownGood/status-codes-rfc.json (0.00s) --- PASS: TestConfigValidKnownGood/status-codes-rfc.yaml (0.00s) --- PASS: TestConfigValidKnownGood/thresholds.yaml (0.00s) --- PASS: TestConfigValidKnownGood/weight-no-weight.yaml (0.00s) === RUN TestImportStatement === RUN TestImportStatement/(data)/apps/allow-api-routes.yaml === RUN TestImportStatement/(data)/apps/bookstack-saml.yaml === RUN TestImportStatement/(data)/apps/gitea-rss-feeds.yaml === RUN TestImportStatement/(data)/apps/qualys-ssl-labs.yml === RUN TestImportStatement/(data)/apps/searx-checker.yml === RUN TestImportStatement/(data)/bots/_deny-pathological.yaml === RUN TestImportStatement/(data)/bots/aggressive-brazilian-scrapers.yaml === RUN TestImportStatement/(data)/bots/ai-catchall.yaml === RUN TestImportStatement/(data)/bots/ai-robots-txt.yaml === RUN TestImportStatement/(data)/bots/cloudflare-workers.yaml === RUN TestImportStatement/(data)/bots/headless-browsers.yaml === RUN TestImportStatement/(data)/bots/irc-bots/archlinux-phrik.yaml === RUN TestImportStatement/(data)/bots/irc-bots/gentoo-chat.yaml === RUN TestImportStatement/(data)/bots/us-ai-scraper.yaml === RUN TestImportStatement/(data)/common/allow-api-like.yaml === RUN TestImportStatement/(data)/common/allow-private-addresses.yaml === RUN TestImportStatement/(data)/common/json-api.yaml === RUN TestImportStatement/(data)/common/keep-internet-working.yaml === RUN TestImportStatement/(data)/common/rfc-violations.yaml === RUN TestImportStatement/(data)/crawlers/_allow-good.yaml === RUN TestImportStatement/(data)/crawlers/ai-search.yaml === RUN TestImportStatement/(data)/crawlers/ai-training.yaml === RUN TestImportStatement/(data)/crawlers/applebot.yaml === RUN TestImportStatement/(data)/crawlers/bingbot.yaml === RUN TestImportStatement/(data)/crawlers/commoncrawl.yaml === RUN TestImportStatement/(data)/crawlers/duckduckbot.yaml === RUN TestImportStatement/(data)/crawlers/googlebot.yaml === RUN TestImportStatement/(data)/crawlers/internet-archive.yaml === RUN TestImportStatement/(data)/crawlers/kagibot.yaml === RUN TestImportStatement/(data)/crawlers/marginalia.yaml === RUN TestImportStatement/(data)/crawlers/mojeekbot.yaml === RUN TestImportStatement/(data)/crawlers/openai-gptbot.yaml === RUN TestImportStatement/(data)/crawlers/openai-searchbot.yaml === RUN TestImportStatement/(data)/crawlers/qwantbot.yaml === RUN TestImportStatement/(data)/meta/ai-block-aggressive.yaml === RUN TestImportStatement/(data)/meta/ai-block-moderate.yaml === RUN TestImportStatement/(data)/meta/ai-block-permissive.yaml --- PASS: TestImportStatement (0.01s) --- PASS: TestImportStatement/(data)/apps/allow-api-routes.yaml (0.00s) --- PASS: TestImportStatement/(data)/apps/bookstack-saml.yaml (0.00s) --- PASS: TestImportStatement/(data)/apps/gitea-rss-feeds.yaml (0.00s) --- PASS: TestImportStatement/(data)/apps/qualys-ssl-labs.yml (0.00s) --- PASS: TestImportStatement/(data)/apps/searx-checker.yml (0.00s) --- PASS: TestImportStatement/(data)/bots/_deny-pathological.yaml (0.00s) --- PASS: TestImportStatement/(data)/bots/aggressive-brazilian-scrapers.yaml (0.00s) --- PASS: TestImportStatement/(data)/bots/ai-catchall.yaml (0.00s) --- PASS: TestImportStatement/(data)/bots/ai-robots-txt.yaml (0.00s) --- PASS: TestImportStatement/(data)/bots/cloudflare-workers.yaml (0.00s) --- PASS: TestImportStatement/(data)/bots/headless-browsers.yaml (0.00s) --- PASS: TestImportStatement/(data)/bots/irc-bots/archlinux-phrik.yaml (0.00s) --- PASS: TestImportStatement/(data)/bots/irc-bots/gentoo-chat.yaml (0.00s) --- PASS: TestImportStatement/(data)/bots/us-ai-scraper.yaml (0.00s) --- PASS: TestImportStatement/(data)/common/allow-api-like.yaml (0.00s) --- PASS: TestImportStatement/(data)/common/allow-private-addresses.yaml (0.00s) --- PASS: TestImportStatement/(data)/common/json-api.yaml (0.00s) --- PASS: TestImportStatement/(data)/common/keep-internet-working.yaml (0.00s) --- PASS: TestImportStatement/(data)/common/rfc-violations.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/_allow-good.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/ai-search.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/ai-training.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/applebot.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/bingbot.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/commoncrawl.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/duckduckbot.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/googlebot.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/internet-archive.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/kagibot.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/marginalia.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/mojeekbot.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/openai-gptbot.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/openai-searchbot.yaml (0.00s) --- PASS: TestImportStatement/(data)/crawlers/qwantbot.yaml (0.00s) --- PASS: TestImportStatement/(data)/meta/ai-block-aggressive.yaml (0.00s) --- PASS: TestImportStatement/(data)/meta/ai-block-moderate.yaml (0.00s) --- PASS: TestImportStatement/(data)/meta/ai-block-permissive.yaml (0.00s) === RUN TestConfigValidBad === RUN TestConfigValidBad/badregexes.json config_test.go:320: config is not valid: bot 0: config: bot entry for "path-bad" is not valid: config.Bot: invalid path regex error parsing regexp: missing closing ): `a(b` bot 1: config: bot entry for "user-agent-bad" is not valid: config.Bot: invalid user agent regex error parsing regexp: missing closing ): `a(b` bot 2: config: bot entry for "headers-bad" is not valid: config.Bot: must set either user_agent_regex, path_regex, headers_regex, or remote_addresses === RUN TestConfigValidBad/badregexes.yaml config_test.go:320: config is not valid: bot 0: config: bot entry for "path-bad" is not valid: config.Bot: invalid path regex error parsing regexp: missing closing ): `a(b` bot 1: config: bot entry for "user-agent-bad" is not valid: config.Bot: invalid user agent regex error parsing regexp: missing closing ): `a(b` === RUN TestConfigValidBad/import_and_bot.json config_test.go:320: config is not valid: bot 0: config.BotOrImport: can't set bot rules and import values at the same time === RUN TestConfigValidBad/import_and_bot.yaml config_test.go:320: config is not valid: bot 0: config.BotOrImport: can't set bot rules and import values at the same time === RUN TestConfigValidBad/import_invalid_file.json config_test.go:320: config is not valid: bot 0: config.ImportStatement: invalid source file: (data)/does-not-exist-fake-file.yaml: open does-not-exist-fake-file.yaml: file does not exist === RUN TestConfigValidBad/import_invalid_file.yaml config_test.go:320: config is not valid: bot 0: config.ImportStatement: invalid source file: (data)/does-not-exist-fake-file.yaml: open does-not-exist-fake-file.yaml: file does not exist === RUN TestConfigValidBad/impressum-no-footer.yaml config_test.go:320: errors validating policy config testdata/bad/impressum-no-footer.yaml: config: missing value: impressum footer must be defined === RUN TestConfigValidBad/impressum-no-page-contents.yaml config_test.go:320: errors validating policy config testdata/bad/impressum-no-page-contents.yaml: config: missing value: impressum page title must be defined config: missing value: impressum body title must be defined === RUN TestConfigValidBad/invalid.json config_test.go:320: config is not valid: bot 0: config.BotOrImport: rule definition is invalid, you must set either bot rules or an import statement, not both === RUN TestConfigValidBad/invalid.yaml config_test.go:320: config is not valid: config: must define at least one (1) bot rule === RUN TestConfigValidBad/multiple_expression_types.json config_test.go:320: config is not valid: bot 0: config: bot entry for "multiple-expression-types" is not valid: config: expression block can't contain multiple expression types === RUN TestConfigValidBad/multiple_expression_types.yaml config_test.go:320: config is not valid: bot 0: config: bot entry for "multiple-expression-types" is not valid: config: expression block can't contain multiple expression types === RUN TestConfigValidBad/nobots.json config_test.go:320: config is not valid: config: must define at least one (1) bot rule === RUN TestConfigValidBad/nobots.yaml config_test.go:320: config is not valid: config: must define at least one (1) bot rule === RUN TestConfigValidBad/opengraph_bad_ttl.yaml config_test.go:320: config is not valid: config.OpenGraph: invalid OpenGraph configuration config.OpenGraph: ttl does not parse as a Duration, see https://pkg.go.dev/time#ParseDuration (formatted like 5m -> 5 minutes, 2h -> 2 hours, etc): ParseDuration("taco") returned: time: invalid duration "taco" === RUN TestConfigValidBad/regex_ends_newline.json config_test.go:320: config is not valid: bot 0: config: bot entry for "user-agent-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): user agent regex: "Mozilla\n" bot 1: config: bot entry for "path-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): path regex: "^/evil/.*$\n" bot 2: config: bot entry for "headers-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): header CF-Worker regex: ".*\n" === RUN TestConfigValidBad/regex_ends_newline.yaml config_test.go:320: config is not valid: bot 0: config: bot entry for "user-agent-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): user agent regex: "Mozilla\n" bot 1: config: bot entry for "path-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): path regex: "^/evil/.*$\n" bot 2: config: bot entry for "headers-ends-newline" is not valid: config.Bot: regular expression ends with newline (try >- instead of > in yaml): header CF-Worker regex: ".*\n" === RUN TestConfigValidBad/status-codes-0.json config_test.go:320: config is not valid: status codes not valid: config.StatusCode: status code not valid, must be between 100 and 599: challenge is 0 config.StatusCode: status code not valid, must be between 100 and 599: deny is 0 === RUN TestConfigValidBad/status-codes-0.yaml config_test.go:320: config is not valid: status codes not valid: config.StatusCode: status code not valid, must be between 100 and 599: challenge is 0 config.StatusCode: status code not valid, must be between 100 and 599: deny is 0 === RUN TestConfigValidBad/threshold-challenge-without-challenge.yaml config_test.go:320: config is not valid: threshold 0: config: threshold entry for "extreme-suspicion" is not valid: config.Threshold: a threshold cannot have the WEIGH action === RUN TestConfigValidBad/thresholds.yaml config_test.go:320: config is not valid: threshold 0: config: threshold entry for "extreme-suspicion" is not valid: config.Threshold: a threshold cannot have the WEIGH action === RUN TestConfigValidBad/unparseable.json config_test.go:320: can't parse policy config YAML testdata/bad/unparseable.json: error converting YAML to JSON: yaml: did not find expected node content === RUN TestConfigValidBad/unparseable.yaml config_test.go:320: can't parse policy config YAML testdata/bad/unparseable.yaml: error converting YAML to JSON: yaml: did not find expected node content --- PASS: TestConfigValidBad (0.00s) --- PASS: TestConfigValidBad/badregexes.json (0.00s) --- PASS: TestConfigValidBad/badregexes.yaml (0.00s) --- PASS: TestConfigValidBad/import_and_bot.json (0.00s) --- PASS: TestConfigValidBad/import_and_bot.yaml (0.00s) --- PASS: TestConfigValidBad/import_invalid_file.json (0.00s) --- PASS: TestConfigValidBad/import_invalid_file.yaml (0.00s) --- PASS: TestConfigValidBad/impressum-no-footer.yaml (0.00s) --- PASS: TestConfigValidBad/impressum-no-page-contents.yaml (0.00s) --- PASS: TestConfigValidBad/invalid.json (0.00s) --- PASS: TestConfigValidBad/invalid.yaml (0.00s) --- PASS: TestConfigValidBad/multiple_expression_types.json (0.00s) --- PASS: TestConfigValidBad/multiple_expression_types.yaml (0.00s) --- PASS: TestConfigValidBad/nobots.json (0.00s) --- PASS: TestConfigValidBad/nobots.yaml (0.00s) --- PASS: TestConfigValidBad/opengraph_bad_ttl.yaml (0.00s) --- PASS: TestConfigValidBad/regex_ends_newline.json (0.00s) --- PASS: TestConfigValidBad/regex_ends_newline.yaml (0.00s) --- PASS: TestConfigValidBad/status-codes-0.json (0.00s) --- PASS: TestConfigValidBad/status-codes-0.yaml (0.00s) --- PASS: TestConfigValidBad/threshold-challenge-without-challenge.yaml (0.00s) --- PASS: TestConfigValidBad/thresholds.yaml (0.00s) --- PASS: TestConfigValidBad/unparseable.json (0.00s) --- PASS: TestConfigValidBad/unparseable.yaml (0.00s) === RUN TestBotConfigZero --- PASS: TestBotConfigZero (0.00s) === RUN TestStoreValid === RUN TestStoreValid/no_backend === RUN TestStoreValid/in-memory_backend === RUN TestStoreValid/bbolt_backend === RUN TestStoreValid/valkey_backend === RUN TestStoreValid/valkey_backend_no_URL === RUN TestStoreValid/valkey_backend_bad_URL === RUN TestStoreValid/bbolt_backend_no_path === RUN TestStoreValid/unknown_backend --- PASS: TestStoreValid (0.00s) --- PASS: TestStoreValid/no_backend (0.00s) --- PASS: TestStoreValid/in-memory_backend (0.00s) --- PASS: TestStoreValid/bbolt_backend (0.00s) --- PASS: TestStoreValid/valkey_backend (0.00s) --- PASS: TestStoreValid/valkey_backend_no_URL (0.00s) --- PASS: TestStoreValid/valkey_backend_bad_URL (0.00s) --- PASS: TestStoreValid/bbolt_backend_no_path (0.00s) --- PASS: TestStoreValid/unknown_backend (0.00s) PASS ok github.com/TecharoHQ/anubis/lib/policy/config 0.019s === RUN TestHTTPHeaders === RUN TestHTTPHeaders/contains-existing-header === RUN TestHTTPHeaders/not-contains-missing-header === RUN TestHTTPHeaders/get-existing-header === RUN TestHTTPHeaders/not-get-missing-header --- PASS: TestHTTPHeaders (0.00s) --- PASS: TestHTTPHeaders/contains-existing-header (0.00s) --- PASS: TestHTTPHeaders/not-contains-missing-header (0.00s) --- PASS: TestHTTPHeaders/get-existing-header (0.00s) --- PASS: TestHTTPHeaders/not-get-missing-header (0.00s) === RUN TestURLValues === RUN TestURLValues/contains-existing-key === RUN TestURLValues/not-contains-missing-key === RUN TestURLValues/get-existing-key === RUN TestURLValues/not-get-missing-key --- PASS: TestURLValues (0.00s) --- PASS: TestURLValues/contains-existing-key (0.00s) --- PASS: TestURLValues/not-contains-missing-key (0.00s) --- PASS: TestURLValues/get-existing-key (0.00s) --- PASS: TestURLValues/not-get-missing-key (0.00s) PASS ok github.com/TecharoHQ/anubis/lib/policy/expressions 0.005s === RUN TestJSON --- PASS: TestJSON (0.00s) PASS ok github.com/TecharoHQ/anubis/lib/store 0.002s ? github.com/TecharoHQ/anubis/lib/store/all [no test files] === RUN TestImpl bbolt_test.go:13: /tmp/TestImpl578809877/001/db === RUN TestImpl/basic_get_set_delete === PAUSE TestImpl/basic_get_set_delete === RUN TestImpl/expires === PAUSE TestImpl/expires === CONT TestImpl/basic_get_set_delete === CONT TestImpl/expires --- PASS: TestImpl (0.00s) --- PASS: TestImpl/basic_get_set_delete (0.00s) --- PASS: TestImpl/expires (0.16s) === RUN TestFactoryValid === RUN TestFactoryValid/bad_config === RUN TestFactoryValid/invalid_config === RUN TestFactoryValid/invalid_config/missing_path --- PASS: TestFactoryValid (0.00s) --- PASS: TestFactoryValid/bad_config (0.00s) --- PASS: TestFactoryValid/invalid_config (0.00s) --- PASS: TestFactoryValid/invalid_config/missing_path (0.00s) PASS ok github.com/TecharoHQ/anubis/lib/store/bbolt 0.160s === RUN TestImpl === RUN TestImpl/basic_get_set_delete === PAUSE TestImpl/basic_get_set_delete === RUN TestImpl/expires === PAUSE TestImpl/expires === CONT TestImpl/basic_get_set_delete === CONT TestImpl/expires --- PASS: TestImpl (0.00s) --- PASS: TestImpl/basic_get_set_delete (0.00s) --- PASS: TestImpl/expires (0.16s) PASS ok github.com/TecharoHQ/anubis/lib/store/memory 0.160s ? github.com/TecharoHQ/anubis/lib/store/storetest [no test files] === RUN TestImpl testing.go:26: Recovered from panic: rootless Docker not found. Docker is not running. Testcontainers can't perform is work without it --- SKIP: TestImpl (0.00s) PASS ok github.com/TecharoHQ/anubis/lib/store/valkey 0.007s ? github.com/TecharoHQ/anubis/web [no test files] ? github.com/TecharoHQ/anubis/xess [no test files] >>> anubis: Entering fakeroot... >>> anubis-doc*: Running split function doc... 'usr/share/licenses' -> '/home/buildozer/aports/testing/anubis/pkg/anubis-doc/usr/share/licenses' >>> anubis-doc*: Preparing subpackage anubis-doc... >>> anubis-doc*: Running postcheck for anubis-doc >>> anubis-openrc*: Running split function openrc... 'etc/conf.d' -> '/home/buildozer/aports/testing/anubis/pkg/anubis-openrc/etc/conf.d' 'etc/init.d' -> '/home/buildozer/aports/testing/anubis/pkg/anubis-openrc/etc/init.d' >>> anubis-openrc*: Preparing subpackage anubis-openrc... >>> anubis-openrc*: Running postcheck for anubis-openrc >>> anubis*: Running postcheck for anubis >>> anubis*: Preparing package anubis... >>> anubis*: Stripping binaries >>> anubis-doc*: Scanning shared objects >>> anubis-openrc*: Scanning shared objects >>> anubis*: Scanning shared objects >>> anubis-doc*: Tracing dependencies... >>> anubis-doc*: Package size: 1.0 KB >>> anubis-doc*: Compressing data... >>> anubis-doc*: Create checksum... >>> anubis-doc*: Create anubis-doc-1.21.0-r0.apk >>> anubis-openrc*: Tracing dependencies... >>> anubis-openrc*: Package size: 294.0 B >>> anubis-openrc*: Compressing data... >>> anubis-openrc*: Create checksum... >>> anubis-openrc*: Create anubis-openrc-1.21.0-r0.apk >>> anubis*: Tracing dependencies... so:libc.musl-s390x.so.1 >>> anubis*: Package size: 29.2 MB >>> anubis*: Compressing data... >>> anubis*: Create checksum... >>> anubis*: Create anubis-1.21.0-r0.apk >>> anubis: Build complete at Thu, 17 Jul 2025 11:25:32 +0000 elapsed time 0h 0m 24s >>> anubis: Cleaning up srcdir >>> anubis: Cleaning up pkgdir >>> anubis: Uninstalling dependencies... (1/2) Purging .makedepends-anubis (20250717.112509) (2/2) Purging go (1.24.5-r1) busybox-1.37.0-r19.trigger: Executing script... OK: 361 MiB in 108 packages >>> anubis: Updating the testing/s390x repository index... >>> anubis: Signing the index...