|
|
@@ -0,0 +1,43 @@
|
|
|
+package sub
|
|
|
+
|
|
|
+import (
|
|
|
+ "net/http"
|
|
|
+ "net/http/httptest"
|
|
|
+ "strings"
|
|
|
+ "testing"
|
|
|
+)
|
|
|
+
|
|
|
+func TestDoFetchSubscriptionLinks_RejectsOversizedBody(t *testing.T) {
|
|
|
+ srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
|
+ _, _ = w.Write([]byte(strings.Repeat("a", subscriptionMaxBytes+1)))
|
|
|
+ }))
|
|
|
+ defer srv.Close()
|
|
|
+
|
|
|
+ links, err := doFetchSubscriptionLinks(srv.URL)
|
|
|
+ if err != errSubscriptionBodyTooLarge {
|
|
|
+ t.Fatalf("err = %v, want errSubscriptionBodyTooLarge", err)
|
|
|
+ }
|
|
|
+ if links != nil {
|
|
|
+ t.Fatalf("links = %v, want nil", links)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestDoFetchSubscriptionLinks_AcceptsBodyAtLimit(t *testing.T) {
|
|
|
+ link := "vless://example"
|
|
|
+ body := link + "\n" + strings.Repeat("#", subscriptionMaxBytes-len(link)-1)
|
|
|
+ if len(body) != subscriptionMaxBytes {
|
|
|
+ t.Fatalf("fixture size = %d, want %d", len(body), subscriptionMaxBytes)
|
|
|
+ }
|
|
|
+ srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
|
+ _, _ = w.Write([]byte(body))
|
|
|
+ }))
|
|
|
+ defer srv.Close()
|
|
|
+
|
|
|
+ links, err := doFetchSubscriptionLinks(srv.URL)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("unexpected err: %v", err)
|
|
|
+ }
|
|
|
+ if len(links) != 1 || links[0] != link {
|
|
|
+ t.Fatalf("links = %v, want [%q]", links, link)
|
|
|
+ }
|
|
|
+}
|