|
1 | 1 | package tests |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "bytes" |
5 | | - "errors" |
6 | | - "fmt" |
7 | | - "io" |
8 | | - "math/rand" |
9 | 4 | "testing" |
10 | 5 |
|
11 | | - "github.com/google/uuid" |
12 | 6 | "github.com/stretchr/testify/suite" |
13 | 7 |
|
14 | | - ps "go.beyondstorage.io/v5/pairs" |
15 | | - "go.beyondstorage.io/v5/pkg/randbytes" |
16 | 8 | "go.beyondstorage.io/v5/types" |
17 | 9 | ) |
18 | 10 |
|
@@ -94,361 +86,3 @@ func (s *StorageSuite) TestPath() { |
94 | 86 |
|
95 | 87 | suite.Run(s.T(), &storagePathSuite{p: s}) |
96 | 88 | } |
97 | | - |
98 | | -type storageReadSuite struct { |
99 | | - suite.Suite |
100 | | - |
101 | | - p *StorageSuite |
102 | | - |
103 | | - size int64 |
104 | | - content []byte |
105 | | - path string |
106 | | -} |
107 | | - |
108 | | -func (s *storageReadSuite) SetupTest() { |
109 | | - var err error |
110 | | - |
111 | | - s.size = rand.Int63n(4 * 1024 * 1024) // Max file size is 4MB |
112 | | - s.content, err = io.ReadAll(io.LimitReader(randbytes.NewRand(), s.size)) |
113 | | - s.NoError(err) |
114 | | - |
115 | | - s.path = uuid.New().String() |
116 | | - |
117 | | - _, err = s.p.store.Write(s.path, bytes.NewReader(s.content), s.size) |
118 | | - s.NoError(err) |
119 | | -} |
120 | | - |
121 | | -func (s *storageReadSuite) TearDownTest() { |
122 | | - err := s.p.store.Delete(s.path) |
123 | | - s.NoError(err) |
124 | | -} |
125 | | - |
126 | | -func (s *storageReadSuite) TestRead() { |
127 | | - var buf bytes.Buffer |
128 | | - |
129 | | - n, err := s.p.store.Read(s.path, &buf) |
130 | | - s.NoError(err) |
131 | | - s.Equal(s.size, n, "size should equal") |
132 | | - s.EqualValues(s.content, buf.Bytes(), "content should equal") |
133 | | -} |
134 | | - |
135 | | -func (s *storageReadSuite) TestReadWithIoCallback() { |
136 | | - curRead := int64(0) |
137 | | - readFn := func(bs []byte) { |
138 | | - curRead += int64(len(bs)) |
139 | | - } |
140 | | - |
141 | | - var buf bytes.Buffer |
142 | | - |
143 | | - n, err := s.p.store.Read(s.path, &buf, ps.WithIoCallback(readFn)) |
144 | | - s.NoError(err) |
145 | | - s.Equal(s.size, n, "size should equal") |
146 | | - s.Equal(s.size, curRead, "io callback should be called") |
147 | | - s.EqualValues(s.content, buf.Bytes(), "content should equal") |
148 | | -} |
149 | | - |
150 | | -func (s *storageReadSuite) TestReadWithOffset() { |
151 | | - offset := rand.Int63n(s.size) |
152 | | - |
153 | | - var buf bytes.Buffer |
154 | | - |
155 | | - n, err := s.p.store.Read(s.path, &buf, ps.WithOffset(offset)) |
156 | | - s.NoError(err) |
157 | | - s.Equal(s.size-offset, n, "size should equal") |
158 | | - s.EqualValues(s.content[offset:], buf.Bytes(), "content should equal") |
159 | | -} |
160 | | - |
161 | | -func (s *storageReadSuite) TestReadWithSize() { |
162 | | - length := rand.Int63n(s.size) |
163 | | - |
164 | | - var buf bytes.Buffer |
165 | | - |
166 | | - n, err := s.p.store.Read(s.path, &buf, ps.WithSize(length)) |
167 | | - s.NoError(err) |
168 | | - s.Equal(length, n, "size should equal") |
169 | | - s.EqualValues(s.content[:length], buf.Bytes(), "content should equal") |
170 | | -} |
171 | | - |
172 | | -func (s *storageReadSuite) TestReadWithSizeAndOffset() { |
173 | | - offset := rand.Int63n(s.size) |
174 | | - length := rand.Int63n(s.size - offset) |
175 | | - |
176 | | - var buf bytes.Buffer |
177 | | - |
178 | | - n, err := s.p.store.Read(s.path, &buf, ps.WithOffset(offset), ps.WithSize(length)) |
179 | | - s.NoError(err) |
180 | | - s.Equal(length, n, "size should equal") |
181 | | - s.EqualValues(s.content[offset:offset+length], buf.Bytes(), "content should equal") |
182 | | -} |
183 | | - |
184 | | -type storageWriteSuite struct { |
185 | | - suite.Suite |
186 | | - |
187 | | - p *StorageSuite |
188 | | - |
189 | | - size int64 |
190 | | - content []byte |
191 | | - path string |
192 | | -} |
193 | | - |
194 | | -func (s *storageWriteSuite) SetupTest() { |
195 | | - var err error |
196 | | - |
197 | | - s.size = rand.Int63n(4 * 1024 * 1024) // Max file size is 4MB |
198 | | - s.content, err = io.ReadAll(io.LimitReader(randbytes.NewRand(), s.size)) |
199 | | - s.NoError(err) |
200 | | - |
201 | | - s.path = uuid.New().String() |
202 | | -} |
203 | | - |
204 | | -func (s *storageWriteSuite) TearDownTest() { |
205 | | - err := s.p.store.Delete(s.path) |
206 | | - s.NoError(err) |
207 | | -} |
208 | | - |
209 | | -func (s *storageWriteSuite) TestWrite() { |
210 | | - n, err := s.p.store.Write(s.path, bytes.NewReader(s.content), s.size) |
211 | | - s.NoError(err) |
212 | | - s.Equal(s.size, n) |
213 | | -} |
214 | | - |
215 | | -func (s *storageWriteSuite) TestWriteWithSize() { |
216 | | - size := rand.Int63n(s.size) |
217 | | - |
218 | | - n, err := s.p.store.Write(s.path, bytes.NewReader(s.content[:size]), size) |
219 | | - s.NoError(err) |
220 | | - s.Equal(size, n) |
221 | | -} |
222 | | - |
223 | | -func (s *storageWriteSuite) TestWriteWithIoCallback() { |
224 | | - curWrite := int64(0) |
225 | | - writeFn := func(bs []byte) { |
226 | | - curWrite += int64(len(bs)) |
227 | | - } |
228 | | - |
229 | | - n, err := s.p.store.Write(s.path, bytes.NewReader(s.content), s.size, |
230 | | - ps.WithIoCallback(writeFn)) |
231 | | - s.NoError(err) |
232 | | - s.Equal(s.size, n, "write size should be equal") |
233 | | - s.Equal(s.size, curWrite, "io callback should be called") |
234 | | -} |
235 | | - |
236 | | -func (s *storageWriteSuite) TestWriteViaNilReader() { |
237 | | - _, err := s.p.store.Write(s.path, nil, 0) |
238 | | - s.NoError(err) |
239 | | -} |
240 | | - |
241 | | -func (s *storageWriteSuite) TestWriteViaValidReaderAndZeroSize() { |
242 | | - n, err := s.p.store.Write(s.path, bytes.NewReader(s.content), 0) |
243 | | - s.NoError(err) |
244 | | - s.Equal(int64(0), n) |
245 | | -} |
246 | | - |
247 | | -func (s *storageWriteSuite) TestWriteViaNilReaderAndValidSize() { |
248 | | - _, err := s.p.store.Write(s.path, nil, s.size) |
249 | | - s.Error(err) |
250 | | -} |
251 | | - |
252 | | -type storageStatSuite struct { |
253 | | - suite.Suite |
254 | | - |
255 | | - p *StorageSuite |
256 | | - |
257 | | - size int64 |
258 | | - content []byte |
259 | | - path string |
260 | | -} |
261 | | - |
262 | | -func (s *storageStatSuite) SetupTest() { |
263 | | - var err error |
264 | | - |
265 | | - s.size = rand.Int63n(4 * 1024 * 1024) // Max file size is 4MB |
266 | | - s.content, err = io.ReadAll(io.LimitReader(randbytes.NewRand(), s.size)) |
267 | | - s.NoError(err) |
268 | | - |
269 | | - s.path = uuid.New().String() |
270 | | - |
271 | | - _, err = s.p.store.Write(s.path, bytes.NewReader(s.content), s.size) |
272 | | - s.NoError(err) |
273 | | -} |
274 | | - |
275 | | -func (s *storageStatSuite) TearDownTest() { |
276 | | - err := s.p.store.Delete(s.path) |
277 | | - s.NoError(err) |
278 | | -} |
279 | | - |
280 | | -func (s *storageStatSuite) TestStat() { |
281 | | - o, err := s.p.store.Stat(s.path) |
282 | | - s.NoError(err) |
283 | | - s.NotNil(o) |
284 | | - |
285 | | - osize, ok := o.GetContentLength() |
286 | | - s.True(ok) |
287 | | - s.Equal(osize, s.size) |
288 | | -} |
289 | | - |
290 | | -type storageDeleteSuite struct { |
291 | | - suite.Suite |
292 | | - |
293 | | - p *StorageSuite |
294 | | - |
295 | | - size int64 |
296 | | - content []byte |
297 | | - path string |
298 | | -} |
299 | | - |
300 | | -func (s *storageDeleteSuite) SetupTest() { |
301 | | - var err error |
302 | | - |
303 | | - s.size = rand.Int63n(4 * 1024 * 1024) // Max file size is 4MB |
304 | | - s.content, err = io.ReadAll(io.LimitReader(randbytes.NewRand(), s.size)) |
305 | | - s.NoError(err) |
306 | | - |
307 | | - s.path = uuid.New().String() |
308 | | - |
309 | | - _, err = s.p.store.Write(s.path, bytes.NewReader(s.content), s.size) |
310 | | - s.NoError(err) |
311 | | -} |
312 | | - |
313 | | -func (s *storageDeleteSuite) TestDelete() { |
314 | | - err := s.p.store.Delete(s.path) |
315 | | - s.NoError(err) |
316 | | -} |
317 | | - |
318 | | -type storageListSuite struct { |
319 | | - suite.Suite |
320 | | - |
321 | | - p *StorageSuite |
322 | | - |
323 | | - base string |
324 | | - length int |
325 | | - paths []string |
326 | | -} |
327 | | - |
328 | | -func (s *storageListSuite) SetupTest() { |
329 | | - size := rand.Int63n(256) |
330 | | - |
331 | | - s.length = rand.Intn(16) |
332 | | - s.base = uuid.NewString() |
333 | | - s.paths = make([]string, s.length) |
334 | | - |
335 | | - for i := 0; i < s.length; i++ { |
336 | | - s.paths[i] = fmt.Sprintf("%s/%s", s.base, uuid.NewString()) |
337 | | - |
338 | | - _, err := s.p.store.Write(s.paths[i], |
339 | | - io.LimitReader(randbytes.NewRand(), size), size) |
340 | | - s.NoError(err) |
341 | | - } |
342 | | -} |
343 | | - |
344 | | -func (s *storageListSuite) TearDownTest() { |
345 | | - for i := 0; i < s.length; i++ { |
346 | | - err := s.p.store.Delete(s.paths[i]) |
347 | | - s.NoError(err) |
348 | | - } |
349 | | -} |
350 | | - |
351 | | -func (s *storageListSuite) TestList() { |
352 | | - it, err := s.p.store.List(s.base, ps.WithListMode(types.ListModeDir)) |
353 | | - s.NoError(err) |
354 | | - s.NotNil(it) |
355 | | - |
356 | | - paths := make([]string, 0) |
357 | | - for { |
358 | | - o, err := it.Next() |
359 | | - if errors.Is(err, types.IterateDone) { |
360 | | - break |
361 | | - } |
362 | | - s.NoError(err) |
363 | | - |
364 | | - paths = append(paths, o.Path) |
365 | | - } |
366 | | - s.ElementsMatch(s.paths, paths) |
367 | | -} |
368 | | - |
369 | | -func (s *storageListSuite) TestListWithoutListMode() { |
370 | | - it, err := s.p.store.List(s.base) |
371 | | - s.NoError(err) |
372 | | - s.NotNil(it) |
373 | | - |
374 | | - paths := make([]string, 0) |
375 | | - for { |
376 | | - o, err := it.Next() |
377 | | - if errors.Is(err, types.IterateDone) { |
378 | | - break |
379 | | - } |
380 | | - s.NoError(err) |
381 | | - |
382 | | - paths = append(paths, o.Path) |
383 | | - } |
384 | | - s.ElementsMatch(s.paths, paths) |
385 | | -} |
386 | | - |
387 | | -func (s *storageListSuite) TestListEmptyDir() { |
388 | | - path := uuid.New().String() |
389 | | - |
390 | | - it, err := s.p.store.List(path, ps.WithListMode(types.ListModeDir)) |
391 | | - s.NoError(err) |
392 | | - s.NotNil(it) |
393 | | - |
394 | | - o, err := it.Next() |
395 | | - s.ErrorIs(err, types.IterateDone) |
396 | | - s.Nil(o) |
397 | | -} |
398 | | - |
399 | | -type storagePathSuite struct { |
400 | | - suite.Suite |
401 | | - |
402 | | - p *StorageSuite |
403 | | - |
404 | | - base string |
405 | | - path string |
406 | | -} |
407 | | - |
408 | | -func (s *storagePathSuite) SetupTest() { |
409 | | - s.base = uuid.NewString() |
410 | | - s.path = uuid.NewString() |
411 | | -} |
412 | | - |
413 | | -func (s *storagePathSuite) TearDownTest() { |
414 | | - path := fmt.Sprintf("%s/%s", s.base, s.path) |
415 | | - |
416 | | - err := s.p.store.Delete(path) |
417 | | - s.NoError(err) |
418 | | -} |
419 | | - |
420 | | -func (s *storagePathSuite) TestAbsPath() { |
421 | | - m := s.p.store.Metadata() |
422 | | - |
423 | | - path := fmt.Sprintf("%s%s/%s", m.WorkDir, s.base, s.path) |
424 | | - |
425 | | - size := rand.Int63n(4 * 1024 * 1024) |
426 | | - content, err := io.ReadAll(io.LimitReader(randbytes.NewRand(), size)) |
427 | | - s.NoError(err) |
428 | | - |
429 | | - _, err = s.p.store.Write(path, bytes.NewReader(content), size) |
430 | | - s.NoError(err) |
431 | | - |
432 | | - var buf bytes.Buffer |
433 | | - |
434 | | - n, err := s.p.store.Read(path, &buf) |
435 | | - s.NoError(err) |
436 | | - s.Equal(size, n) |
437 | | -} |
438 | | - |
439 | | -func (s *storagePathSuite) TestBackslash() { |
440 | | - path := s.base + "\\" + s.path |
441 | | - |
442 | | - size := rand.Int63n(4 * 1024 * 1024) |
443 | | - content, err := io.ReadAll(io.LimitReader(randbytes.NewRand(), size)) |
444 | | - s.NoError(err) |
445 | | - |
446 | | - _, err = s.p.store.Write(path, bytes.NewReader(content), size) |
447 | | - s.NoError(err) |
448 | | - |
449 | | - var buf bytes.Buffer |
450 | | - |
451 | | - n, err := s.p.store.Read(path, &buf) |
452 | | - s.NoError(err) |
453 | | - s.Equal(size, n) |
454 | | -} |
0 commit comments