v8.0 module release (#22975)
https://mattermost.atlassian.net/browse/MM-52079 ```release-note We upgrade the module version to 8.0. The new module path is github.com/mattermost-server/server/v8. ``` Co-authored-by: Doug Lauder <wiggin77@warpmail.net>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
831ea38f7e
Коммит
b200a07881
138
server/model/remote_cluster_test.go
Обычный файл
138
server/model/remote_cluster_test.go
Обычный файл
@@ -0,0 +1,138 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
package model
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestRemoteClusterIsValid(t *testing.T) {
|
||||
id := NewId()
|
||||
creator := NewId()
|
||||
now := GetMillis()
|
||||
data := []struct {
|
||||
name string
|
||||
rc *RemoteCluster
|
||||
valid bool
|
||||
}{
|
||||
{name: "Zero value", rc: &RemoteCluster{}, valid: false},
|
||||
{name: "Missing cluster_name", rc: &RemoteCluster{RemoteId: id}, valid: false},
|
||||
{name: "Missing host_name", rc: &RemoteCluster{RemoteId: id, Name: NewId()}, valid: false},
|
||||
{name: "Missing create_at", rc: &RemoteCluster{RemoteId: id, Name: NewId(), SiteURL: "example.com"}, valid: false},
|
||||
{name: "Missing last_ping_at", rc: &RemoteCluster{RemoteId: id, Name: NewId(), SiteURL: "example.com", CreatorId: creator, CreateAt: now}, valid: true},
|
||||
{name: "Missing creator", rc: &RemoteCluster{RemoteId: id, Name: NewId(), SiteURL: "example.com", CreateAt: now, LastPingAt: now}, valid: false},
|
||||
{name: "RemoteCluster valid", rc: &RemoteCluster{RemoteId: id, Name: NewId(), SiteURL: "example.com", CreateAt: now, LastPingAt: now, CreatorId: creator}, valid: true},
|
||||
{name: "Include protocol", rc: &RemoteCluster{RemoteId: id, Name: NewId(), SiteURL: "http://example.com", CreateAt: now, LastPingAt: now, CreatorId: creator}, valid: true},
|
||||
{name: "Include protocol & port", rc: &RemoteCluster{RemoteId: id, Name: NewId(), SiteURL: "http://example.com:8065", CreateAt: now, LastPingAt: now, CreatorId: creator}, valid: true},
|
||||
}
|
||||
|
||||
for _, item := range data {
|
||||
appErr := item.rc.IsValid()
|
||||
if item.valid {
|
||||
assert.Nil(t, appErr, item.name)
|
||||
} else {
|
||||
assert.NotNil(t, appErr, item.name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoteClusterPreSave(t *testing.T) {
|
||||
now := GetMillis()
|
||||
|
||||
o := RemoteCluster{RemoteId: NewId(), Name: NewId()}
|
||||
o.PreSave()
|
||||
|
||||
require.GreaterOrEqual(t, o.CreateAt, now)
|
||||
}
|
||||
|
||||
func TestRemoteClusterMsgIsValid(t *testing.T) {
|
||||
id := NewId()
|
||||
now := GetMillis()
|
||||
data := []struct {
|
||||
name string
|
||||
msg *RemoteClusterMsg
|
||||
valid bool
|
||||
}{
|
||||
{name: "Zero value", msg: &RemoteClusterMsg{}, valid: false},
|
||||
{name: "Missing remote id", msg: &RemoteClusterMsg{Id: id}, valid: false},
|
||||
{name: "Missing Topic", msg: &RemoteClusterMsg{Id: id}, valid: false},
|
||||
{name: "Missing Payload", msg: &RemoteClusterMsg{Id: id, CreateAt: now, Topic: "shared_channel"}, valid: false},
|
||||
{name: "RemoteClusterMsg valid", msg: &RemoteClusterMsg{Id: id, CreateAt: now, Topic: "shared_channel", Payload: []byte("{\"hello\":\"world\"}")}, valid: true},
|
||||
}
|
||||
|
||||
for _, item := range data {
|
||||
appErr := item.msg.IsValid()
|
||||
if item.valid {
|
||||
assert.Nil(t, appErr, item.name)
|
||||
} else {
|
||||
assert.NotNil(t, appErr, item.name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestFixTopics(t *testing.T) {
|
||||
testData := []struct {
|
||||
topics string
|
||||
expected string
|
||||
}{
|
||||
{topics: "", expected: ""},
|
||||
{topics: " ", expected: ""},
|
||||
{topics: "share", expected: " share "},
|
||||
{topics: "share incident", expected: " share incident "},
|
||||
{topics: " share incident ", expected: " share incident "},
|
||||
{topics: " share incident ", expected: " share incident "},
|
||||
}
|
||||
|
||||
for _, tt := range testData {
|
||||
rc := &RemoteCluster{Topics: tt.topics}
|
||||
rc.fixTopics()
|
||||
assert.Equal(t, tt.expected, rc.Topics)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoteClusterInviteEncryption(t *testing.T) {
|
||||
testData := []struct {
|
||||
name string
|
||||
badDecrypt bool
|
||||
password string
|
||||
invite RemoteClusterInvite
|
||||
}{
|
||||
{name: "empty password", badDecrypt: false, password: "", invite: makeInvite("https://example.com:8065")},
|
||||
{name: "good password", badDecrypt: false, password: "Ultra secret password!", invite: makeInvite("https://example.com:8065")},
|
||||
{name: "bad decrypt", badDecrypt: true, password: "correct horse battery staple", invite: makeInvite("https://example.com:8065")},
|
||||
}
|
||||
|
||||
for _, tt := range testData {
|
||||
encrypted, err := tt.invite.Encrypt(tt.password)
|
||||
require.NoError(t, err)
|
||||
|
||||
invite := RemoteClusterInvite{}
|
||||
if tt.badDecrypt {
|
||||
buf := make([]byte, len(encrypted))
|
||||
_, err = io.ReadFull(rand.Reader, buf)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = invite.Decrypt(buf, tt.password)
|
||||
require.Error(t, err)
|
||||
} else {
|
||||
err = invite.Decrypt(encrypted, tt.password)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, tt.invite, invite)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func makeInvite(url string) RemoteClusterInvite {
|
||||
return RemoteClusterInvite{
|
||||
RemoteId: NewId(),
|
||||
RemoteTeamId: NewId(),
|
||||
SiteURL: url,
|
||||
Token: NewId(),
|
||||
}
|
||||
}
|
||||
Ссылка в новой задаче
Block a user