github.com/nilium/gitlab-runner@v12.5.0+incompatible/cache/adapter_test.go (about) 1 package cache 2 3 import ( 4 "errors" 5 "testing" 6 "time" 7 8 "github.com/stretchr/testify/assert" 9 10 "gitlab.com/gitlab-org/gitlab-runner/common" 11 ) 12 13 var defaultTimeout = 1 * time.Hour 14 15 type factorizeTestCase struct { 16 adapter Adapter 17 errorOnFactorize error 18 expectedError string 19 expectedAdapter Adapter 20 } 21 22 func prepareMockedFactoriesMap() func() { 23 oldFactories := factories 24 factories = &FactoriesMap{} 25 26 return func() { 27 factories = oldFactories 28 } 29 } 30 31 func makeTestFactory(test factorizeTestCase) Factory { 32 return func(config *common.CacheConfig, timeout time.Duration, objectName string) (Adapter, error) { 33 if test.errorOnFactorize != nil { 34 return nil, test.errorOnFactorize 35 } 36 37 return test.adapter, nil 38 } 39 } 40 41 func TestCreateAdapter(t *testing.T) { 42 adapterMock := new(MockAdapter) 43 44 tests := map[string]factorizeTestCase{ 45 "adapter doesn't exist": { 46 adapter: nil, 47 errorOnFactorize: nil, 48 expectedAdapter: nil, 49 expectedError: `cache factory not found: factory for cache adapter \"test\" was not registered`, 50 }, 51 "adapter exists": { 52 adapter: adapterMock, 53 errorOnFactorize: nil, 54 expectedAdapter: adapterMock, 55 expectedError: "", 56 }, 57 "adapter errors on factorize": { 58 adapter: adapterMock, 59 errorOnFactorize: errors.New("test error"), 60 expectedAdapter: nil, 61 expectedError: `cache adapter could not be initialized: test error`, 62 }, 63 } 64 65 for name, test := range tests { 66 t.Run(name, func(t *testing.T) { 67 cleanupFactoriesMap := prepareMockedFactoriesMap() 68 defer cleanupFactoriesMap() 69 70 adapterTypeName := "test" 71 72 if test.adapter != nil { 73 err := factories.Register(adapterTypeName, makeTestFactory(test)) 74 assert.NoError(t, err) 75 } 76 77 factories.Register("additional-adapter", func(config *common.CacheConfig, timeout time.Duration, objectName string) (Adapter, error) { 78 return new(MockAdapter), nil 79 }) 80 81 config := &common.CacheConfig{ 82 Type: adapterTypeName, 83 } 84 85 adapter, err := CreateAdapter(config, defaultTimeout, "key") 86 87 if test.expectedError == "" { 88 assert.NoError(t, err) 89 } else { 90 assert.Error(t, err) 91 } 92 93 assert.Equal(t, test.expectedAdapter, adapter) 94 }) 95 } 96 } 97 98 func TestDoubledRegistration(t *testing.T) { 99 adapterTypeName := "test" 100 fakeFactory := func(config *common.CacheConfig, timeout time.Duration, objectName string) (Adapter, error) { 101 return nil, nil 102 } 103 104 f := &FactoriesMap{} 105 106 err := f.Register(adapterTypeName, fakeFactory) 107 assert.NoError(t, err) 108 assert.Len(t, f.internal, 1) 109 110 err = f.Register(adapterTypeName, fakeFactory) 111 assert.Error(t, err) 112 assert.Len(t, f.internal, 1) 113 }