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  }