github.com/viant/toolbox@v0.34.5/storage/mem_service_test.go (about)

     1  package storage_test
     2  
     3  import (
     4  	"github.com/stretchr/testify/assert"
     5  	"github.com/viant/toolbox"
     6  	"github.com/viant/toolbox/storage"
     7  	"io/ioutil"
     8  	"strings"
     9  	"testing"
    10  )
    11  
    12  func Test_NewMemoryService(t *testing.T) {
    13  	storage.ResetMemory()
    14  	service := storage.NewMemoryService()
    15  
    16  	var files = map[string]string{
    17  		"mem:///test/file1.txt":     "abc",
    18  		"mem:///test/file2.txt":     "xyz",
    19  		"mem:///test/sub/file1.txt": "---",
    20  		"mem:///test/sub/file2.txt": "xxx",
    21  	}
    22  
    23  	for k, v := range files {
    24  		err := service.Upload(k, strings.NewReader(v))
    25  		assert.Nil(t, err)
    26  	}
    27  
    28  	for k, v := range files {
    29  		object, err := service.StorageObject(k)
    30  		if assert.Nil(t, err) {
    31  			reader, err := service.Download(object)
    32  			if assert.Nil(t, err) {
    33  				defer reader.Close()
    34  				content, err := ioutil.ReadAll(reader)
    35  				assert.Nil(t, err)
    36  				assert.Equal(t, v, string(content))
    37  
    38  			}
    39  		}
    40  	}
    41  
    42  	{
    43  		objects, err := service.List("mem:///")
    44  		assert.Nil(t, err)
    45  		assert.Equal(t, 2, len(objects))
    46  		assert.True(t, objects[0].IsFolder())
    47  		assert.EqualValues(t, "mem:///", objects[0].URL())
    48  		assert.True(t, objects[1].IsFolder())
    49  		assert.EqualValues(t, "mem:///test", objects[1].URL())
    50  	}
    51  
    52  	{
    53  		objects, err := service.List("mem:///test")
    54  		assert.Nil(t, err)
    55  		assert.Equal(t, 4, len(objects))
    56  
    57  		assert.True(t, objects[0].IsFolder())
    58  		assert.EqualValues(t, "mem:///test", objects[0].URL())
    59  		assert.True(t, objects[1].IsFolder())
    60  		assert.EqualValues(t, "mem:///test/sub", objects[1].URL())
    61  	}
    62  
    63  	{
    64  		objects, err := service.List("mem:///test/sub/")
    65  		assert.Nil(t, err)
    66  		assert.Equal(t, 3, len(objects))
    67  
    68  		assert.True(t, objects[0].IsFolder())
    69  		for k := range files {
    70  			object, err := service.StorageObject(k)
    71  			if assert.Nil(t, err) {
    72  				err = service.Delete(object)
    73  				assert.Nil(t, err)
    74  			}
    75  		}
    76  	}
    77  
    78  }
    79  
    80  func TestMemCopy(t *testing.T) {
    81  
    82  	service := storage.NewMemoryService()
    83  	defer service.Close()
    84  
    85  	var files = map[string]string{
    86  		"mem:///test/file1.txt":     "abc",
    87  		"mem:///test/file2.txt":     "xyz",
    88  		"mem:///test/sub/file1.txt": "---",
    89  		"mem:///test/sub/file2.txt": "xxx",
    90  	}
    91  
    92  	for k, v := range files {
    93  		err := service.Upload(k, strings.NewReader(v))
    94  		assert.Nil(t, err)
    95  	}
    96  
    97  	for k, v := range files {
    98  		object, err := service.StorageObject(k)
    99  		if assert.Nil(t, err) {
   100  			reader, err := service.Download(object)
   101  			if assert.Nil(t, err) {
   102  				defer reader.Close()
   103  				content, err := ioutil.ReadAll(reader)
   104  				assert.Nil(t, err)
   105  				assert.Equal(t, v, string(content))
   106  
   107  			}
   108  		}
   109  	}
   110  
   111  	baseUrl := "mem://"
   112  	sourceURL := toolbox.URLPathJoin(baseUrl, "/test/")
   113  	targetURL := toolbox.URLPathJoin(baseUrl, "/target")
   114  
   115  	err := storage.Copy(service, sourceURL, service, targetURL, nil, nil)
   116  	assert.Nil(t, err)
   117  
   118  	for k, v := range files {
   119  		k = strings.Replace(k, "mem:///test/", "mem:///target/", 1)
   120  
   121  		object, err := service.StorageObject(k)
   122  		if assert.Nil(t, err) {
   123  			reader, err := service.Download(object)
   124  			if assert.Nil(t, err, k) {
   125  				defer reader.Close()
   126  				content, err := ioutil.ReadAll(reader)
   127  				assert.Nil(t, err)
   128  				assert.Equal(t, v, string(content))
   129  
   130  			}
   131  		}
   132  	}
   133  
   134  }