Files
go-otel/internal/uaclass/uaclass_test.go
mats 645f923175
Build and Publish / Metadata (push) Successful in 10s
Build and Publish / BuildAndDeployAmd64 (push) Successful in 2m16s
include db for gitea build
2026-09-20 11:01:56 +02:00

40 lines
1.7 KiB
Go

package uaclass
import "testing"
func TestClassify(t *testing.T) {
cases := []struct{ ua, class, name string }{
{"", None, ""},
{"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot)", AICrawler, "GPTBot"},
{"Mozilla/5.0 (compatible; ClaudeBot/1.0; +claudebot@anthropic.com)", AICrawler, "ClaudeBot"},
{"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0", AIAgent, "ChatGPT-User"},
{"claude-code/2.1.0 (external, cli)", AIAgent, "Claude Code"},
{"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", SearchCrawler, "Googlebot"},
{"Mozilla/5.0 (compatible; AhrefsBot/7.0)", SEOCrawler, "AhrefsBot"},
{"Uptime-Kuma/1.23.11", Monitor, "Uptime-Kuma"},
{"kube-probe/1.31", Monitor, "kube-probe"},
{"CameraScannerV3/1.0", ScanTool, "CameraScanner"},
{"Go-http-client/2.0", Library, "Go-http-client"},
{"node", Library, "node"},
{"curl/8.5.0", Library, "curl"},
{"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36", Browser, ""},
{"Mozilla/5.0 (compatible; SomeNewFooBot/3.1)", OtherBot, ""},
{"Mozilla/5.0 (Macintosh) Nodeblock", Browser, ""}, // "node" must not match inside a browser UA
{"Mozilla/5.0 (compatible; Kimi-SearchBot/1.0; +https://www.moonshot.cn)", AICrawler, "Kimi-SearchBot"},
{"libredtail-http", ScanTool, "libredtail-http"},
{"weird-thing", Unknown, ""},
}
for _, c := range cases {
got := Classify(c.ua)
if got.Class != c.class || got.Name != c.name {
t.Errorf("Classify(%q) = %+v, want %s/%s", c.ua, got, c.class, c.name)
}
}
}
func TestIsBot(t *testing.T) {
if !IsBot(AICrawler) || IsBot(Browser) || IsBot(None) || IsBot(Unknown) {
t.Fatal("IsBot mismatch")
}
}