github.com/xmidt-org/webpa-common@v1.11.9/store/value_test.go (about) 1 package store 2 3 import ( 4 "errors" 5 "github.com/stretchr/testify/assert" 6 "testing" 7 "time" 8 ) 9 10 type testValue struct { 11 wasCalled bool 12 value interface{} 13 err error 14 } 15 16 func (t *testValue) Load() (interface{}, error) { 17 t.wasCalled = true 18 return t.value, t.err 19 } 20 21 func TestNewValueCache(t *testing.T) { 22 assert := assert.New(t) 23 24 var testData = []struct { 25 source testValue 26 cachePeriod CachePeriod 27 expectError bool 28 }{ 29 { 30 testValue{ 31 value: "success", 32 }, 33 CachePeriodForever, 34 false, 35 }, 36 { 37 testValue{ 38 err: errors.New("failure"), 39 }, 40 CachePeriodForever, 41 true, 42 }, 43 { 44 testValue{ 45 value: "success", 46 }, 47 CachePeriodNever, 48 false, 49 }, 50 { 51 testValue{ 52 err: errors.New("failure"), 53 }, 54 CachePeriodNever, 55 false, 56 }, 57 { 58 testValue{ 59 value: "success", 60 }, 61 CachePeriod(30 * time.Hour), 62 false, 63 }, 64 { 65 testValue{ 66 err: errors.New("failure"), 67 }, 68 CachePeriod(30 * time.Hour), 69 false, 70 }, 71 } 72 73 for _, record := range testData { 74 t.Logf("%#v", record) 75 actual, err := NewValue(&record.source, record.cachePeriod) 76 77 if assert.Equal(record.expectError, err != nil) && err == nil { 78 switch actual.(type) { 79 case *singleton: 80 assert.Equal(CachePeriodForever, record.cachePeriod) 81 assert.True(record.source.wasCalled) 82 83 case *testValue: 84 assert.Equal(CachePeriodNever, record.cachePeriod) 85 assert.False(record.source.wasCalled) 86 87 case *Cache: 88 assert.True(record.cachePeriod > 0) 89 assert.False(record.source.wasCalled) 90 91 default: 92 t.Fatal("Unexpected Value type") 93 } 94 95 actualValue, err := actual.Load() 96 assert.Equal(record.source.value, actualValue) 97 assert.Equal(record.source.err, err) 98 assert.True(record.source.wasCalled) 99 } 100 } 101 }