1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
package storage_test
import (
"bytes"
"github.com/stretchr/testify/assert"
"github.com/viant/toolbox"
"github.com/viant/toolbox/storage"
_ "github.com/viant/toolbox/storage/scp"
"io/ioutil"
"os"
"os/exec"
"path"
"strings"
"testing"
)
func TestStorageService_List(t *testing.T) {
service := storage.NewService()
assert.NotNil(t, service)
fileName, _, _ := toolbox.CallerInfo(2)
parent, _ := path.Split(fileName)
baseUrl := "file://" + parent + "/test"
if toolbox.FileExists(parent + "/test/file3.txt") {
os.Remove(parent + "/test/file3.txt")
}
defer os.Remove(parent + "/test/file3.txt")
objects, err := service.List(baseUrl)
assert.Nil(t, err)
assert.True(t, len(objects) >= 5)
var objectByUrl = make(map[string]storage.Object)
for _, object := range objects {
objectByUrl[object.URL()] = object
}
assert.NotNil(t, objectByUrl[baseUrl+"/dir"])
assert.NotNil(t, objectByUrl[baseUrl+"/file1.txt"])
assert.NotNil(t, objectByUrl[baseUrl+"/file2.txt"])
assert.True(t, objectByUrl[baseUrl+"/dir"].IsFolder())
assert.True(t, objectByUrl[baseUrl+"/file2.txt"].IsContent())
{
reader, err := service.Download(objectByUrl[baseUrl+"/file2.txt"])
if assert.Nil(t, err) {
defer reader.Close()
content, err := ioutil.ReadAll(reader)
assert.Nil(t, err)
assert.Equal(t, "line1\nline2", string(content))
}
}
var newFileUrl = baseUrl + "/file3.txt"
err = service.Upload(baseUrl+"/file3.txt", bytes.NewReader([]byte("abc")))
assert.Nil(t, err)
exists, err := service.Exists(baseUrl + "/file3.txt")
assert.Nil(t, err)
assert.True(t, exists)
{
object, err := service.StorageObject(newFileUrl)
assert.Nil(t, err)
reader, err := service.Download(object)
if assert.Nil(t, err) {
defer reader.Close()
content, err := ioutil.ReadAll(reader)
assert.Nil(t, err)
assert.Equal(t, "abc", string(content))
}
}
}
func TestUpload(t *testing.T) {
var path = "/tmp/local/test.txt"
toolbox.RemoveFileIfExist(path)
exec.Command("rmdir /tmp/local").CombinedOutput()
var destination = "scp://127.0.0.1/" + path
service, err := storage.NewServiceForURL(destination, "")
assert.Nil(t, err)
err = service.Upload(destination, strings.NewReader("abc"))
assert.Nil(t, err)
}
|