// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. //go:build plus package uam_test import ( "encoding/json" "github.com/TeaOSLab/EdgeNode/internal/uam" "github.com/iwind/TeaGo/assert" "github.com/iwind/TeaGo/types" "net/http" "testing" ) func TestManager_ComposeKey(t *testing.T) { manager, err := uam.NewManager("abc", "123") if err != nil { t.Fatal(err) } req, err := http.NewRequest(http.MethodGet, "https://127.0.0.1/hello", nil) if err != nil { t.Fatal(err) } req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.83 Safari/537.36") t.Logf("%#v", manager.ComposeKey(req, "127.0.0.1")) } func TestManager_GeneratePrevKey(t *testing.T) { manager, err := uam.NewManager("abc", "123") if err != nil { t.Fatal(err) } req, err := http.NewRequest(http.MethodGet, "https://127.0.0.1/hello", nil) if err != nil { t.Fatal(err) } req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.83 Safari/537.36") key, err := manager.EncodeKey(manager.ComposeKey(req, "127.0.0.1")) if err != nil { t.Fatal(err) } t.Log("[" + types.String(len(key)) + "]" + key) } func TestParseTopDomain(t *testing.T) { var a = assert.NewAssertion(t) manager, err := uam.NewManager("", "") if err != nil { t.Fatal(err) } a.IsTrue(manager.ParseTopDomain("") == "") a.IsTrue(manager.ParseTopDomain("192.168.1.1") == "192.168.1.1") a.IsTrue(manager.ParseTopDomain("192.168.1.1:1234") == "192.168.1.1") a.IsTrue(manager.ParseTopDomain("example.com") == "example.com") a.IsTrue(manager.ParseTopDomain("sub.example.com") == "example.com") a.IsTrue(manager.ParseTopDomain("google") == "google") a.IsTrue(manager.ParseTopDomain("sub1.sub2.sub3.sub.example.com") == "example.com") a.IsTrue(manager.ParseTopDomain("example.com.cn") == "example.com.cn") a.IsTrue(manager.ParseTopDomain("example.net.cn") == "example.net.cn") a.IsTrue(manager.ParseTopDomain("example.org.cn") == "example.org.cn") a.IsTrue(manager.ParseTopDomain("sub.example.com.cn") == "example.com.cn") a.IsTrue(manager.ParseTopDomain("a.中国") == "a.中国") a.IsTrue(manager.ParseTopDomain("b.a.中国") == "a.中国") } func BenchmarkManager_MarshalKey_PB(b *testing.B) { manager, err := uam.NewManager("abc", "123") if err != nil { b.Fatal(err) } req, err := http.NewRequest(http.MethodGet, "https://127.0.0.1/hello", nil) if err != nil { b.Fatal(err) } req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.83 Safari/537.36") b.ResetTimer() for i := 0; i < b.N; i++ { _, _ = manager.ComposeKey(req, "127.0.0.1").AsPB() } } func BenchmarkManager_MarshalKey_JSON(b *testing.B) { manager, err := uam.NewManager("abc", "123") if err != nil { b.Fatal(err) } req, err := http.NewRequest(http.MethodGet, "https://127.0.0.1/hello", nil) if err != nil { b.Fatal(err) } req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.83 Safari/537.36") b.ResetTimer() for i := 0; i < b.N; i++ { _, _ = json.Marshal(manager.ComposeKey(req, "127.0.0.1")) } }