github.com/justincormack/cli@v0.0.0-20201215022714-831ebeae9675/cli/command/swarm/opts_test.go (about) 1 package swarm 2 3 import ( 4 "testing" 5 6 "gotest.tools/v3/assert" 7 is "gotest.tools/v3/assert/cmp" 8 ) 9 10 func TestNodeAddrOptionSetHostAndPort(t *testing.T) { 11 opt := NewNodeAddrOption("old:123") 12 addr := "newhost:5555" 13 assert.NilError(t, opt.Set(addr)) 14 assert.Check(t, is.Equal(addr, opt.Value())) 15 } 16 17 func TestNodeAddrOptionSetHostOnly(t *testing.T) { 18 opt := NewListenAddrOption() 19 assert.NilError(t, opt.Set("newhost")) 20 assert.Check(t, is.Equal("newhost:2377", opt.Value())) 21 } 22 23 func TestNodeAddrOptionSetHostOnlyIPv6(t *testing.T) { 24 opt := NewListenAddrOption() 25 assert.NilError(t, opt.Set("::1")) 26 assert.Check(t, is.Equal("[::1]:2377", opt.Value())) 27 } 28 29 func TestNodeAddrOptionSetPortOnly(t *testing.T) { 30 opt := NewListenAddrOption() 31 assert.NilError(t, opt.Set(":4545")) 32 assert.Check(t, is.Equal("0.0.0.0:4545", opt.Value())) 33 } 34 35 func TestNodeAddrOptionSetInvalidFormat(t *testing.T) { 36 opt := NewListenAddrOption() 37 assert.Error(t, opt.Set("http://localhost:4545"), "Invalid proto, expected tcp: http://localhost:4545") 38 } 39 40 func TestExternalCAOptionErrors(t *testing.T) { 41 testCases := []struct { 42 externalCA string 43 expectedError string 44 }{ 45 { 46 externalCA: "", 47 expectedError: "EOF", 48 }, 49 { 50 externalCA: "anything", 51 expectedError: "invalid field 'anything' must be a key=value pair", 52 }, 53 { 54 externalCA: "foo=bar", 55 expectedError: "the external-ca option needs a protocol= parameter", 56 }, 57 { 58 externalCA: "protocol=baz", 59 expectedError: "unrecognized external CA protocol baz", 60 }, 61 { 62 externalCA: "protocol=cfssl", 63 expectedError: "the external-ca option needs a url= parameter", 64 }, 65 } 66 for _, tc := range testCases { 67 opt := &ExternalCAOption{} 68 assert.Error(t, opt.Set(tc.externalCA), tc.expectedError) 69 } 70 } 71 72 func TestExternalCAOption(t *testing.T) { 73 testCases := []struct { 74 externalCA string 75 expected string 76 }{ 77 { 78 externalCA: "protocol=cfssl,url=anything", 79 expected: "cfssl: anything", 80 }, 81 { 82 externalCA: "protocol=CFSSL,url=anything", 83 expected: "cfssl: anything", 84 }, 85 { 86 externalCA: "protocol=Cfssl,url=https://example.com", 87 expected: "cfssl: https://example.com", 88 }, 89 { 90 externalCA: "protocol=Cfssl,url=https://example.com,foo=bar", 91 expected: "cfssl: https://example.com", 92 }, 93 { 94 externalCA: "protocol=Cfssl,url=https://example.com,foo=bar,foo=baz", 95 expected: "cfssl: https://example.com", 96 }, 97 } 98 for _, tc := range testCases { 99 opt := &ExternalCAOption{} 100 assert.NilError(t, opt.Set(tc.externalCA)) 101 assert.Check(t, is.Equal(tc.expected, opt.String())) 102 } 103 } 104 105 func TestExternalCAOptionMultiple(t *testing.T) { 106 opt := &ExternalCAOption{} 107 assert.NilError(t, opt.Set("protocol=cfssl,url=https://example.com")) 108 assert.NilError(t, opt.Set("protocol=CFSSL,url=anything")) 109 assert.Check(t, is.Len(opt.Value(), 2)) 110 assert.Check(t, is.Equal("cfssl: https://example.com, cfssl: anything", opt.String())) 111 }