package opts import ( "testing" "gotest.tools/v3/assert" is "gotest.tools/v3/assert/cmp" ) func TestNetworkOptLegacySyntax(t *testing.T) { testCases := []struct { value string expected []NetworkAttachmentOpts }{ { value: "docknet1", expected: []NetworkAttachmentOpts{ { Target: "docknet1", }, }, }, } for _, tc := range testCases { var network NetworkOpt assert.NilError(t, network.Set(tc.value)) assert.Check(t, is.DeepEqual(tc.expected, network.Value())) } } func TestNetworkOptAdvancedSyntax(t *testing.T) { testCases := []struct { value string expected []NetworkAttachmentOpts }{ { value: "name=docknet1,alias=web,driver-opt=field1=value1", expected: []NetworkAttachmentOpts{ { Target: "docknet1", Aliases: []string{"web"}, DriverOpts: map[string]string{ "field1": "value1", }, }, }, }, { value: "name=docknet1,alias=web1,alias=web2,driver-opt=field1=value1,driver-opt=field2=value2", expected: []NetworkAttachmentOpts{ { Target: "docknet1", Aliases: []string{"web1", "web2"}, DriverOpts: map[string]string{ "field1": "value1", "field2": "value2", }, }, }, }, { value: "name=docknet1", expected: []NetworkAttachmentOpts{ { Target: "docknet1", Aliases: []string{}, }, }, }, } for _, tc := range testCases { tc := tc t.Run(tc.value, func(t *testing.T) { var network NetworkOpt assert.NilError(t, network.Set(tc.value)) assert.Check(t, is.DeepEqual(tc.expected, network.Value())) }) } } func TestNetworkOptAdvancedSyntaxInvalid(t *testing.T) { testCases := []struct { value string expectedError string }{ { value: "invalidField=docknet1", expectedError: "invalid field", }, { value: "network=docknet1,invalid=web", expectedError: "invalid field", }, { value: "driver-opt=field1=value1,driver-opt=field2=value2", expectedError: "network name/id is not specified", }, } for _, tc := range testCases { tc := tc t.Run(tc.value, func(t *testing.T) { var network NetworkOpt assert.ErrorContains(t, network.Set(tc.value), tc.expectedError) }) } }