Files
filestash/server/model/files_test.go
2019-01-28 01:09:45 +11:00

251 lines
5.5 KiB
Go

package model
import (
. "github.com/mickael-kerjean/filestash/server/common"
"io/ioutil"
"strings"
"testing"
)
var app *App
func init() {
app = &App{}
}
// 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) {
// b, err := NewBackend(&App{}, map[string]string{
// "type": "s3",
// "access_key_id": "Q3AM3UQ867SPQQA43P2F",
// "secret_access_key": "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
// "endpoint": "https://play.minio.io:9000/",
// })
// 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
}
}