* Created message export scheduled task * Added CLI command to immediately kick off an export job * Added email addresses for users joining and leaving the channel to the export * Added support for both MySQL and PostgreSQL * Fixing gofmt error * Added a new ChannelMemberHistory store and associated tests * Updating the ChannelMemberHistory channel as users create/join/leave channels * Added user email to the message export object so it can be included in the actiance export xml * Don't fail to log a leave event if a corresponding join event wasn't logged * Adding copyright notices * Adding message export settings to daily diagnostics report * Added System Console integration for message export * Cleaned up TODOs * Made batch size configurable * Added export from timestamp to CLI command * Made ChannelMemberHistory table updates best effort * Added a context-based timeout option to the message export CLI * Minor PR updates/improvements * Removed unnecessary fields from MessageExport object to reduce query overhead * Removed JSON functions from the message export query in an effort to optimize performance * Changed the way that channel member history queries and purges work to better account for edge cases * Fixing a test I missed with the last refactor * Added file copy functionality to file backend, improved config validation, added default config values * Fixed file copy tests * More concise use of the testing libraries * Fixed context leak error * Changed default export path to correctly place an 'export' directory under the 'data' directory * Can't delete records from a read replica * Fixed copy file tests * Start job workers when license is applied, if configured to do so * Suggestions from the PR * Moar unit tests * Fixed test imports
593 строки
14 KiB
Go
593 строки
14 KiB
Go
// Code generated by mockery v1.0.0
|
|
|
|
// Regenerate this file using `make store-mocks`.
|
|
|
|
package mocks
|
|
|
|
import context "context"
|
|
import mock "github.com/stretchr/testify/mock"
|
|
import model "github.com/mattermost/mattermost-server/model"
|
|
import store "github.com/mattermost/mattermost-server/store"
|
|
|
|
// LayeredStoreDatabaseLayer is an autogenerated mock type for the LayeredStoreDatabaseLayer type
|
|
type LayeredStoreDatabaseLayer struct {
|
|
mock.Mock
|
|
}
|
|
|
|
// Audit provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Audit() store.AuditStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.AuditStore
|
|
if rf, ok := ret.Get(0).(func() store.AuditStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.AuditStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Channel provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Channel() store.ChannelStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.ChannelStore
|
|
if rf, ok := ret.Get(0).(func() store.ChannelStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.ChannelStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// ChannelMemberHistory provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) ChannelMemberHistory() store.ChannelMemberHistoryStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.ChannelMemberHistoryStore
|
|
if rf, ok := ret.Get(0).(func() store.ChannelMemberHistoryStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.ChannelMemberHistoryStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Close provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Close() {
|
|
_m.Called()
|
|
}
|
|
|
|
// ClusterDiscovery provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) ClusterDiscovery() store.ClusterDiscoveryStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.ClusterDiscoveryStore
|
|
if rf, ok := ret.Get(0).(func() store.ClusterDiscoveryStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.ClusterDiscoveryStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Command provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Command() store.CommandStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.CommandStore
|
|
if rf, ok := ret.Get(0).(func() store.CommandStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.CommandStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// CommandWebhook provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) CommandWebhook() store.CommandWebhookStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.CommandWebhookStore
|
|
if rf, ok := ret.Get(0).(func() store.CommandWebhookStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.CommandWebhookStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Compliance provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Compliance() store.ComplianceStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.ComplianceStore
|
|
if rf, ok := ret.Get(0).(func() store.ComplianceStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.ComplianceStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// DropAllTables provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) DropAllTables() {
|
|
_m.Called()
|
|
}
|
|
|
|
// Emoji provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Emoji() store.EmojiStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.EmojiStore
|
|
if rf, ok := ret.Get(0).(func() store.EmojiStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.EmojiStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// FileInfo provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) FileInfo() store.FileInfoStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.FileInfoStore
|
|
if rf, ok := ret.Get(0).(func() store.FileInfoStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.FileInfoStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Job provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Job() store.JobStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.JobStore
|
|
if rf, ok := ret.Get(0).(func() store.JobStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.JobStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// License provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) License() store.LicenseStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.LicenseStore
|
|
if rf, ok := ret.Get(0).(func() store.LicenseStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.LicenseStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// MarkSystemRanUnitTests provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) MarkSystemRanUnitTests() {
|
|
_m.Called()
|
|
}
|
|
|
|
// Next provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Next() store.LayeredStoreSupplier {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.LayeredStoreSupplier
|
|
if rf, ok := ret.Get(0).(func() store.LayeredStoreSupplier); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.LayeredStoreSupplier)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// OAuth provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) OAuth() store.OAuthStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.OAuthStore
|
|
if rf, ok := ret.Get(0).(func() store.OAuthStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.OAuthStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Plugin provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Plugin() store.PluginStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.PluginStore
|
|
if rf, ok := ret.Get(0).(func() store.PluginStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.PluginStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Post provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Post() store.PostStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.PostStore
|
|
if rf, ok := ret.Get(0).(func() store.PostStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.PostStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Preference provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Preference() store.PreferenceStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.PreferenceStore
|
|
if rf, ok := ret.Get(0).(func() store.PreferenceStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.PreferenceStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Reaction provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Reaction() store.ReactionStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.ReactionStore
|
|
if rf, ok := ret.Get(0).(func() store.ReactionStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.ReactionStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// ReactionDelete provides a mock function with given fields: ctx, reaction, hints
|
|
func (_m *LayeredStoreDatabaseLayer) ReactionDelete(ctx context.Context, reaction *model.Reaction, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
|
|
_va := make([]interface{}, len(hints))
|
|
for _i := range hints {
|
|
_va[_i] = hints[_i]
|
|
}
|
|
var _ca []interface{}
|
|
_ca = append(_ca, ctx, reaction)
|
|
_ca = append(_ca, _va...)
|
|
ret := _m.Called(_ca...)
|
|
|
|
var r0 *store.LayeredStoreSupplierResult
|
|
if rf, ok := ret.Get(0).(func(context.Context, *model.Reaction, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
|
|
r0 = rf(ctx, reaction, hints...)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// ReactionDeleteAllWithEmojiName provides a mock function with given fields: ctx, emojiName, hints
|
|
func (_m *LayeredStoreDatabaseLayer) ReactionDeleteAllWithEmojiName(ctx context.Context, emojiName string, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
|
|
_va := make([]interface{}, len(hints))
|
|
for _i := range hints {
|
|
_va[_i] = hints[_i]
|
|
}
|
|
var _ca []interface{}
|
|
_ca = append(_ca, ctx, emojiName)
|
|
_ca = append(_ca, _va...)
|
|
ret := _m.Called(_ca...)
|
|
|
|
var r0 *store.LayeredStoreSupplierResult
|
|
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
|
|
r0 = rf(ctx, emojiName, hints...)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// ReactionGetForPost provides a mock function with given fields: ctx, postId, hints
|
|
func (_m *LayeredStoreDatabaseLayer) ReactionGetForPost(ctx context.Context, postId string, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
|
|
_va := make([]interface{}, len(hints))
|
|
for _i := range hints {
|
|
_va[_i] = hints[_i]
|
|
}
|
|
var _ca []interface{}
|
|
_ca = append(_ca, ctx, postId)
|
|
_ca = append(_ca, _va...)
|
|
ret := _m.Called(_ca...)
|
|
|
|
var r0 *store.LayeredStoreSupplierResult
|
|
if rf, ok := ret.Get(0).(func(context.Context, string, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
|
|
r0 = rf(ctx, postId, hints...)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// ReactionPermanentDeleteBatch provides a mock function with given fields: ctx, endTime, limit, hints
|
|
func (_m *LayeredStoreDatabaseLayer) ReactionPermanentDeleteBatch(ctx context.Context, endTime int64, limit int64, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
|
|
_va := make([]interface{}, len(hints))
|
|
for _i := range hints {
|
|
_va[_i] = hints[_i]
|
|
}
|
|
var _ca []interface{}
|
|
_ca = append(_ca, ctx, endTime, limit)
|
|
_ca = append(_ca, _va...)
|
|
ret := _m.Called(_ca...)
|
|
|
|
var r0 *store.LayeredStoreSupplierResult
|
|
if rf, ok := ret.Get(0).(func(context.Context, int64, int64, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
|
|
r0 = rf(ctx, endTime, limit, hints...)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// ReactionSave provides a mock function with given fields: ctx, reaction, hints
|
|
func (_m *LayeredStoreDatabaseLayer) ReactionSave(ctx context.Context, reaction *model.Reaction, hints ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult {
|
|
_va := make([]interface{}, len(hints))
|
|
for _i := range hints {
|
|
_va[_i] = hints[_i]
|
|
}
|
|
var _ca []interface{}
|
|
_ca = append(_ca, ctx, reaction)
|
|
_ca = append(_ca, _va...)
|
|
ret := _m.Called(_ca...)
|
|
|
|
var r0 *store.LayeredStoreSupplierResult
|
|
if rf, ok := ret.Get(0).(func(context.Context, *model.Reaction, ...store.LayeredStoreHint) *store.LayeredStoreSupplierResult); ok {
|
|
r0 = rf(ctx, reaction, hints...)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*store.LayeredStoreSupplierResult)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Session provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Session() store.SessionStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.SessionStore
|
|
if rf, ok := ret.Get(0).(func() store.SessionStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.SessionStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// SetChainNext provides a mock function with given fields: _a0
|
|
func (_m *LayeredStoreDatabaseLayer) SetChainNext(_a0 store.LayeredStoreSupplier) {
|
|
_m.Called(_a0)
|
|
}
|
|
|
|
// Status provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Status() store.StatusStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.StatusStore
|
|
if rf, ok := ret.Get(0).(func() store.StatusStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.StatusStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// System provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) System() store.SystemStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.SystemStore
|
|
if rf, ok := ret.Get(0).(func() store.SystemStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.SystemStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Team provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Team() store.TeamStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.TeamStore
|
|
if rf, ok := ret.Get(0).(func() store.TeamStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.TeamStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Token provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Token() store.TokenStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.TokenStore
|
|
if rf, ok := ret.Get(0).(func() store.TokenStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.TokenStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// TotalMasterDbConnections provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) TotalMasterDbConnections() int {
|
|
ret := _m.Called()
|
|
|
|
var r0 int
|
|
if rf, ok := ret.Get(0).(func() int); ok {
|
|
r0 = rf()
|
|
} else {
|
|
r0 = ret.Get(0).(int)
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// TotalReadDbConnections provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) TotalReadDbConnections() int {
|
|
ret := _m.Called()
|
|
|
|
var r0 int
|
|
if rf, ok := ret.Get(0).(func() int); ok {
|
|
r0 = rf()
|
|
} else {
|
|
r0 = ret.Get(0).(int)
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// TotalSearchDbConnections provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) TotalSearchDbConnections() int {
|
|
ret := _m.Called()
|
|
|
|
var r0 int
|
|
if rf, ok := ret.Get(0).(func() int); ok {
|
|
r0 = rf()
|
|
} else {
|
|
r0 = ret.Get(0).(int)
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// User provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) User() store.UserStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.UserStore
|
|
if rf, ok := ret.Get(0).(func() store.UserStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.UserStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// UserAccessToken provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) UserAccessToken() store.UserAccessTokenStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.UserAccessTokenStore
|
|
if rf, ok := ret.Get(0).(func() store.UserAccessTokenStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.UserAccessTokenStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|
|
|
|
// Webhook provides a mock function with given fields:
|
|
func (_m *LayeredStoreDatabaseLayer) Webhook() store.WebhookStore {
|
|
ret := _m.Called()
|
|
|
|
var r0 store.WebhookStore
|
|
if rf, ok := ret.Get(0).(func() store.WebhookStore); ok {
|
|
r0 = rf()
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(store.WebhookStore)
|
|
}
|
|
}
|
|
|
|
return r0
|
|
}
|