github.com/clly/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  }