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 }