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  }