github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/httputil/server_test.go (about) 1 package httputil 2 3 import ( 4 "fmt" 5 "net/http" 6 "testing" 7 ) 8 9 func TestHostSubdomainOf(t *testing.T) { 10 type args struct { 11 v []string 12 } 13 tests := []struct { 14 name string 15 args args 16 host string 17 want bool 18 }{ 19 {name: "empty", args: args{v: []string{}}, host: "s3", want: false}, 20 {name: "short", args: args{v: []string{"s3.local.io"}}, host: "s3", want: false}, 21 {name: "short many", args: args{v: []string{"s3.local.io", "s3.dev.invalid"}}, host: "s3", want: false}, 22 {name: "extract", args: args{v: []string{"s3.local.io"}}, host: "s3.local.io", want: false}, 23 {name: "extract many", args: args{v: []string{"s3.dev.invalid", "s3.local.io"}}, host: "s3.local.io", want: false}, 24 {name: "no sub", args: args{v: []string{"s3.local.io"}}, host: ".s3.local.io", want: false}, 25 {name: "no sub many", args: args{v: []string{"s3.dev.invalid", "s3.local.io"}}, host: ".s3.local.io", want: false}, 26 {name: "dot sub", args: args{v: []string{"s3.local.io"}}, host: "..s3.local.io", want: false}, 27 {name: "dot sub many", args: args{v: []string{"s3.local.io", "s3.dev.invalid"}}, host: "..s3.local.io", want: false}, 28 {name: "invalid1", args: args{v: []string{"s3.local.io"}}, host: "1.asdfsa.s3.local.io", want: false}, 29 {name: "invalid1 many", args: args{v: []string{"s3.local.io", "s3.dev.invalid"}}, host: "1.asdfsa.s3.local.io", want: false}, 30 {name: "invalid2", args: args{v: []string{"s3.local.io"}}, host: ".asdfsa.s3.local.io", want: false}, 31 {name: "invalid2 many", args: args{v: []string{"s3.local.io", "s3.dev.invalid"}}, host: ".asdfsa.s3.local.io", want: false}, 32 {name: "subdomain", args: args{v: []string{"s3.local.io"}}, host: "asdfsa.s3.local.io", want: true}, 33 {name: "subdomain many", args: args{v: []string{"s3.dev.invalid", "s3.local.io", "s3.example.net"}}, host: "asdfsa.s3.local.io", want: true}, 34 {name: "subdomain port", args: args{v: []string{"s3.local.io:8000"}}, host: "sub.s3.local.io", want: true}, 35 {name: "subdomain port many", args: args{v: []string{"s3.dev.invalid:2000", "s3.local.io:8000", "s3.example.net:9000"}}, host: "sub.s3.local.io", want: true}, 36 } 37 for _, tt := range tests { 38 t.Run(tt.name, func(t *testing.T) { 39 r, err := http.NewRequest("GET", fmt.Sprintf("https://%s/", tt.host), nil) 40 if err != nil { 41 t.Fatal(err) 42 } 43 got := HostSubdomainOf(r, tt.args.v) 44 if got != tt.want { 45 t.Errorf("HostSubdomainOf() '%s' test with '%s' got = %t, want = %t", tt.args.v, tt.host, got, tt.want) 46 } 47 }) 48 } 49 } 50 51 func TestHostMatches(t *testing.T) { 52 type args struct { 53 v []string 54 } 55 tests := []struct { 56 name string 57 args args 58 host string 59 want bool 60 }{ 61 {name: "empty", args: args{v: []string{}}, host: "s3", want: false}, 62 {name: "short", args: args{v: []string{"s3.local.io"}}, host: "s3", want: false}, 63 {name: "short many", args: args{v: []string{"s3.local.io", "s3.dev.invalid"}}, host: "s3", want: false}, 64 {name: "extract", args: args{v: []string{"s3.local.io"}}, host: "s3.local.io", want: true}, 65 {name: "extract many", args: args{v: []string{"s3.dev.invalid", "s3.local.io", "s3.example.net"}}, host: "s3.local.io", want: true}, 66 {name: "subdomain", args: args{v: []string{"s3.local.io"}}, host: "sub.s3.local.io", want: false}, 67 {name: "subdomain many", args: args{v: []string{"s3.dev.invalid", "s3.local.io"}}, host: "sub.s3.local.io", want: false}, 68 {name: "empty", args: args{v: []string{"s3.local.io"}}, host: "", want: false}, 69 {name: "empty many", args: args{v: []string{"s3.dev.invalid", "s3.local.io"}}, host: "", want: false}, 70 } 71 for _, tt := range tests { 72 t.Run(tt.name, func(t *testing.T) { 73 r, err := http.NewRequest("GET", fmt.Sprintf("https://%s/", tt.host), nil) 74 if err != nil { 75 t.Fatal(err) 76 } 77 got := HostMatches(r, tt.args.v) 78 if got != tt.want { 79 t.Errorf("HostMatches() '%s' test with '%s' got = %t, want = %t", tt.args.v, tt.host, got, tt.want) 80 } 81 }) 82 } 83 }