Migrate emojiStore to use request.CTX instead of context.Context (#24514)
* migrate emojistore to request.ctx * use mlog.CreateConsoleTestLogger * Add comment to WithMaster and RequestContextWithMaster
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
e9cc03c1c8
Коммит
f65dad83bb
@@ -4,13 +4,13 @@
|
||||
package localcachelayer
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/mattermost/mattermost/server/public/model"
|
||||
"github.com/mattermost/mattermost/server/public/shared/request"
|
||||
"github.com/mattermost/mattermost/server/v8/channels/store/storetest"
|
||||
"github.com/mattermost/mattermost/server/v8/channels/store/storetest/mocks"
|
||||
)
|
||||
@@ -25,49 +25,52 @@ func TestEmojiStoreCache(t *testing.T) {
|
||||
ctxEmoji := model.Emoji{Id: "master", Name: "name123"}
|
||||
|
||||
t.Run("first call by id not cached, second cached and returning same data", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
emoji, err := cachedStore.Emoji().Get(context.Background(), "123", true)
|
||||
emoji, err := cachedStore.Emoji().Get(c, "123", true)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, emoji, &fakeEmoji)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
|
||||
emoji, err = cachedStore.Emoji().Get(context.Background(), "123", true)
|
||||
emoji, err = cachedStore.Emoji().Get(c, "123", true)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, emoji, &fakeEmoji)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
|
||||
})
|
||||
|
||||
t.Run("GetByName: first call by name not cached, second cached and returning same data", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
emoji, err := cachedStore.Emoji().GetByName(context.Background(), "name123", true)
|
||||
emoji, err := cachedStore.Emoji().GetByName(c, "name123", true)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, emoji, &fakeEmoji)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
|
||||
emoji, err = cachedStore.Emoji().GetByName(context.Background(), "name123", true)
|
||||
emoji, err = cachedStore.Emoji().GetByName(c, "name123", true)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, emoji, &fakeEmoji)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
|
||||
})
|
||||
|
||||
t.Run("GetMultipleByName: first call by name not cached, second cached and returning same data", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
emojis, err := cachedStore.Emoji().GetMultipleByName(context.Background(), []string{"name123"})
|
||||
emojis, err := cachedStore.Emoji().GetMultipleByName(c, []string{"name123"})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, emojis, 1)
|
||||
assert.Equal(t, emojis[0], &fakeEmoji)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetMultipleByName", 1)
|
||||
emojis, err = cachedStore.Emoji().GetMultipleByName(context.Background(), []string{"name123"})
|
||||
emojis, err = cachedStore.Emoji().GetMultipleByName(c, []string{"name123"})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, emojis, 1)
|
||||
assert.Equal(t, emojis[0], &fakeEmoji)
|
||||
@@ -75,18 +78,19 @@ func TestEmojiStoreCache(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("GetMultipleByName: multiple elements", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
emojis, err := cachedStore.Emoji().GetMultipleByName(context.Background(), []string{"name123", "name321"})
|
||||
emojis, err := cachedStore.Emoji().GetMultipleByName(c, []string{"name123", "name321"})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, emojis, 2)
|
||||
assert.Equal(t, emojis[0], &fakeEmoji)
|
||||
assert.Equal(t, emojis[1], &fakeEmoji2)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetMultipleByName", 1)
|
||||
emojis, err = cachedStore.Emoji().GetMultipleByName(context.Background(), []string{"name123"})
|
||||
emojis, err = cachedStore.Emoji().GetMultipleByName(c, []string{"name123"})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, emojis, 1)
|
||||
assert.Equal(t, emojis[0], &fakeEmoji)
|
||||
@@ -94,132 +98,142 @@ func TestEmojiStoreCache(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("first call by id not cached, second force not cached", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
cachedStore.Emoji().Get(context.Background(), "123", true)
|
||||
cachedStore.Emoji().Get(c, "123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
|
||||
cachedStore.Emoji().Get(context.Background(), "123", false)
|
||||
cachedStore.Emoji().Get(c, "123", false)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 2)
|
||||
})
|
||||
|
||||
t.Run("first call by name not cached, second force not cached", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
cachedStore.Emoji().GetByName(context.Background(), "name123", true)
|
||||
cachedStore.Emoji().GetByName(c, "name123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
|
||||
cachedStore.Emoji().GetByName(context.Background(), "name123", false)
|
||||
cachedStore.Emoji().GetByName(c, "name123", false)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 2)
|
||||
})
|
||||
|
||||
t.Run("first call by id force not cached, second not cached, third cached", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
cachedStore.Emoji().Get(context.Background(), "123", false)
|
||||
cachedStore.Emoji().Get(c, "123", false)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
|
||||
cachedStore.Emoji().Get(context.Background(), "123", true)
|
||||
cachedStore.Emoji().Get(c, "123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 2)
|
||||
cachedStore.Emoji().Get(context.Background(), "123", true)
|
||||
cachedStore.Emoji().Get(c, "123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 2)
|
||||
})
|
||||
|
||||
t.Run("first call by name force not cached, second not cached, third cached", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
cachedStore.Emoji().GetByName(context.Background(), "name123", false)
|
||||
cachedStore.Emoji().GetByName(c, "name123", false)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
|
||||
cachedStore.Emoji().GetByName(context.Background(), "name123", true)
|
||||
cachedStore.Emoji().GetByName(c, "name123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 2)
|
||||
cachedStore.Emoji().GetByName(context.Background(), "name123", true)
|
||||
cachedStore.Emoji().GetByName(c, "name123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 2)
|
||||
})
|
||||
|
||||
t.Run("first call by id, second call by name and GetMultipleByName cached", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
cachedStore.Emoji().Get(context.Background(), "123", true)
|
||||
cachedStore.Emoji().Get(c, "123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
|
||||
cachedStore.Emoji().GetByName(context.Background(), "name123", true)
|
||||
cachedStore.Emoji().GetByName(c, "name123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 0)
|
||||
cachedStore.Emoji().GetMultipleByName(context.Background(), []string{"name123"})
|
||||
cachedStore.Emoji().GetMultipleByName(c, []string{"name123"})
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetMultipleByName", 0)
|
||||
})
|
||||
|
||||
t.Run("first call by name, second call by id cached", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
cachedStore.Emoji().GetByName(context.Background(), "name123", true)
|
||||
cachedStore.Emoji().GetByName(c, "name123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
|
||||
cachedStore.Emoji().Get(context.Background(), "123", true)
|
||||
cachedStore.Emoji().Get(c, "123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 0)
|
||||
})
|
||||
|
||||
t.Run("first call by id not cached, invalidate, and then not cached again", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
cachedStore.Emoji().Get(context.Background(), "123", true)
|
||||
cachedStore.Emoji().Get(c, "123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
|
||||
cachedStore.Emoji().Delete(&fakeEmoji, 0)
|
||||
cachedStore.Emoji().Get(context.Background(), "123", true)
|
||||
cachedStore.Emoji().Get(c, "123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 2)
|
||||
})
|
||||
|
||||
t.Run("call by id, use master", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
cachedStore.Emoji().Get(context.Background(), "master", true)
|
||||
cachedStore.Emoji().Get(c, "master", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
|
||||
cachedStore.Emoji().Delete(&ctxEmoji, 0)
|
||||
cachedStore.Emoji().Get(context.Background(), "master", true)
|
||||
cachedStore.Emoji().Get(c, "master", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 2)
|
||||
})
|
||||
|
||||
t.Run("first call by name not cached, invalidate, and then not cached again", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
cachedStore.Emoji().GetByName(context.Background(), "name123", true)
|
||||
cachedStore.Emoji().GetByName(c, "name123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
|
||||
cachedStore.Emoji().Delete(&fakeEmoji, 0)
|
||||
cachedStore.Emoji().GetByName(context.Background(), "name123", true)
|
||||
cachedStore.Emoji().GetByName(c, "name123", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 2)
|
||||
})
|
||||
|
||||
t.Run("call by name, use master", func(t *testing.T) {
|
||||
mockStore := getMockStore()
|
||||
c := request.TestContext(t)
|
||||
mockStore := getMockStore(t)
|
||||
mockCacheProvider := getMockCacheProvider()
|
||||
cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
|
||||
require.NoError(t, err)
|
||||
|
||||
cachedStore.Emoji().GetByName(context.Background(), "master", true)
|
||||
cachedStore.Emoji().GetByName(c, "master", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
|
||||
cachedStore.Emoji().Delete(&ctxEmoji, 0)
|
||||
cachedStore.Emoji().GetByName(context.Background(), "master", true)
|
||||
cachedStore.Emoji().GetByName(c, "master", true)
|
||||
mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 2)
|
||||
})
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user