github.com/khulnasoft/cli@v0.0.0-20240402070845-01bcad7beefa/opts/network_test.go (about) 1 package opts 2 3 import ( 4 "testing" 5 6 "gotest.tools/v3/assert" 7 is "gotest.tools/v3/assert/cmp" 8 ) 9 10 func TestNetworkOptLegacySyntax(t *testing.T) { 11 testCases := []struct { 12 value string 13 expected []NetworkAttachmentOpts 14 }{ 15 { 16 value: "docknet1", 17 expected: []NetworkAttachmentOpts{ 18 { 19 Target: "docknet1", 20 }, 21 }, 22 }, 23 } 24 for _, tc := range testCases { 25 var network NetworkOpt 26 assert.NilError(t, network.Set(tc.value)) 27 assert.Check(t, is.DeepEqual(tc.expected, network.Value())) 28 } 29 } 30 31 func TestNetworkOptAdvancedSyntax(t *testing.T) { 32 testCases := []struct { 33 value string 34 expected []NetworkAttachmentOpts 35 }{ 36 { 37 value: "name=docknet1,alias=web,driver-opt=field1=value1", 38 expected: []NetworkAttachmentOpts{ 39 { 40 Target: "docknet1", 41 Aliases: []string{"web"}, 42 DriverOpts: map[string]string{ 43 "field1": "value1", 44 }, 45 }, 46 }, 47 }, 48 { 49 value: "name=docknet1,alias=web1,alias=web2,driver-opt=field1=value1,driver-opt=field2=value2", 50 expected: []NetworkAttachmentOpts{ 51 { 52 Target: "docknet1", 53 Aliases: []string{"web1", "web2"}, 54 DriverOpts: map[string]string{ 55 "field1": "value1", 56 "field2": "value2", 57 }, 58 }, 59 }, 60 }, 61 { 62 value: "name=docknet1,ip=172.20.88.22,ip6=2001:db8::8822", 63 expected: []NetworkAttachmentOpts{ 64 { 65 Target: "docknet1", 66 Aliases: []string{}, 67 IPv4Address: "172.20.88.22", 68 IPv6Address: "2001:db8::8822", 69 }, 70 }, 71 }, 72 { 73 value: "name=docknet1", 74 expected: []NetworkAttachmentOpts{ 75 { 76 Target: "docknet1", 77 Aliases: []string{}, 78 }, 79 }, 80 }, 81 { 82 value: "name=docknet1,mac-address=52:0f:f3:dc:50:10", 83 expected: []NetworkAttachmentOpts{ 84 { 85 Target: "docknet1", 86 Aliases: []string{}, 87 MacAddress: "52:0f:f3:dc:50:10", 88 }, 89 }, 90 }, 91 { 92 value: "name=docknet1,link-local-ip=169.254.169.254,link-local-ip=169.254.10.10", 93 expected: []NetworkAttachmentOpts{ 94 { 95 Target: "docknet1", 96 Aliases: []string{}, 97 LinkLocalIPs: []string{"169.254.169.254", "169.254.10.10"}, 98 }, 99 }, 100 }, 101 } 102 for _, tc := range testCases { 103 tc := tc 104 t.Run(tc.value, func(t *testing.T) { 105 var network NetworkOpt 106 assert.NilError(t, network.Set(tc.value)) 107 assert.Check(t, is.DeepEqual(tc.expected, network.Value())) 108 }) 109 } 110 } 111 112 func TestNetworkOptAdvancedSyntaxInvalid(t *testing.T) { 113 testCases := []struct { 114 value string 115 expectedError string 116 }{ 117 { 118 value: "invalidField=docknet1", 119 expectedError: "invalid field", 120 }, 121 { 122 value: "network=docknet1,invalid=web", 123 expectedError: "invalid field", 124 }, 125 { 126 value: "driver-opt=field1=value1,driver-opt=field2=value2", 127 expectedError: "network name/id is not specified", 128 }, 129 } 130 for _, tc := range testCases { 131 tc := tc 132 t.Run(tc.value, func(t *testing.T) { 133 var network NetworkOpt 134 assert.ErrorContains(t, network.Set(tc.value), tc.expectedError) 135 }) 136 } 137 } 138 139 func TestNetworkOptStringNetOptString(t *testing.T) { 140 networkOpt := &NetworkOpt{} 141 result := networkOpt.String() 142 assert.Check(t, is.Equal("", result)) 143 if result != "" { 144 t.Errorf("Expected an empty string, got %s", result) 145 } 146 } 147 148 func TestNetworkOptTypeNetOptType(t *testing.T) { 149 networkOpt := &NetworkOpt{} 150 result := networkOpt.Type() 151 assert.Check(t, is.Equal("network", result)) 152 }