Merge branch 'master' into mark-as-unread
Этот коммит содержится в:
@@ -660,6 +660,10 @@ func (api *PluginAPI) KVCompareAndSet(key string, oldValue, newValue []byte) (bo
|
||||
return api.app.CompareAndSetPluginKey(api.id, key, oldValue, newValue)
|
||||
}
|
||||
|
||||
func (api *PluginAPI) KVCompareAndDelete(key string, oldValue []byte) (bool, *model.AppError) {
|
||||
return api.app.CompareAndDeletePluginKey(api.id, key, oldValue)
|
||||
}
|
||||
|
||||
func (api *PluginAPI) KVSetWithExpiry(key string, value []byte, expireInSeconds int64) *model.AppError {
|
||||
return api.app.SetPluginKeyWithExpiry(api.id, key, value, expireInSeconds)
|
||||
}
|
||||
|
||||
@@ -1224,6 +1224,58 @@ func TestPluginAPIKVCompareAndSet(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPluginAPIKVCompareAndDelete(t *testing.T) {
|
||||
th := Setup(t).InitBasic()
|
||||
defer th.TearDown()
|
||||
api := th.SetupPluginAPI()
|
||||
|
||||
testCases := []struct {
|
||||
Description string
|
||||
ExpectedValue []byte
|
||||
}{
|
||||
{
|
||||
Description: "Testing non-nil, non-empty value",
|
||||
ExpectedValue: []byte("value1"),
|
||||
},
|
||||
{
|
||||
Description: "Testing empty value",
|
||||
ExpectedValue: []byte(""),
|
||||
},
|
||||
}
|
||||
|
||||
for i, testCase := range testCases {
|
||||
t.Run(testCase.Description, func(t *testing.T) {
|
||||
expectedKey := fmt.Sprintf("Key%d", i)
|
||||
expectedValue1 := testCase.ExpectedValue
|
||||
expectedValue2 := []byte("value2")
|
||||
|
||||
// Set the value
|
||||
err := api.KVSet(expectedKey, expectedValue1)
|
||||
require.Nil(t, err)
|
||||
|
||||
// Attempt delete using an incorrect old value
|
||||
deleted, err := api.KVCompareAndDelete(expectedKey, expectedValue2)
|
||||
require.Nil(t, err)
|
||||
require.False(t, deleted)
|
||||
|
||||
// Make sure the value is still there
|
||||
value, err := api.KVGet(expectedKey)
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, expectedValue1, value)
|
||||
|
||||
// Attempt delete using the proper value
|
||||
deleted, err = api.KVCompareAndDelete(expectedKey, expectedValue1)
|
||||
require.Nil(t, err)
|
||||
require.True(t, deleted)
|
||||
|
||||
// Verify it's deleted
|
||||
value, err = api.KVGet(expectedKey)
|
||||
require.Nil(t, err)
|
||||
require.Nil(t, value)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestPluginCreateBot(t *testing.T) {
|
||||
th := Setup(t)
|
||||
defer th.TearDown()
|
||||
|
||||
@@ -68,6 +68,26 @@ func (a *App) CompareAndSetPluginKey(pluginId string, key string, oldValue, newV
|
||||
return updated, nil
|
||||
}
|
||||
|
||||
func (a *App) CompareAndDeletePluginKey(pluginId string, key string, oldValue []byte) (bool, *model.AppError) {
|
||||
kv := &model.PluginKeyValue{
|
||||
PluginId: pluginId,
|
||||
Key: key,
|
||||
}
|
||||
|
||||
deleted, err := a.Srv.Store.Plugin().CompareAndDelete(kv, oldValue)
|
||||
if err != nil {
|
||||
mlog.Error("Failed to compare and delete plugin key value", mlog.String("plugin_id", pluginId), mlog.String("key", key), mlog.Err(err))
|
||||
return deleted, err
|
||||
}
|
||||
|
||||
// Clean up a previous entry using the hashed key, if it exists.
|
||||
if err := a.Srv.Store.Plugin().Delete(pluginId, getKeyHash(key)); err != nil {
|
||||
mlog.Error("Failed to clean up previously hashed plugin key value", mlog.String("plugin_id", pluginId), mlog.String("key", key), mlog.Err(err))
|
||||
}
|
||||
|
||||
return deleted, nil
|
||||
}
|
||||
|
||||
func (a *App) GetPluginKey(pluginId string, key string) ([]byte, *model.AppError) {
|
||||
if kv, err := a.Srv.Store.Plugin().Get(pluginId, key); err == nil {
|
||||
return kv.Value, nil
|
||||
|
||||
@@ -13,6 +13,7 @@ import (
|
||||
"github.com/mattermost/mattermost-server/model"
|
||||
"github.com/mattermost/mattermost-server/services/mailservice"
|
||||
"github.com/mattermost/mattermost-server/store"
|
||||
"github.com/mattermost/mattermost-server/store/localcachelayer"
|
||||
"github.com/mattermost/mattermost-server/store/sqlstore"
|
||||
"github.com/mattermost/mattermost-server/utils"
|
||||
"github.com/pkg/errors"
|
||||
@@ -61,7 +62,7 @@ func (s *Server) RunOldAppInitalization() error {
|
||||
|
||||
if s.FakeApp().Srv.newStore == nil {
|
||||
s.FakeApp().Srv.newStore = func() store.Store {
|
||||
return store.NewTimerLayer(store.NewLayeredStore(sqlstore.NewSqlSupplier(s.FakeApp().Config().SqlSettings, s.Metrics), s.Metrics, s.Cluster), s.Metrics)
|
||||
return store.NewTimerLayer(localcachelayer.NewLocalCacheLayer(store.NewLayeredStore(sqlstore.NewSqlSupplier(s.FakeApp().Config().SqlSettings, s.Metrics), s.Metrics, s.Cluster), s.Metrics, s.Cluster), s.Metrics)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user