1
- use std:: { collections:: HashMap , time:: Duration } ;
1
+ use std:: { collections:: HashMap , path :: Path , time:: Duration } ;
2
2
3
3
use anyhow:: Context ;
4
4
use base:: { server:: ServerFlags , utils:: test_utils:: TestBedBuilder } ;
5
5
use ctor:: ctor;
6
6
use deno_core:: serde_json;
7
7
use event_worker:: events:: { LogLevel , WorkerEvents } ;
8
8
use hyper_v014:: { body:: to_bytes, Body , StatusCode } ;
9
- use rand:: RngCore ;
9
+ use once_cell:: sync:: Lazy ;
10
+ use rand:: { distributions:: Alphanumeric , Rng , RngCore } ;
10
11
use serde:: Deserialize ;
11
12
use serial_test:: serial;
12
13
use tokio:: sync:: mpsc;
@@ -19,6 +20,39 @@ fn init() {
19
20
let _ = dotenvy:: from_filename ( "./tests/.env" ) ;
20
21
}
21
22
23
+ fn is_supabase_storage_being_tested ( ) -> bool {
24
+ std:: env:: var ( "S3FS_TEST_SUPABASE_STORAGE" ) . unwrap_or_default ( ) == "true"
25
+ }
26
+
27
+ fn get_root_path ( ) -> & ' static str {
28
+ static VALUE : Lazy < String > = Lazy :: new ( || {
29
+ rand:: thread_rng ( )
30
+ . sample_iter ( & Alphanumeric )
31
+ . take ( 10 )
32
+ . map ( char:: from)
33
+ . collect ( )
34
+ } ) ;
35
+
36
+ VALUE . as_str ( )
37
+ }
38
+
39
+ fn get_path < P > ( path : P ) -> String
40
+ where
41
+ P : AsRef < Path > ,
42
+ {
43
+ let path = path. as_ref ( ) . to_str ( ) . unwrap ( ) ;
44
+
45
+ if path. is_empty ( ) {
46
+ return get_root_path ( ) . to_string ( ) ;
47
+ }
48
+
49
+ format ! (
50
+ "{}/{}" ,
51
+ get_root_path( ) ,
52
+ path. strip_prefix( '/' ) . unwrap_or( path)
53
+ )
54
+ }
55
+
22
56
fn get_tb_builder ( ) -> TestBedBuilder {
23
57
TestBedBuilder :: new ( "./tests/fixture/main_with_s3fs" ) . with_oneshot_policy ( None )
24
58
}
@@ -27,10 +61,14 @@ async fn remove(path: &str, recursive: bool) {
27
61
let tb = get_tb_builder ( ) . build ( ) . await ;
28
62
let resp = tb
29
63
. request ( |b| {
30
- b. uri ( format ! ( "/remove/{}?recursive={}" , path, recursive) )
31
- . method ( "GET" )
32
- . body ( Body :: empty ( ) )
33
- . context ( "can't make request" )
64
+ b. uri ( format ! (
65
+ "/remove/{}?recursive={}" ,
66
+ get_path( path) ,
67
+ recursive
68
+ ) )
69
+ . method ( "GET" )
70
+ . body ( Body :: empty ( ) )
71
+ . context ( "can't make request" )
34
72
} )
35
73
. await
36
74
. unwrap ( ) ;
@@ -57,7 +95,7 @@ async fn test_write_and_get_bytes(bytes: usize) {
57
95
58
96
let resp = tb
59
97
. request ( |b| {
60
- b. uri ( "/write/meow.bin" )
98
+ b. uri ( format ! ( "/write/{}" , get_path ( " meow.bin") ) )
61
99
. method ( "POST" )
62
100
. body ( arr. clone ( ) . into ( ) )
63
101
. context ( "can't make request" )
@@ -73,7 +111,7 @@ async fn test_write_and_get_bytes(bytes: usize) {
73
111
let tb = get_tb_builder ( ) . build ( ) . await ;
74
112
let mut resp = tb
75
113
. request ( |b| {
76
- b. uri ( "/get/meow.bin" )
114
+ b. uri ( format ! ( "/get/{}" , get_path ( " meow.bin") ) )
77
115
. method ( "GET" )
78
116
. body ( Body :: empty ( ) )
79
117
. context ( "can't make request" )
@@ -126,7 +164,7 @@ async fn test_write_and_get_over_50_mib() {
126
164
127
165
let resp = tb
128
166
. request ( |b| {
129
- b. uri ( "/write/meow.bin" )
167
+ b. uri ( format ! ( "/write/{}" , get_path ( " meow.bin") ) )
130
168
. method ( "POST" )
131
169
. body ( arr. clone ( ) . into ( ) )
132
170
. context ( "can't make request" )
@@ -147,7 +185,7 @@ async fn test_write_and_get_over_50_mib() {
147
185
148
186
let resp = tb
149
187
. request ( |b| {
150
- b. uri ( "/get/meow.bin" )
188
+ b. uri ( format ! ( "/get/{}" , get_path ( " meow.bin") ) )
151
189
. method ( "GET" )
152
190
. body ( Body :: empty ( ) )
153
191
. context ( "can't make request" )
@@ -207,7 +245,7 @@ async fn test_mkdir_and_read_dir() {
207
245
let tb = get_tb_builder ( ) . build ( ) . await ;
208
246
let resp = tb
209
247
. request ( |b| {
210
- b. uri ( "/mkdir/a" )
248
+ b. uri ( format ! ( "/mkdir/{}?recursive=true" , get_path ( "a" ) ) )
211
249
. method ( "GET" )
212
250
. body ( Body :: empty ( ) )
213
251
. context ( "can't make request" )
@@ -223,7 +261,7 @@ async fn test_mkdir_and_read_dir() {
223
261
let tb = get_tb_builder ( ) . build ( ) . await ;
224
262
let mut resp = tb
225
263
. request ( |b| {
226
- b. uri ( "/read-dir" )
264
+ b. uri ( format ! ( "/read-dir/{}" , get_root_path ( ) ) )
227
265
. method ( "GET" )
228
266
. body ( Body :: empty ( ) )
229
267
. context ( "can't make request" )
@@ -253,7 +291,7 @@ async fn test_mkdir_recursive_and_read_dir() {
253
291
let tb = get_tb_builder ( ) . build ( ) . await ;
254
292
let resp = tb
255
293
. request ( |b| {
256
- b. uri ( "/mkdir/a/b/c/meow?recursive=true" )
294
+ b. uri ( format ! ( "/mkdir/{}?recursive=true" , get_path ( " a/b/c/meow" ) ) )
257
295
. method ( "GET" )
258
296
. body ( Body :: empty ( ) )
259
297
. context ( "can't make request" )
@@ -271,7 +309,7 @@ async fn test_mkdir_recursive_and_read_dir() {
271
309
for [ dir, expected] in [ [ "" , "a" ] , [ "a" , "b" ] , [ "a/b" , "c" ] , [ "a/b/c" , "meow" ] ] {
272
310
let mut resp = tb
273
311
. request ( |b| {
274
- b. uri ( format ! ( "/read-dir/{}" , dir) )
312
+ b. uri ( format ! ( "/read-dir/{}" , get_path ( dir) ) )
275
313
. method ( "GET" )
276
314
. body ( Body :: empty ( ) )
277
315
. context ( "can't make request" )
@@ -302,7 +340,7 @@ async fn test_mkdir_with_no_recursive_opt_must_check_parent_path_exists() {
302
340
let tb = get_tb_builder ( ) . build ( ) . await ;
303
341
let resp = tb
304
342
. request ( |b| {
305
- b. uri ( "/mkdir/a" )
343
+ b. uri ( format ! ( "/mkdir/{}?recursive=true" , get_path ( "a" ) ) )
306
344
. method ( "GET" )
307
345
. body ( Body :: empty ( ) )
308
346
. context ( "can't make request" )
@@ -322,7 +360,7 @@ async fn test_mkdir_with_no_recursive_opt_must_check_parent_path_exists() {
322
360
. await ;
323
361
let resp = tb
324
362
. request ( |b| {
325
- b. uri ( "/mkdir/a/b/c" )
363
+ b. uri ( format ! ( "/mkdir/{}" , get_path ( " a/b/c") ) )
326
364
. method ( "GET" )
327
365
. body ( Body :: empty ( ) )
328
366
. context ( "can't make request" )
@@ -343,8 +381,9 @@ async fn test_mkdir_with_no_recursive_opt_must_check_parent_path_exists() {
343
381
continue ;
344
382
}
345
383
346
- found_no_such_file_or_directory_error =
347
- ev. msg . contains ( "No such file or directory: a/b" ) ;
384
+ found_no_such_file_or_directory_error = ev
385
+ . msg
386
+ . contains ( & format ! ( "No such file or directory: {}" , get_path( "a/b" ) ) ) ;
348
387
349
388
if found_no_such_file_or_directory_error {
350
389
break ;
@@ -365,7 +404,7 @@ async fn test_mkdir_recursive_and_remove_recursive() {
365
404
let tb = get_tb_builder ( ) . build ( ) . await ;
366
405
let resp = tb
367
406
. request ( |b| {
368
- b. uri ( "/mkdir/a/b/c/meow?recursive=true" )
407
+ b. uri ( format ! ( "/mkdir/{}?recursive=true" , get_path ( " a/b/c/meow" ) ) )
369
408
. method ( "GET" )
370
409
. body ( Body :: empty ( ) )
371
410
. context ( "can't make request" )
@@ -389,7 +428,7 @@ async fn test_mkdir_recursive_and_remove_recursive() {
389
428
390
429
let resp = tb
391
430
. request ( |b| {
392
- b. uri ( "/write/a/b/c/meeeeow.bin" )
431
+ b. uri ( format ! ( "/write/{}" , get_path ( " a/b/c/meeeeow.bin") ) )
393
432
. method ( "POST" )
394
433
. body ( arr. clone ( ) . into ( ) )
395
434
. context ( "can't make request" )
@@ -405,7 +444,7 @@ async fn test_mkdir_recursive_and_remove_recursive() {
405
444
let tb = get_tb_builder ( ) . build ( ) . await ;
406
445
let mut resp = tb
407
446
. request ( |b| {
408
- b. uri ( "/read-dir/a/b/c" )
447
+ b. uri ( format ! ( "/read-dir/{}" , get_path ( " a/b/c") ) )
409
448
. method ( "GET" )
410
449
. body ( Body :: empty ( ) )
411
450
. context ( "can't make request" )
@@ -443,7 +482,7 @@ async fn test_mkdir_recursive_and_remove_recursive() {
443
482
let tb = get_tb_builder ( ) . build ( ) . await ;
444
483
let mut resp = tb
445
484
. request ( |b| {
446
- b. uri ( "/read-dir/a" )
485
+ b. uri ( format ! ( "/read-dir/{}" , get_path ( "a" ) ) )
447
486
. method ( "GET" )
448
487
. body ( Body :: empty ( ) )
449
488
. context ( "can't make request" )
@@ -473,7 +512,7 @@ async fn test_mkdir_recursive_and_remove_recursive() {
473
512
let tb = get_tb_builder ( ) . build ( ) . await ;
474
513
let mut resp = tb
475
514
. request ( |b| {
476
- b. uri ( "/read-dir" )
515
+ b. uri ( format ! ( "/read-dir/{}" , get_root_path ( ) ) )
477
516
. method ( "GET" )
478
517
. body ( Body :: empty ( ) )
479
518
. context ( "can't make request" )
@@ -486,7 +525,15 @@ async fn test_mkdir_recursive_and_remove_recursive() {
486
525
let buf = to_bytes ( resp. body_mut ( ) ) . await . unwrap ( ) ;
487
526
let value = DenoDirEntry :: from_json_unchecked ( & buf) ;
488
527
489
- assert_eq ! ( value. len( ) , 1 ) ;
528
+ assert_eq ! (
529
+ value. len( ) ,
530
+ if is_supabase_storage_being_tested( ) {
531
+ // .emptyFolderPlaceholder in Supabase Storage
532
+ 2
533
+ } else {
534
+ 1
535
+ }
536
+ ) ;
490
537
assert ! ( value. contains_key( "a" ) ) ;
491
538
assert ! ( value. get( "a" ) . unwrap( ) . is_directory) ;
492
539
@@ -499,7 +546,7 @@ async fn test_mkdir_recursive_and_remove_recursive() {
499
546
let tb = get_tb_builder ( ) . build ( ) . await ;
500
547
let mut resp = tb
501
548
. request ( |b| {
502
- b. uri ( "/read-dir" )
549
+ b. uri ( format ! ( "/read-dir/{}" , get_root_path ( ) ) )
503
550
. method ( "GET" )
504
551
. body ( Body :: empty ( ) )
505
552
. context ( "can't make request" )
@@ -512,12 +559,16 @@ async fn test_mkdir_recursive_and_remove_recursive() {
512
559
let buf = to_bytes ( resp. body_mut ( ) ) . await . unwrap ( ) ;
513
560
let value = DenoDirEntry :: from_json_unchecked ( & buf) ;
514
561
515
- assert_eq ! ( value. len( ) , 0 ) ;
562
+ assert_eq ! (
563
+ value. len( ) ,
564
+ if is_supabase_storage_being_tested( ) {
565
+ // .emptyFolderPlaceholder in Supabase Storage
566
+ 1
567
+ } else {
568
+ 0
569
+ }
570
+ ) ;
516
571
517
572
tb. exit ( Duration :: from_secs ( TESTBED_DEADLINE_SEC ) ) . await ;
518
573
}
519
574
}
520
-
521
- fn is_supabase_storage_being_tested ( ) -> bool {
522
- std:: env:: var ( "S3FS_TEST_SUPABASE_STORAGE" ) . unwrap_or_default ( ) == "true"
523
- }
0 commit comments