Full Mattermost server source with integrated Community Enterprise features. Includes vendor directory for offline/air-gapped builds. Structure: - enterprise-impl/: Enterprise feature implementations - enterprise-community/: Init files that register implementations - enterprise/: Bridge imports (community_imports.go) - vendor/: All dependencies for offline builds Build (online): go build ./cmd/mattermost Build (offline/air-gapped): go build -mod=vendor ./cmd/mattermost 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
209 lines
5.7 KiB
Go
209 lines
5.7 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package storetest
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"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"
|
|
)
|
|
|
|
func TestUploadSessionStore(t *testing.T, rctx request.CTX, ss store.Store) {
|
|
t.Run("UploadSessionStoreSaveGet", func(t *testing.T) { testUploadSessionStoreSaveGet(t, rctx, ss) })
|
|
t.Run("UploadSessionStoreUpdate", func(t *testing.T) { testUploadSessionStoreUpdate(t, rctx, ss) })
|
|
t.Run("UploadSessionStoreGetForUser", func(t *testing.T) { testUploadSessionStoreGetForUser(t, rctx, ss) })
|
|
t.Run("UploadSessionStoreDelete", func(t *testing.T) { testUploadSessionStoreDelete(t, rctx, ss) })
|
|
}
|
|
|
|
func testUploadSessionStoreSaveGet(t *testing.T, rctx request.CTX, ss store.Store) {
|
|
var session *model.UploadSession
|
|
|
|
t.Run("saving nil session should fail", func(t *testing.T) {
|
|
us, err := ss.UploadSession().Save(nil)
|
|
require.Error(t, err)
|
|
require.Nil(t, us)
|
|
})
|
|
|
|
t.Run("saving empty session should fail", func(t *testing.T) {
|
|
session = &model.UploadSession{}
|
|
us, err := ss.UploadSession().Save(session)
|
|
require.Error(t, err)
|
|
require.Nil(t, us)
|
|
})
|
|
|
|
t.Run("saving valid session should succeed", func(t *testing.T) {
|
|
session = &model.UploadSession{
|
|
Type: model.UploadTypeAttachment,
|
|
UserId: model.NewId(),
|
|
ChannelId: model.NewId(),
|
|
Filename: "test",
|
|
FileSize: 1024,
|
|
Path: "/tmp/test",
|
|
}
|
|
us, err := ss.UploadSession().Save(session)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, us)
|
|
require.NotEmpty(t, us)
|
|
})
|
|
|
|
t.Run("getting non-existing session should fail", func(t *testing.T) {
|
|
us, err := ss.UploadSession().Get(rctx, "fake")
|
|
require.Error(t, err)
|
|
require.Nil(t, us)
|
|
})
|
|
|
|
t.Run("getting existing session should succeed", func(t *testing.T) {
|
|
us, err := ss.UploadSession().Get(rctx, session.Id)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, us)
|
|
require.Equal(t, session, us)
|
|
})
|
|
}
|
|
|
|
func testUploadSessionStoreUpdate(t *testing.T, rctx request.CTX, ss store.Store) {
|
|
session := &model.UploadSession{
|
|
Type: model.UploadTypeAttachment,
|
|
UserId: model.NewId(),
|
|
ChannelId: model.NewId(),
|
|
Filename: "test",
|
|
FileSize: 1024,
|
|
Path: "/tmp/test",
|
|
}
|
|
|
|
t.Run("updating nil session should fail", func(t *testing.T) {
|
|
err := ss.UploadSession().Update(nil)
|
|
require.Error(t, err)
|
|
})
|
|
|
|
t.Run("updating invalid session should fail", func(t *testing.T) {
|
|
err := ss.UploadSession().Update(&model.UploadSession{})
|
|
require.Error(t, err)
|
|
})
|
|
|
|
t.Run("updating non-existing session should fail", func(t *testing.T) {
|
|
err := ss.UploadSession().Update(&model.UploadSession{})
|
|
require.Error(t, err)
|
|
})
|
|
|
|
t.Run("updating existing session should succeed", func(t *testing.T) {
|
|
us, err := ss.UploadSession().Save(session)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, us)
|
|
require.NotEmpty(t, us)
|
|
|
|
us.FileOffset = 512
|
|
err = ss.UploadSession().Update(us)
|
|
require.NoError(t, err)
|
|
|
|
updated, err := ss.UploadSession().Get(rctx, us.Id)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, us)
|
|
require.Equal(t, us, updated)
|
|
})
|
|
}
|
|
|
|
func testUploadSessionStoreGetForUser(t *testing.T, rctx request.CTX, ss store.Store) {
|
|
userId := model.NewId()
|
|
|
|
sessions := []*model.UploadSession{
|
|
{
|
|
Type: model.UploadTypeAttachment,
|
|
UserId: userId,
|
|
ChannelId: model.NewId(),
|
|
Filename: "test0",
|
|
FileSize: 1024,
|
|
Path: "/tmp/test0",
|
|
},
|
|
{
|
|
Type: model.UploadTypeAttachment,
|
|
UserId: model.NewId(),
|
|
ChannelId: model.NewId(),
|
|
Filename: "test1",
|
|
FileSize: 1024,
|
|
Path: "/tmp/test1",
|
|
},
|
|
{
|
|
Type: model.UploadTypeAttachment,
|
|
UserId: userId,
|
|
ChannelId: model.NewId(),
|
|
Filename: "test2",
|
|
FileSize: 1024,
|
|
Path: "/tmp/test2",
|
|
},
|
|
{
|
|
Type: model.UploadTypeAttachment,
|
|
UserId: userId,
|
|
ChannelId: model.NewId(),
|
|
Filename: "test3",
|
|
FileSize: 1024,
|
|
Path: "/tmp/test3",
|
|
},
|
|
}
|
|
|
|
t.Run("should return no sessions", func(t *testing.T) {
|
|
us, err := ss.UploadSession().GetForUser(userId)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, us)
|
|
require.Empty(t, us)
|
|
})
|
|
|
|
for i := range sessions {
|
|
us, err := ss.UploadSession().Save(sessions[i])
|
|
require.NoError(t, err)
|
|
require.NotNil(t, us)
|
|
require.NotEmpty(t, us)
|
|
// We need this to make sure the ordering is consistent.
|
|
time.Sleep(2 * time.Millisecond)
|
|
}
|
|
|
|
t.Run("should return existing sessions", func(t *testing.T) {
|
|
us, err := ss.UploadSession().GetForUser(userId)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, us)
|
|
require.NotEmpty(t, us)
|
|
require.Len(t, us, 3)
|
|
|
|
require.Equal(t, sessions[0], us[0])
|
|
require.Equal(t, sessions[2], us[1])
|
|
require.Equal(t, sessions[3], us[2])
|
|
})
|
|
}
|
|
|
|
func testUploadSessionStoreDelete(t *testing.T, rctx request.CTX, ss store.Store) {
|
|
session := &model.UploadSession{
|
|
Id: model.NewId(),
|
|
Type: model.UploadTypeAttachment,
|
|
UserId: model.NewId(),
|
|
ChannelId: model.NewId(),
|
|
Filename: "test",
|
|
FileSize: 1024,
|
|
Path: "/tmp/test",
|
|
}
|
|
|
|
t.Run("deleting invalid id should fail", func(t *testing.T) {
|
|
err := ss.UploadSession().Delete("invalidId")
|
|
require.Error(t, err)
|
|
})
|
|
|
|
t.Run("deleting existing session should succeed", func(t *testing.T) {
|
|
us, err := ss.UploadSession().Save(session)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, us)
|
|
require.NotEmpty(t, us)
|
|
|
|
err = ss.UploadSession().Delete(session.Id)
|
|
require.NoError(t, err)
|
|
|
|
us, err = ss.UploadSession().Get(rctx, us.Id)
|
|
require.Error(t, err)
|
|
require.Nil(t, us)
|
|
require.IsType(t, &store.ErrNotFound{}, err)
|
|
})
|
|
}
|