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  }