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 } }