github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/model/v1beta1/network_test.go (about) 1 package v1beta1 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestNetworkConfig_IsValid(t *testing.T) { 12 tests := []struct { 13 name string 14 domains []string 15 wantErr bool 16 }{ 17 { 18 name: "ip4-is-valid", 19 domains: []string{"192.168.0.1"}, 20 wantErr: false, 21 }, 22 { 23 name: "ip6-is-valid", 24 domains: []string{"0000:0000:0000:0000:0000:0000:0000:0001"}, 25 wantErr: false, 26 }, 27 { 28 name: "a-domain", 29 domains: []string{"example.com"}, 30 wantErr: false, 31 }, 32 { 33 name: "domain-with-dot-at-start-is-okay", 34 domains: []string{".example.com"}, 35 wantErr: false, 36 }, 37 { 38 name: "not-a-domain", 39 domains: []string{"at@.walker"}, 40 wantErr: true, 41 }, 42 { 43 name: "don't-support-cidr", 44 domains: []string{"192.168.0.1/32"}, 45 wantErr: true, 46 }, 47 } 48 for _, tt := range tests { 49 t.Run(tt.name, func(t *testing.T) { 50 n := NetworkConfig{ 51 Type: NetworkHTTP, 52 Domains: tt.domains, 53 } 54 if err := n.IsValid(); tt.wantErr { 55 assert.Error(t, err) 56 } else { 57 assert.NoError(t, err) 58 } 59 }) 60 } 61 } 62 63 func TestDomainSet(t *testing.T) { 64 tests := []struct { 65 input, output []string 66 }{ 67 { 68 []string{"foo.com", "bar.com"}, 69 []string{"foo.com", "bar.com"}, 70 }, 71 { 72 []string{"y.foo.com", ".foo.com", "x.foo.com"}, 73 []string{".foo.com"}, 74 }, 75 { 76 []string{"y.foo.com", "foo.com", "x.foo.com"}, 77 []string{"y.foo.com", "foo.com", "x.foo.com"}, 78 }, 79 } 80 81 for _, test := range tests { 82 t.Run(fmt.Sprintf("%v->%v", test.input, test.output), func(t *testing.T) { 83 set := NetworkConfig{Domains: test.input} 84 require.ElementsMatch(t, test.output, set.DomainSet()) 85 }) 86 } 87 } 88 89 func TestDomainMatching(t *testing.T) { 90 tests := []struct { 91 require func(require.TestingT, interface{}, interface{}, ...interface{}) 92 left, right string 93 }{ 94 {require.Equal, "foo.com", "foo.com"}, 95 {require.Equal, ".foo.com", "foo.com"}, 96 {require.Equal, "foo.com", ".foo.com"}, 97 {require.Equal, " .foo.com", ".foo.com"}, 98 {require.Equal, "x.foo.com", ".foo.com"}, 99 {require.Equal, "y.x.foo.com", ".foo.com"}, 100 {require.NotEqual, "x.foo.com", "foo.com"}, 101 {require.NotEqual, "foo.com", "x.foo.com"}, 102 {require.NotEqual, "bar.com", "foo.com"}, 103 {require.NotEqual, ".bar.com", "foo.com"}, 104 {require.NotEqual, ".bar.com", ".foo.com"}, 105 {require.NotEqual, "bar.com", ".foo.com"}, 106 {require.Less, "zzz.com", "foo.com"}, 107 {require.Greater, "aaa.com", "foo.com"}, 108 {require.Equal, "FOO.com", "foo.COM"}, 109 {require.Less, "bfoo.com", "afoo.com"}, 110 {require.Greater, "afoo.com", "bfoo.com"}, 111 {require.Less, "x-foo.com", ".foo.com"}, 112 } 113 114 for _, test := range tests { 115 t.Run(fmt.Sprintf("%s<=>%s", test.left, test.right), func(t *testing.T) { 116 test.require(t, 0, matchDomain(test.left, test.right)) 117 }) 118 } 119 }