mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
* Prepare file upload infrastructure for Data Retention. This commit prepares the file upload infrastructure for the data retention feature that is under construction. Changes are: * Move file management code to utils to allow access to it from jobs. * From now on, store all file uploads in a top level folder which is the date of the day on which they were uploaded. This commit is based on Harrison Healey's branch, but updated to work with the latest master. * Use NewAppError
89 lines
2.5 KiB
Go
89 lines
2.5 KiB
Go
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
|
|
// See License.txt for license information.
|
|
|
|
package app
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/mattermost/platform/model"
|
|
"github.com/mattermost/platform/utils"
|
|
)
|
|
|
|
func TestGeneratePublicLinkHash(t *testing.T) {
|
|
filename1 := model.NewId() + "/" + model.NewRandomString(16) + ".txt"
|
|
filename2 := model.NewId() + "/" + model.NewRandomString(16) + ".txt"
|
|
salt1 := model.NewRandomString(32)
|
|
salt2 := model.NewRandomString(32)
|
|
|
|
hash1 := GeneratePublicLinkHash(filename1, salt1)
|
|
hash2 := GeneratePublicLinkHash(filename2, salt1)
|
|
hash3 := GeneratePublicLinkHash(filename1, salt2)
|
|
|
|
if hash1 != GeneratePublicLinkHash(filename1, salt1) {
|
|
t.Fatal("hash should be equal for the same file name and salt")
|
|
}
|
|
|
|
if hash1 == hash2 {
|
|
t.Fatal("hashes for different files should not be equal")
|
|
}
|
|
|
|
if hash1 == hash3 {
|
|
t.Fatal("hashes for the same file with different salts should not be equal")
|
|
}
|
|
}
|
|
|
|
func TestDoUploadFile(t *testing.T) {
|
|
Setup()
|
|
|
|
teamId := model.NewId()
|
|
channelId := model.NewId()
|
|
userId := model.NewId()
|
|
filename := "test"
|
|
data := []byte("abcd")
|
|
|
|
info1, err := DoUploadFile(time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamId, channelId, userId, filename, data)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
} else {
|
|
defer func() {
|
|
<-Srv.Store.FileInfo().PermanentDelete(info1.Id)
|
|
utils.RemoveFile(info1.Path)
|
|
}()
|
|
}
|
|
|
|
if info1.Path != fmt.Sprintf("20070204/teams/%v/channels/%v/users/%v/%v/%v", teamId, channelId, userId, info1.Id, filename) {
|
|
t.Fatal("stored file at incorrect path", info1.Path)
|
|
}
|
|
|
|
info2, err := DoUploadFile(time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamId, channelId, userId, filename, data)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
} else {
|
|
defer func() {
|
|
<-Srv.Store.FileInfo().PermanentDelete(info2.Id)
|
|
utils.RemoveFile(info2.Path)
|
|
}()
|
|
}
|
|
|
|
if info2.Path != fmt.Sprintf("20070204/teams/%v/channels/%v/users/%v/%v/%v", teamId, channelId, userId, info2.Id, filename) {
|
|
t.Fatal("stored file at incorrect path", info2.Path)
|
|
}
|
|
|
|
info3, err := DoUploadFile(time.Date(2008, 3, 5, 1, 2, 3, 4, time.Local), teamId, channelId, userId, filename, data)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
} else {
|
|
defer func() {
|
|
<-Srv.Store.FileInfo().PermanentDelete(info3.Id)
|
|
utils.RemoveFile(info3.Path)
|
|
}()
|
|
}
|
|
|
|
if info3.Path != fmt.Sprintf("20080305/teams/%v/channels/%v/users/%v/%v/%v", teamId, channelId, userId, info3.Id, filename) {
|
|
t.Fatal("stored file at incorrect path", info3.Path)
|
|
}
|
|
}
|