Files
filestash/server/model/files_test.go
2018-07-30 13:34:44 +10:00

263 lines
5.5 KiB
Go

package model
import (
"fmt"
. "github.com/mickael-kerjean/nuage/server/common"
"io/ioutil"
"os"
"strings"
"testing"
)
var app *App
func init() {
app = &App{}
app.Config = &Config{}
app.Config.Initialise()
app.Config.General.Host = "http://test"
app.Config.OAuthProvider.Dropbox.ClientID = ""
app.Config.OAuthProvider.GoogleDrive.ClientID = ""
app.Config.OAuthProvider.GoogleDrive.ClientID = ""
}
func TestWebdav(t *testing.T) {
if os.Getenv("WEBDAV_URL") == "" {
fmt.Println("- skipped webdav")
return
}
b, err := NewBackend(&App{}, map[string]string{
"type": "webdav",
"url": os.Getenv("WEBDAV_URL"),
})
if err != nil {
t.Errorf("Can't create WebDav backend")
}
setup(t, b)
suite(t, b)
tearDown(t, b)
}
func TestFtp(t *testing.T) {
if os.Getenv("FTP_USERNAME") == "" || os.Getenv("FTP_PASSWORD") == "" {
fmt.Println("- skipped ftp")
return
}
b, err := NewBackend(&App{}, map[string]string{
"type": "ftp",
"hostname": "127.0.0.1",
"username": os.Getenv("FTP_USERNAME"),
"password": os.Getenv("FTP_PASSWORD"),
})
if err != nil {
t.Errorf("Can't create FTP backend")
}
setup(t, b)
suite(t, b)
tearDown(t, b)
b.Rm("/tmp/")
}
func TestSFtp(t *testing.T) {
if os.Getenv("SFTP_USERNAME") == "" || os.Getenv("SFTP_PASSWORD") == "" {
fmt.Println("- skipped sftp")
return
}
b, err := NewBackend(&App{}, map[string]string{
"type": "sftp",
"hostname": "127.0.0.1",
"username": os.Getenv("SFTP_USERNAME"),
"password": os.Getenv("SFTP_PASSWORD"),
})
if err != nil {
t.Errorf("Can't create SFTP backend")
}
setup(t, b)
suite(t, b)
tearDown(t, b)
}
func TestGit(t *testing.T) {
if os.Getenv("GIT_USERNAME") == "" || os.Getenv("GIT_PASSWORD") == "" {
fmt.Println("- skipped git")
return
}
b, err := NewBackend(app, map[string]string{
"type": "git",
"repo": "https://github.com/mickael-kerjean/tmp",
"username": os.Getenv("GIT_EMAIL"),
"password": os.Getenv("GIT_PASSWORD"),
})
if err != nil {
t.Errorf("Can't create Git backend")
}
setup(t, b)
suite(t, b)
tearDown(t, b)
}
func TestS3(t *testing.T) {
if os.Getenv("S3_ID") == "" || os.Getenv("S3_SECRET") == "" {
fmt.Println("- skipped S3")
return
}
b, err := NewBackend(&App{}, map[string]string{
"type": "s3",
"access_key_id": os.Getenv("S3_ID"),
"secret_access_key": os.Getenv("S3_SECRET"),
"endpoint": os.Getenv("S3_ENDPOINT"),
})
if err != nil {
t.Errorf("Can't create S3 backend")
}
setup(t, b)
suite(t, b)
tearDown(t, b)
}
func TestDropbox(t *testing.T) {
if os.Getenv("DROPBOX_TOKEN") == "" {
fmt.Println("- skipped Dropbox")
return
}
b, err := NewBackend(app, map[string]string{
"type": "dropbox",
"bearer": os.Getenv("DROPBOX_TOKEN"),
})
if err != nil {
t.Errorf("Can't create a Dropbox backend")
}
setup(t, b)
suite(t, b)
tearDown(t, b)
}
func TestGoogleDrive(t *testing.T) {
if os.Getenv("GDRIVE_TOKEN") == "" {
fmt.Println("- skipped Google Drive")
return
}
b, err := NewBackend(app, map[string]string{
"type": "gdrive",
"expiry": "",
"token": os.Getenv("GDRIVE_TOKEN"),
})
if err != nil {
t.Errorf("Can't create a Google Drive backend")
}
setup(t, b)
suite(t, b)
tearDown(t, b)
}
func setup(t *testing.T, b IBackend) {
b.Rm("/tmp/test/")
b.Mkdir("/tmp/")
b.Mkdir("/tmp/test/")
}
func tearDown(t *testing.T, b IBackend) {
b.Rm("/tmp/test/")
}
func suite(t *testing.T, b IBackend) {
// create state
content := "lorem ipsum"
b.Mkdir("/tmp/test/trash/")
b.Touch("/tmp/test/test0.txt")
b.Save("/tmp/test/test0.txt", strings.NewReader(content))
b.Save("/tmp/test/test1.txt", strings.NewReader(content))
b.Touch("/tmp/test/test2.txt")
b.Mv("/tmp/test/test0.txt", "/tmp/test/trash/test0.txt")
// list all files
tmp0, err := b.Ls("/tmp/test/")
if err != nil {
t.Errorf("Ls error: %s", err)
return
}
if len(tmp0) != 3 {
t.Errorf("LS error: got: %d elmnt, want: %d", len(tmp0), 3)
return
}
// read file
tmp1, err := b.Cat("/tmp/test/trash/test0.txt")
if err != nil {
t.Errorf("Cat error: %s", err)
return
}
tmp2, err := ioutil.ReadAll(tmp1)
if err != nil {
t.Errorf("Cat error: %s", err)
return
}
if string(tmp2) != content {
t.Errorf("Incorrect file: %s, want: %s.", tmp2, content)
return
}
if obj, ok := tmp1.(interface{ Close() error }); ok {
obj.Close()
}
tmp1, err = b.Cat("/tmp/test/test1.txt")
if err != nil {
t.Errorf("Cat error: %s", err)
return
}
tmp2, err = ioutil.ReadAll(tmp1)
if err != nil {
t.Errorf("Cat error: %s", err)
return
}
if string(tmp2) != content {
t.Errorf("Incorrect file: %s, want: %s.", tmp2, content)
return
}
if obj, ok := tmp1.(interface{ Close() error }); ok {
obj.Close()
}
tmp1, err = b.Cat("/tmp/test/test2.txt")
if err != nil {
t.Errorf("Cat error: %s", err)
return
}
tmp2, err = ioutil.ReadAll(tmp1)
if err != nil {
t.Errorf("Cat error: %s", err)
return
}
if string(tmp2) != "" {
t.Errorf("Incorrect file: %s, want: %s.", tmp2, "")
return
}
if obj, ok := tmp1.(interface{ Close() error }); ok {
obj.Close()
}
// remove file
b.Rm("/tmp/test/test2.txt")
tmp0, err = b.Ls("/tmp/test/")
if len(tmp0) != 2 {
t.Errorf("Test folder elements, got: %d, want: %d.", len(tmp0), 2)
return
}
tmp0, err = b.Ls("/tmp/test/")
if err != nil {
t.Errorf("Ls error %s", err)
return
}
if len(tmp0) != 2 {
t.Errorf("LS error: got: %d elmnt, want: %d", len(tmp0), 2)
return
}
// remove folder
b.Rm("/tmp/test/")
tmp0, err = b.Ls("/tmp/test/")
if err == nil {
t.Errorf("Removed folder still exists: %d", len(tmp0))
return
}
}