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 }