mirror of
				https://github.com/mickael-kerjean/filestash.git
				synced 2025-10-31 10:07:15 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			263 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			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
 | |
| 	}
 | |
| }
 | 
