feat: add ignoreURLs and tests for all ignore* options
This commit is contained in:
parent
b6d30d47ac
commit
465ea8b64e
5 changed files with 243 additions and 66 deletions
145
umami_test.go
Normal file
145
umami_test.go
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
package traefik_umami_feeder
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestTraefikUmamiFeeder(t *testing.T) {
|
||||
t.Skip("requires a running Umami instance, see /demo/docker-compose.yml")
|
||||
|
||||
cfg := CreateConfig()
|
||||
cfg.UmamiHost = "http://localhost:3000"
|
||||
cfg.UmamiUsername = "admin"
|
||||
cfg.UmamiPassword = "umami"
|
||||
cfg.UmamiTeamId = "8e39c6ad-e44a-4d3e-be98-015db2d62d40"
|
||||
cfg.CreateNewWebsites = true
|
||||
|
||||
ctx := context.Background()
|
||||
next := http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {})
|
||||
|
||||
handler, err := New(ctx, next, cfg, "umami-feeder")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
recorder := httptest.NewRecorder()
|
||||
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, "http://localhost:80", nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
handler.ServeHTTP(recorder, req)
|
||||
}
|
||||
|
||||
func TestShouldTrackDefault(t *testing.T) {
|
||||
feeder := UmamiFeeder{}
|
||||
|
||||
assertResource(t, feeder, true, "http://localhost")
|
||||
assertResource(t, feeder, true, "http://localhost/about")
|
||||
assertResource(t, feeder, true, "http://localhost/products.html")
|
||||
assertResource(t, feeder, true, "http://localhost/blog.php")
|
||||
assertResource(t, feeder, true, "http://localhost/feed.rss")
|
||||
assertResource(t, feeder, false, "http://localhost/favicon.ico")
|
||||
assertResource(t, feeder, false, "http://localhost/photo.jpg")
|
||||
assertResource(t, feeder, false, "http://localhost/background.png")
|
||||
}
|
||||
|
||||
func assertResource(t *testing.T, plugin UmamiFeeder, expected bool, url string) {
|
||||
if expected != plugin.shouldTrackResource(url) {
|
||||
t.Fatalf("expected %v for %s", expected, url)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShouldTrackInvalidIp(t *testing.T) {
|
||||
feeder := UmamiFeeder{}
|
||||
err := feeder.verifyConfig(&Config{
|
||||
IgnoreIPs: []string{"127.0.0.1-127.0.0.10"},
|
||||
})
|
||||
|
||||
if err == nil {
|
||||
t.Fatal("should have failed with invalid IP")
|
||||
}
|
||||
}
|
||||
|
||||
func TestShouldTrackIps(t *testing.T) {
|
||||
feeder := UmamiFeeder{createNewWebsites: true}
|
||||
err := feeder.verifyConfig(&Config{
|
||||
IgnoreIPs: []string{"127.0.0.1", "10.0.0.1/24"},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
assertIgnoreIp(t, feeder, true, "192.168.0.1")
|
||||
assertIgnoreIp(t, feeder, false, "127.0.0.1")
|
||||
assertIgnoreIp(t, feeder, false, "10.0.0.1")
|
||||
assertIgnoreIp(t, feeder, false, "10.0.0.255")
|
||||
assertIgnoreIp(t, feeder, true, "10.0.1.1")
|
||||
assertIgnoreIp(t, feeder, true, "10.10.10.1")
|
||||
assertIgnoreIp(t, feeder, true, "1.1.1.1")
|
||||
assertIgnoreIp(t, feeder, true, "8.8.8.8")
|
||||
}
|
||||
|
||||
func assertIgnoreIp(t *testing.T, plugin UmamiFeeder, expected bool, clientIp string) {
|
||||
req, _ := http.NewRequestWithContext(context.Background(), http.MethodGet, "http://localhost", nil)
|
||||
req.Header.Set(plugin.headerIp, clientIp)
|
||||
|
||||
if expected != plugin.shouldTrack(req) {
|
||||
t.Fatalf("expected %v for %s", expected, clientIp)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShouldTrackUrls(t *testing.T) {
|
||||
feeder := UmamiFeeder{createNewWebsites: true}
|
||||
err := feeder.verifyConfig(&Config{
|
||||
IgnoreURLs: []string{"https?://[^/]+/health$", "/about"},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
assertIgnoreUrl(t, feeder, false, "http://localhost/health")
|
||||
assertIgnoreUrl(t, feeder, true, "http://localhost/user/health")
|
||||
assertIgnoreUrl(t, feeder, true, "http://localhost/healthcheck")
|
||||
assertIgnoreUrl(t, feeder, true, "http://localhost/")
|
||||
assertIgnoreUrl(t, feeder, false, "http://localhost/about")
|
||||
assertIgnoreUrl(t, feeder, false, "http://localhost/aboutus")
|
||||
assertIgnoreUrl(t, feeder, false, "http://localhost/category/about")
|
||||
assertIgnoreUrl(t, feeder, true, "http://localhost/hello-world")
|
||||
}
|
||||
|
||||
func assertIgnoreUrl(t *testing.T, plugin UmamiFeeder, expected bool, url string) {
|
||||
req, _ := http.NewRequestWithContext(context.Background(), http.MethodGet, url, nil)
|
||||
|
||||
if expected != plugin.shouldTrack(req) {
|
||||
t.Fatalf("expected %v for %s", expected, url)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShouldTrackUserAgents(t *testing.T) {
|
||||
feeder := UmamiFeeder{createNewWebsites: true, ignoreUserAgents: []string{"Googlebot", "Uptime-Kuma"}}
|
||||
|
||||
assertIgnoreUa(t, feeder, true, "Mozilla/5.0 (Windows; Windows NT 6.0; WOW64) Gecko/20100101 Firefox/60.7")
|
||||
assertIgnoreUa(t, feeder, true, "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; Win64; x64 Trident/6.0)")
|
||||
assertIgnoreUa(t, feeder, true, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36")
|
||||
assertIgnoreUa(t, feeder, false, "Uptime-Kuma/1.18.5")
|
||||
assertIgnoreUa(t, feeder, false, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/90.0.4430.212 Safari/537.36 Uptime-Kuma/1.23.1")
|
||||
assertIgnoreUa(t, feeder, true, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36")
|
||||
assertIgnoreUa(t, feeder, false, "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)")
|
||||
assertIgnoreUa(t, feeder, false, "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)")
|
||||
}
|
||||
|
||||
func assertIgnoreUa(t *testing.T, plugin UmamiFeeder, expected bool, ua string) {
|
||||
req, _ := http.NewRequestWithContext(context.Background(), http.MethodGet, "http://localhost/", nil)
|
||||
req.Header.Set("User-Agent", ua)
|
||||
|
||||
if expected != plugin.shouldTrack(req) {
|
||||
t.Fatalf("expected %v for %s", expected, ua)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue