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