github.imxd.top/hashicorp/consul@v1.4.5/agent/consul/state/index_connect_test.go (about) 1 package state 2 3 import ( 4 "testing" 5 6 "github.com/hashicorp/consul/agent/structs" 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestIndexConnectService_FromObject(t *testing.T) { 11 cases := []struct { 12 Name string 13 Input interface{} 14 ExpectMatch bool 15 ExpectVal []byte 16 ExpectErr string 17 }{ 18 { 19 "not a ServiceNode", 20 42, 21 false, 22 nil, 23 "ServiceNode", 24 }, 25 26 { 27 "typical service, not native", 28 &structs.ServiceNode{ 29 ServiceName: "db", 30 }, 31 false, 32 nil, 33 "", 34 }, 35 36 { 37 "typical service, is native", 38 &structs.ServiceNode{ 39 ServiceName: "dB", 40 ServiceConnect: structs.ServiceConnect{Native: true}, 41 }, 42 true, 43 []byte("db\x00"), 44 "", 45 }, 46 47 { 48 "proxy service", 49 &structs.ServiceNode{ 50 ServiceKind: structs.ServiceKindConnectProxy, 51 ServiceName: "db", 52 ServiceProxy: structs.ConnectProxyConfig{DestinationServiceName: "fOo"}, 53 }, 54 true, 55 []byte("foo\x00"), 56 "", 57 }, 58 } 59 60 for _, tc := range cases { 61 t.Run(tc.Name, func(t *testing.T) { 62 require := require.New(t) 63 64 var idx IndexConnectService 65 match, val, err := idx.FromObject(tc.Input) 66 if tc.ExpectErr != "" { 67 require.Error(err) 68 require.Contains(err.Error(), tc.ExpectErr) 69 return 70 } 71 require.NoError(err) 72 require.Equal(tc.ExpectMatch, match) 73 require.Equal(tc.ExpectVal, val) 74 }) 75 } 76 } 77 78 func TestIndexConnectService_FromArgs(t *testing.T) { 79 cases := []struct { 80 Name string 81 Args []interface{} 82 ExpectVal []byte 83 ExpectErr string 84 }{ 85 { 86 "multiple arguments", 87 []interface{}{"foo", "bar"}, 88 nil, 89 "single", 90 }, 91 92 { 93 "not a string", 94 []interface{}{42}, 95 nil, 96 "must be a string", 97 }, 98 99 { 100 "string", 101 []interface{}{"fOO"}, 102 []byte("foo\x00"), 103 "", 104 }, 105 } 106 107 for _, tc := range cases { 108 t.Run(tc.Name, func(t *testing.T) { 109 require := require.New(t) 110 111 var idx IndexConnectService 112 val, err := idx.FromArgs(tc.Args...) 113 if tc.ExpectErr != "" { 114 require.Error(err) 115 require.Contains(err.Error(), tc.ExpectErr) 116 return 117 } 118 require.NoError(err) 119 require.Equal(tc.ExpectVal, val) 120 }) 121 } 122 }