github.com/xmidt-org/webpa-common@v1.11.9/service/accessorFactory_test.go (about)

     1  package service
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/xmidt-org/webpa-common/xhttp/gate"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func testNewConsistentAccessorEmpty(t *testing.T) {
    13  	var (
    14  		assert  = assert.New(t)
    15  		require = require.New(t)
    16  	)
    17  
    18  	for _, i := range [][]string{nil, []string{}} {
    19  		a := newConsistentAccessor(111, i)
    20  		require.NotNil(a)
    21  		i, err := a.Get([]byte("test"))
    22  		assert.Empty(i)
    23  		assert.Error(err)
    24  	}
    25  }
    26  
    27  func testNewConsistentAccessorNonEmpty(t *testing.T) {
    28  	var (
    29  		assert  = assert.New(t)
    30  		require = require.New(t)
    31  
    32  		a = newConsistentAccessor(123, []string{"an instance"})
    33  	)
    34  
    35  	require.NotNil(a)
    36  	for _, k := range []string{"a", "alsdkjfa;lksehjuro8iwurjhf", "asdf8974", "875kjh4", "928375hjdfgkyu9832745kjshdfgoi873465"} {
    37  		i, err := a.Get([]byte(k))
    38  		assert.Equal("an instance", i)
    39  		assert.NoError(err)
    40  	}
    41  }
    42  
    43  func TestNewConsistentAccessor(t *testing.T) {
    44  	t.Run("Empty", testNewConsistentAccessorEmpty)
    45  	t.Run("Nonempty", testNewConsistentAccessorNonEmpty)
    46  }
    47  
    48  func testNewConsistentAccessorFactory(t *testing.T, vnodeCount int) {
    49  	var (
    50  		assert  = assert.New(t)
    51  		require = require.New(t)
    52  
    53  		af = NewConsistentAccessorFactory(vnodeCount)
    54  	)
    55  
    56  	require.NotNil(af)
    57  	a := af([]string{"an instance"})
    58  	require.NotNil(a)
    59  	for _, k := range []string{"a", "alsdkjfa;lksehjuro8iwurjhf", "asdf8974", "875kjh4", "928375hjdfgkyu9832745kjshdfgoi873465"} {
    60  		i, err := a.Get([]byte(k))
    61  		assert.Equal("an instance", i)
    62  		assert.NoError(err)
    63  	}
    64  }
    65  
    66  func TestNewConsistentAccessorFactory(t *testing.T) {
    67  	for _, v := range []int{-1, 0, 123, DefaultVnodeCount, 756} {
    68  		t.Run(fmt.Sprintf("vnodeCount=%d", v), func(t *testing.T) {
    69  			testNewConsistentAccessorFactory(t, v)
    70  		})
    71  	}
    72  }
    73  
    74  func testNewConsistentAccessorFactoryWithGate(t *testing.T, vnodeCount int, g gate.Interface) {
    75  	var (
    76  		assert  = assert.New(t)
    77  		require = require.New(t)
    78  
    79  		af = NewConsistentAccessorFactoryWithGate(vnodeCount, g)
    80  	)
    81  
    82  	require.NotNil(af)
    83  	a := af([]string{"an instance"})
    84  	require.NotNil(a)
    85  	for _, k := range []string{"a", "alsdkjfa;lksehjuro8iwurjhf", "asdf8974", "875kjh4", "928375hjdfgkyu9832745kjshdfgoi873465"} {
    86  		i, err := a.Get([]byte(k))
    87  		assert.Equal("an instance", i)
    88  		if (g != nil && g.Open()) || g == nil {
    89  			assert.NoError(err)
    90  		} else if g != nil && !g.Open() {
    91  			assert.Error(err)
    92  		}
    93  	}
    94  }
    95  
    96  func TestNewConsistentAccessorFactoryWithGate(t *testing.T) {
    97  	for _, v := range []int{-1, 0, 123, DefaultVnodeCount, 756} {
    98  		t.Run(fmt.Sprintf("vnodeCount=%d", v), func(t *testing.T) {
    99  			t.Run("NilGate", func(t *testing.T) {
   100  				testNewConsistentAccessorFactoryWithGate(t, v, nil)
   101  			})
   102  			t.Run("GateUp", func(t *testing.T) {
   103  				testNewConsistentAccessorFactoryWithGate(t, v, gate.New(true))
   104  			})
   105  			t.Run("GateDown", func(t *testing.T) {
   106  				testNewConsistentAccessorFactoryWithGate(t, v, gate.New(false))
   107  			})
   108  		})
   109  	}
   110  }
   111  
   112  func TestDefaultAccessorFactory(t *testing.T) {
   113  	var (
   114  		assert  = assert.New(t)
   115  		require = require.New(t)
   116  
   117  		a = DefaultAccessorFactory([]string{"an instance"})
   118  	)
   119  
   120  	require.NotNil(a)
   121  	for _, k := range []string{"a", "alsdkjfa;lksehjuro8iwurjhf", "asdf8974", "875kjh4", "928375hjdfgkyu9832745kjshdfgoi873465"} {
   122  		i, err := a.Get([]byte(k))
   123  		assert.Equal("an instance", i)
   124  		assert.NoError(err)
   125  	}
   126  }