|
|
@@ -4,6 +4,7 @@ import (
|
|
|
"errors"
|
|
|
"net/http"
|
|
|
"net/http/httptest"
|
|
|
+ "path/filepath"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"sync"
|
|
|
@@ -298,3 +299,57 @@ func TestExpandEntryCacheHitWritesNothing(t *testing.T) {
|
|
|
t.Fatalf("cache hit wrote fetch status: %#v", after)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func TestFetchUsesConfiguredExternalSubUserAgent(t *testing.T) {
|
|
|
+ resetSubscriptionCache(t)
|
|
|
+ if err := database.InitDB(filepath.Join(t.TempDir(), "ua.db")); err != nil {
|
|
|
+ t.Fatalf("InitDB: %v", err)
|
|
|
+ }
|
|
|
+ t.Cleanup(func() { _ = database.CloseDB() })
|
|
|
+
|
|
|
+ const customUA = "Happ/4.2.1"
|
|
|
+ if err := database.GetDB().Create(&model.Setting{
|
|
|
+ Key: "externalSubUserAgent",
|
|
|
+ Value: customUA,
|
|
|
+ }).Error; err != nil {
|
|
|
+ t.Fatalf("save setting: %v", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ var gotUA string
|
|
|
+ srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
|
+ gotUA = r.Header.Get("User-Agent")
|
|
|
+ _, _ = w.Write([]byte("vless://uuid@host:443?security=none#x"))
|
|
|
+ }))
|
|
|
+ defer srv.Close()
|
|
|
+
|
|
|
+ res := fetchSubscriptionLinks(srv.URL)
|
|
|
+ if res.err != nil {
|
|
|
+ t.Fatalf("fetch: %v", res.err)
|
|
|
+ }
|
|
|
+ if gotUA != customUA {
|
|
|
+ t.Fatalf("User-Agent = %q, want %q", gotUA, customUA)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestFetchFallsBackToDefaultExternalSubUserAgent(t *testing.T) {
|
|
|
+ resetSubscriptionCache(t)
|
|
|
+ if err := database.InitDB(filepath.Join(t.TempDir(), "ua-default.db")); err != nil {
|
|
|
+ t.Fatalf("InitDB: %v", err)
|
|
|
+ }
|
|
|
+ t.Cleanup(func() { _ = database.CloseDB() })
|
|
|
+
|
|
|
+ var gotUA string
|
|
|
+ srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
|
+ gotUA = r.Header.Get("User-Agent")
|
|
|
+ _, _ = w.Write([]byte("vless://uuid@host:443?security=none#x"))
|
|
|
+ }))
|
|
|
+ defer srv.Close()
|
|
|
+
|
|
|
+ res := fetchSubscriptionLinks(srv.URL)
|
|
|
+ if res.err != nil {
|
|
|
+ t.Fatalf("fetch: %v", res.err)
|
|
|
+ }
|
|
|
+ if gotUA != "v2rayNG/1.8.5" {
|
|
|
+ t.Fatalf("User-Agent = %q, want default v2rayNG/1.8.5", gotUA)
|
|
|
+ }
|
|
|
+}
|