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  }