github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/store/localcachelayer/file_info_layer_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package localcachelayer 5 6 import ( 7 "testing" 8 9 "github.com/mattermost/mattermost-server/v5/model" 10 "github.com/mattermost/mattermost-server/v5/store/storetest" 11 "github.com/mattermost/mattermost-server/v5/store/storetest/mocks" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestFileInfoStore(t *testing.T) { 17 StoreTest(t, storetest.TestFileInfoStore) 18 } 19 20 func TestFileInfoStoreCache(t *testing.T) { 21 fakeFileInfo := model.FileInfo{PostId: "123"} 22 23 t.Run("first call not cached, second cached and returning same data", func(t *testing.T) { 24 mockStore := getMockStore() 25 mockCacheProvider := getMockCacheProvider() 26 cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 27 28 fileInfos, err := cachedStore.FileInfo().GetForPost("123", true, true, true) 29 require.Nil(t, err) 30 assert.Equal(t, fileInfos, []*model.FileInfo{&fakeFileInfo}) 31 mockStore.FileInfo().(*mocks.FileInfoStore).AssertNumberOfCalls(t, "GetForPost", 1) 32 assert.Equal(t, fileInfos, []*model.FileInfo{&fakeFileInfo}) 33 cachedStore.FileInfo().GetForPost("123", true, true, true) 34 mockStore.FileInfo().(*mocks.FileInfoStore).AssertNumberOfCalls(t, "GetForPost", 1) 35 }) 36 37 t.Run("first call not cached, second force no cached", func(t *testing.T) { 38 mockStore := getMockStore() 39 mockCacheProvider := getMockCacheProvider() 40 cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 41 42 cachedStore.FileInfo().GetForPost("123", true, true, true) 43 mockStore.FileInfo().(*mocks.FileInfoStore).AssertNumberOfCalls(t, "GetForPost", 1) 44 cachedStore.FileInfo().GetForPost("123", true, true, false) 45 mockStore.FileInfo().(*mocks.FileInfoStore).AssertNumberOfCalls(t, "GetForPost", 2) 46 }) 47 48 t.Run("first call not cached, invalidate, and then not cached again", func(t *testing.T) { 49 mockStore := getMockStore() 50 mockCacheProvider := getMockCacheProvider() 51 cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 52 53 cachedStore.FileInfo().GetForPost("123", true, true, true) 54 mockStore.FileInfo().(*mocks.FileInfoStore).AssertNumberOfCalls(t, "GetForPost", 1) 55 cachedStore.FileInfo().InvalidateFileInfosForPostCache("123", true) 56 cachedStore.FileInfo().GetForPost("123", true, true, true) 57 mockStore.FileInfo().(*mocks.FileInfoStore).AssertNumberOfCalls(t, "GetForPost", 2) 58 }) 59 }