40 lines
1.7 KiB
Go
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")
|
|
}
|
|
}
|