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  }