This is an automated email from the ASF dual-hosted git repository.

suyanhanx pushed a commit to branch test-remove-parents-folder
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git

commit e2cad8531bb6d5fe7d2efdad475afa3ff519e078
Author: suyanhanx <[email protected]>
AuthorDate: Sun Jul 9 18:00:36 2023 +0800

    try to remove parent folder
    
    Signed-off-by: suyanhanx <[email protected]>
---
 core/tests/behavior/append.rs          |  7 +++--
 core/tests/behavior/blocking_copy.rs   | 27 ++++++++++-------
 core/tests/behavior/blocking_list.rs   | 11 +++++--
 core/tests/behavior/blocking_rename.rs | 29 ++++++++++--------
 core/tests/behavior/blocking_write.rs  | 28 +++++++++--------
 core/tests/behavior/copy.rs            | 23 ++++++++------
 core/tests/behavior/list.rs            | 20 +++++++++----
 core/tests/behavior/presign.rs         |  6 ++--
 core/tests/behavior/rename.rs          | 29 ++++++++++--------
 core/tests/behavior/write.rs           | 55 ++++++++++++++++++++++------------
 10 files changed, 146 insertions(+), 89 deletions(-)

diff --git a/core/tests/behavior/append.rs b/core/tests/behavior/append.rs
index 0e5cf8801..10a0e5666 100644
--- a/core/tests/behavior/append.rs
+++ b/core/tests/behavior/append.rs
@@ -36,7 +36,7 @@ pub fn behavior_append_tests(op: &Operator) -> Vec<Trial> {
     async_trials!(
         op,
         test_append_create_append,
-        test_append_with_dir_path,
+        test_append_to_dir_path,
         test_append_with_cache_control,
         test_append_with_content_type,
         test_append_with_content_disposition,
@@ -71,7 +71,7 @@ pub async fn test_append_create_append(op: Operator) -> 
Result<()> {
 }
 
 /// Test append to a directory path must fail.
-pub async fn test_append_with_dir_path(op: Operator) -> Result<()> {
+pub async fn test_append_to_dir_path(op: Operator) -> Result<()> {
     let path = format!("{}/", uuid::Uuid::new_v4());
     let (content, _) = gen_bytes();
 
@@ -79,6 +79,8 @@ pub async fn test_append_with_dir_path(op: Operator) -> 
Result<()> {
     assert!(res.is_err());
     assert_eq!(res.unwrap_err().kind(), ErrorKind::IsADirectory);
 
+    op.delete(&path).await.expect("delete file must success");
+
     Ok(())
 }
 
@@ -194,6 +196,7 @@ pub async fn test_appender_futures_copy(op: Operator) -> 
Result<()> {
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
diff --git a/core/tests/behavior/blocking_copy.rs 
b/core/tests/behavior/blocking_copy.rs
index 43d0faec5..749370e6d 100644
--- a/core/tests/behavior/blocking_copy.rs
+++ b/core/tests/behavior/blocking_copy.rs
@@ -54,6 +54,7 @@ pub fn test_blocking_copy_file(op: BlockingOperator) -> 
Result<()> {
 
     op.delete(&source_path).expect("delete must succeed");
     op.delete(&target_path).expect("delete must succeed");
+
     Ok(())
 }
 
@@ -66,6 +67,7 @@ pub fn test_blocking_copy_non_existing_source(op: 
BlockingOperator) -> Result<()
         .copy(&source_path, &target_path)
         .expect_err("copy must fail");
     assert_eq!(err.kind(), ErrorKind::NotFound);
+
     Ok(())
 }
 
@@ -80,6 +82,9 @@ pub fn test_blocking_copy_source_dir(op: BlockingOperator) -> 
Result<()> {
         .copy(&source_path, &target_path)
         .expect_err("copy must fail");
     assert_eq!(err.kind(), ErrorKind::IsADirectory);
+
+    op.delete(&source_path).expect("delete must succeed");
+
     Ok(())
 }
 
@@ -101,6 +106,7 @@ pub fn test_blocking_copy_target_dir(op: BlockingOperator) 
-> Result<()> {
 
     op.delete(&source_path).expect("delete must succeed");
     op.delete(&target_path).expect("delete must succeed");
+
     Ok(())
 }
 
@@ -117,30 +123,28 @@ pub fn test_blocking_copy_self(op: BlockingOperator) -> 
Result<()> {
     assert_eq!(err.kind(), ErrorKind::IsSameFile);
 
     op.delete(&source_path).expect("delete must succeed");
+
     Ok(())
 }
 
 /// Copy to a nested path, parent path should be created successfully.
 pub fn test_blocking_copy_nested(op: BlockingOperator) -> Result<()> {
-    let source_path = uuid::Uuid::new_v4().to_string();
+    let dir = &format!("{}/", uuid::Uuid::new_v4());
+
+    let source_path = &format!("{}{}/{}", dir, uuid::Uuid::new_v4(), 
uuid::Uuid::new_v4());
     let (source_content, _) = gen_bytes();
 
-    op.write(&source_path, source_content.clone())?;
+    op.write(source_path, source_content.clone())?;
 
-    let target_path = format!(
-        "{}/{}/{}",
-        uuid::Uuid::new_v4(),
-        uuid::Uuid::new_v4(),
-        uuid::Uuid::new_v4()
-    );
+    let target_path = format!("{}{}/{}", dir, uuid::Uuid::new_v4(), 
uuid::Uuid::new_v4());
 
-    op.copy(&source_path, &target_path)?;
+    op.copy(source_path, &target_path)?;
 
     let target_content = op.read(&target_path).expect("read must succeed");
     assert_eq!(target_content, source_content);
 
-    op.delete(&source_path).expect("delete must succeed");
-    op.delete(&target_path).expect("delete must succeed");
+    op.remove_all(dir).expect("remove_all must succeed");
+
     Ok(())
 }
 
@@ -164,5 +168,6 @@ pub fn test_blocking_copy_overwrite(op: BlockingOperator) 
-> Result<()> {
 
     op.delete(&source_path).expect("delete must succeed");
     op.delete(&target_path).expect("delete must succeed");
+
     Ok(())
 }
diff --git a/core/tests/behavior/blocking_list.rs 
b/core/tests/behavior/blocking_list.rs
index 745396848..bb26f1c4d 100644
--- a/core/tests/behavior/blocking_list.rs
+++ b/core/tests/behavior/blocking_list.rs
@@ -43,7 +43,6 @@ pub fn behavior_blocking_list_tests(op: &Operator) -> 
Vec<Trial> {
 pub fn test_blocking_list_dir(op: BlockingOperator) -> Result<()> {
     let parent = uuid::Uuid::new_v4().to_string();
     let path = format!("{parent}/{}", uuid::Uuid::new_v4());
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content).expect("write must succeed");
@@ -63,7 +62,9 @@ pub fn test_blocking_list_dir(op: BlockingOperator) -> 
Result<()> {
     }
     assert!(found, "file should be found in list");
 
-    op.delete(&path).expect("delete must succeed");
+    op.remove_all(&format!("{parent}/"))
+        .expect("remove must succeed");
+
     Ok(())
 }
 
@@ -80,6 +81,7 @@ pub fn test_blocking_list_non_exist_dir(op: BlockingOperator) 
-> Result<()> {
     debug!("got objects: {:?}", objects);
 
     assert_eq!(objects.len(), 0, "dir should only return empty");
+
     Ok(())
 }
 
@@ -116,6 +118,9 @@ pub fn test_blocking_scan(op: BlockingOperator) -> 
Result<()> {
     assert!(actual.contains("x/y"));
     assert!(actual.contains("x/x/y"));
     assert!(actual.contains("x/x/x/y"));
+
+    op.remove_all(&format!("{parent}/"))?;
+
     Ok(())
 }
 
@@ -135,7 +140,7 @@ pub fn test_blocking_remove_all(op: BlockingOperator) -> 
Result<()> {
         }
     }
 
-    op.remove_all(&format!("{parent}/x/"))?;
+    op.remove_all(&format!("{parent}/"))?;
 
     for path in expected.iter() {
         if path.ends_with('/') {
diff --git a/core/tests/behavior/blocking_rename.rs 
b/core/tests/behavior/blocking_rename.rs
index 4506c2c5c..e1d7d2b73 100644
--- a/core/tests/behavior/blocking_rename.rs
+++ b/core/tests/behavior/blocking_rename.rs
@@ -57,6 +57,7 @@ pub fn test_blocking_rename_file(op: BlockingOperator) -> 
Result<()> {
 
     op.delete(&source_path).expect("delete must succeed");
     op.delete(&target_path).expect("delete must succeed");
+
     Ok(())
 }
 
@@ -69,6 +70,7 @@ pub fn test_blocking_rename_non_existing_source(op: 
BlockingOperator) -> Result<
         .rename(&source_path, &target_path)
         .expect_err("rename must fail");
     assert_eq!(err.kind(), ErrorKind::NotFound);
+
     Ok(())
 }
 
@@ -83,6 +85,9 @@ pub fn test_blocking_rename_source_dir(op: BlockingOperator) 
-> Result<()> {
         .rename(&source_path, &target_path)
         .expect_err("rename must fail");
     assert_eq!(err.kind(), ErrorKind::IsADirectory);
+
+    op.delete(&source_path).expect("delete must succeed");
+
     Ok(())
 }
 
@@ -104,6 +109,7 @@ pub fn test_blocking_rename_target_dir(op: 
BlockingOperator) -> Result<()> {
 
     op.delete(&source_path).expect("delete must succeed");
     op.delete(&target_path).expect("delete must succeed");
+
     Ok(())
 }
 
@@ -120,33 +126,31 @@ pub fn test_blocking_rename_self(op: BlockingOperator) -> 
Result<()> {
     assert_eq!(err.kind(), ErrorKind::IsSameFile);
 
     op.delete(&source_path).expect("delete must succeed");
+
     Ok(())
 }
 
 /// Rename to a nested path, parent path should be created successfully.
 pub fn test_blocking_rename_nested(op: BlockingOperator) -> Result<()> {
-    let source_path = uuid::Uuid::new_v4().to_string();
+    let dir = &format!("{}/", uuid::Uuid::new_v4());
+
+    let source_path = &format!("{}{}/{}", dir, uuid::Uuid::new_v4(), 
uuid::Uuid::new_v4());
     let (source_content, _) = gen_bytes();
 
-    op.write(&source_path, source_content.clone())?;
+    op.write(source_path, source_content.clone())?;
 
-    let target_path = format!(
-        "{}/{}/{}",
-        uuid::Uuid::new_v4(),
-        uuid::Uuid::new_v4(),
-        uuid::Uuid::new_v4()
-    );
+    let target_path = format!("{}{}/{}", dir, uuid::Uuid::new_v4(), 
uuid::Uuid::new_v4());
 
-    op.rename(&source_path, &target_path)?;
+    op.rename(source_path, &target_path)?;
 
-    let err = op.stat(&source_path).expect_err("stat must fail");
+    let err = op.stat(source_path).expect_err("stat must fail");
     assert_eq!(err.kind(), ErrorKind::NotFound);
 
     let target_content = op.read(&target_path).expect("read must succeed");
     assert_eq!(target_content, source_content);
 
-    op.delete(&source_path).expect("delete must succeed");
-    op.delete(&target_path).expect("delete must succeed");
+    op.remove_all(dir).expect("delete must succeed");
+
     Ok(())
 }
 
@@ -173,5 +177,6 @@ pub fn test_blocking_rename_overwrite(op: BlockingOperator) 
-> Result<()> {
 
     op.delete(&source_path).expect("delete must succeed");
     op.delete(&target_path).expect("delete must succeed");
+
     Ok(())
 }
diff --git a/core/tests/behavior/blocking_write.rs 
b/core/tests/behavior/blocking_write.rs
index 3775509c2..efc1a568f 100644
--- a/core/tests/behavior/blocking_write.rs
+++ b/core/tests/behavior/blocking_write.rs
@@ -19,7 +19,7 @@ use std::io::Read;
 use std::io::Seek;
 
 use anyhow::Result;
-use log::debug;
+
 use sha2::Digest;
 use sha2::Sha256;
 
@@ -65,6 +65,7 @@ pub fn test_blocking_create_dir(op: BlockingOperator) -> 
Result<()> {
     assert_eq!(meta.mode(), EntryMode::DIR);
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
@@ -80,13 +81,13 @@ pub fn test_blocking_create_dir_existing(op: 
BlockingOperator) -> Result<()> {
     assert_eq!(meta.mode(), EntryMode::DIR);
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
 /// Write a single file and test with stat.
 pub fn test_blocking_write_file(op: BlockingOperator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content)?;
@@ -95,6 +96,7 @@ pub fn test_blocking_write_file(op: BlockingOperator) -> 
Result<()> {
     assert_eq!(meta.content_length(), size as u64);
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
@@ -107,13 +109,14 @@ pub fn test_blocking_write_with_dir_path(op: 
BlockingOperator) -> Result<()> {
     assert!(result.is_err());
     assert_eq!(result.unwrap_err().kind(), ErrorKind::IsADirectory);
 
+    op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
 /// Write a single file with special chars should succeed.
 pub fn test_blocking_write_with_special_chars(op: BlockingOperator) -> 
Result<()> {
     let path = format!("{} !@#$%^&()_+-=;',.txt", uuid::Uuid::new_v4());
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content)?;
@@ -122,13 +125,13 @@ pub fn test_blocking_write_with_special_chars(op: 
BlockingOperator) -> Result<()
     assert_eq!(meta.content_length(), size as u64);
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
 /// Stat existing file should return metadata
 pub fn test_blocking_stat_file(op: BlockingOperator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content).expect("write must succeed");
@@ -138,6 +141,7 @@ pub fn test_blocking_stat_file(op: BlockingOperator) -> 
Result<()> {
     assert_eq!(meta.content_length(), size as u64);
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
@@ -151,13 +155,13 @@ pub fn test_blocking_stat_dir(op: BlockingOperator) -> 
Result<()> {
     assert_eq!(meta.mode(), EntryMode::DIR);
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
 /// Stat existing file with special chars should return metadata
 pub fn test_blocking_stat_with_special_chars(op: BlockingOperator) -> 
Result<()> {
     let path = format!("{} !@#$%^&()_+-=;',.txt", uuid::Uuid::new_v4());
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content).expect("write must succeed");
@@ -167,6 +171,7 @@ pub fn test_blocking_stat_with_special_chars(op: 
BlockingOperator) -> Result<()>
     assert_eq!(meta.content_length(), size as u64);
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
@@ -184,7 +189,6 @@ pub fn test_blocking_stat_not_exist(op: BlockingOperator) 
-> Result<()> {
 /// Read full content should match.
 pub fn test_blocking_read_full(op: BlockingOperator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content.clone())
@@ -199,13 +203,13 @@ pub fn test_blocking_read_full(op: BlockingOperator) -> 
Result<()> {
     );
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
 /// Read range content should match.
 pub fn test_blocking_read_range(op: BlockingOperator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
     let (offset, length) = gen_offset_length(size);
 
@@ -224,13 +228,13 @@ pub fn test_blocking_read_range(op: BlockingOperator) -> 
Result<()> {
     );
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
 /// Read large range content should match.
 pub fn test_blocking_read_large_range(op: BlockingOperator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
     let (offset, _) = gen_offset_length(size);
 
@@ -250,6 +254,7 @@ pub fn test_blocking_read_large_range(op: BlockingOperator) 
-> Result<()> {
     );
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
@@ -266,7 +271,6 @@ pub fn test_blocking_read_not_exist(op: BlockingOperator) 
-> Result<()> {
 
 pub fn test_blocking_fuzz_range_reader(op: BlockingOperator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, _) = gen_bytes();
 
     op.write(&path, content.clone())
@@ -294,12 +298,12 @@ pub fn test_blocking_fuzz_range_reader(op: 
BlockingOperator) -> Result<()> {
     }
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
 pub fn test_blocking_fuzz_offset_reader(op: BlockingOperator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, _) = gen_bytes();
 
     op.write(&path, content.clone())
@@ -327,12 +331,12 @@ pub fn test_blocking_fuzz_offset_reader(op: 
BlockingOperator) -> Result<()> {
     }
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
 pub fn test_blocking_fuzz_part_reader(op: BlockingOperator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
     let (offset, length) = gen_offset_length(size);
 
@@ -361,13 +365,13 @@ pub fn test_blocking_fuzz_part_reader(op: 
BlockingOperator) -> Result<()> {
     }
 
     op.delete(&path).expect("delete must succeed");
+
     Ok(())
 }
 
 // Delete existing file should succeed.
 pub fn test_blocking_delete_file(op: BlockingOperator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, _) = gen_bytes();
 
     op.write(&path, content).expect("write must succeed");
diff --git a/core/tests/behavior/copy.rs b/core/tests/behavior/copy.rs
index 086fa160e..5f20640ac 100644
--- a/core/tests/behavior/copy.rs
+++ b/core/tests/behavior/copy.rs
@@ -54,6 +54,7 @@ pub async fn test_copy_file(op: Operator) -> Result<()> {
 
     op.delete(&source_path).await.expect("delete must succeed");
     op.delete(&target_path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -67,6 +68,7 @@ pub async fn test_copy_non_existing_source(op: Operator) -> 
Result<()> {
         .await
         .expect_err("copy must fail");
     assert_eq!(err.kind(), ErrorKind::NotFound);
+
     Ok(())
 }
 
@@ -82,6 +84,9 @@ pub async fn test_copy_source_dir(op: Operator) -> Result<()> 
{
         .await
         .expect_err("copy must fail");
     assert_eq!(err.kind(), ErrorKind::IsADirectory);
+
+    op.delete(&source_path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -104,6 +109,7 @@ pub async fn test_copy_target_dir(op: Operator) -> 
Result<()> {
 
     op.delete(&source_path).await.expect("delete must succeed");
     op.delete(&target_path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -121,30 +127,28 @@ pub async fn test_copy_self(op: Operator) -> Result<()> {
     assert_eq!(err.kind(), ErrorKind::IsSameFile);
 
     op.delete(&source_path).await.expect("delete must succeed");
+
     Ok(())
 }
 
 /// Copy to a nested path, parent path should be created successfully.
 pub async fn test_copy_nested(op: Operator) -> Result<()> {
-    let source_path = uuid::Uuid::new_v4().to_string();
+    let dir = &format!("{}/", uuid::Uuid::new_v4());
+
+    let source_path = format!("{}{}/{}", dir, uuid::Uuid::new_v4(), 
uuid::Uuid::new_v4());
     let (source_content, _) = gen_bytes();
 
     op.write(&source_path, source_content.clone()).await?;
 
-    let target_path = format!(
-        "{}/{}/{}",
-        uuid::Uuid::new_v4(),
-        uuid::Uuid::new_v4(),
-        uuid::Uuid::new_v4()
-    );
+    let target_path = format!("{}{}/{}", dir, uuid::Uuid::new_v4(), 
uuid::Uuid::new_v4());
 
     op.copy(&source_path, &target_path).await?;
 
     let target_content = op.read(&target_path).await.expect("read must 
succeed");
     assert_eq!(target_content, source_content);
 
-    op.delete(&source_path).await.expect("delete must succeed");
-    op.delete(&target_path).await.expect("delete must succeed");
+    op.remove_all(dir).await.expect("remove_all must succeed");
+
     Ok(())
 }
 
@@ -168,5 +172,6 @@ pub async fn test_copy_overwrite(op: Operator) -> 
Result<()> {
 
     op.delete(&source_path).await.expect("delete must succeed");
     op.delete(&target_path).await.expect("delete must succeed");
+
     Ok(())
 }
diff --git a/core/tests/behavior/list.rs b/core/tests/behavior/list.rs
index eed9021f5..bfbb84103 100644
--- a/core/tests/behavior/list.rs
+++ b/core/tests/behavior/list.rs
@@ -61,7 +61,6 @@ pub async fn test_check(op: Operator) -> Result<()> {
 pub async fn test_list_dir(op: Operator) -> Result<()> {
     let parent = uuid::Uuid::new_v4().to_string();
     let path = format!("{parent}/{}", uuid::Uuid::new_v4());
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content).await.expect("write must succeed");
@@ -80,7 +79,8 @@ pub async fn test_list_dir(op: Operator) -> Result<()> {
     }
     assert!(found, "file should be found in list");
 
-    op.delete(&path).await.expect("delete must succeed");
+    op.remove_all(&format!("{parent}/")).await?;
+
     Ok(())
 }
 
@@ -117,6 +117,7 @@ pub async fn test_list_rich_dir(op: Operator) -> Result<()> 
{
     assert_eq!(actual, expected);
 
     op.remove_all("test_list_rich_dir/").await?;
+
     Ok(())
 }
 
@@ -136,6 +137,7 @@ pub async fn test_list_empty_dir(op: Operator) -> 
Result<()> {
     assert_eq!(objects.len(), 0, "dir should only return empty");
 
     op.delete(&dir).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -151,6 +153,7 @@ pub async fn test_list_non_exist_dir(op: Operator) -> 
Result<()> {
     debug!("got objects: {:?}", objects);
 
     assert_eq!(objects.len(), 0, "dir should only return empty");
+
     Ok(())
 }
 
@@ -174,6 +177,7 @@ pub async fn test_list_sub_dir(op: Operator) -> Result<()> {
     assert!(found, "dir should be found in list");
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -225,9 +229,8 @@ pub async fn test_list_nested_dir(op: Operator) -> 
Result<()> {
         .await?;
     assert_eq!(meta.mode(), EntryMode::DIR);
 
-    op.delete(&file_path).await.expect("delete must succeed");
-    op.delete(&dir_path).await.expect("delete must succeed");
-    op.delete(&dir).await.expect("delete must succeed");
+    op.remove_all(&dir).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -294,6 +297,7 @@ pub async fn test_scan_root(op: Operator) -> Result<()> {
 
     assert!(!actual.contains("/"), "empty root should return itself");
     assert!(!actual.contains(""), "empty root should return empty");
+
     Ok(())
 }
 
@@ -330,6 +334,9 @@ pub async fn test_scan(op: Operator) -> Result<()> {
     assert!(actual.contains("x/y"));
     assert!(actual.contains("x/x/y"));
     assert!(actual.contains("x/x/x/y"));
+
+    op.remove_all(&format!("{parent}/")).await?;
+
     Ok(())
 }
 
@@ -348,7 +355,7 @@ pub async fn test_remove_all(op: Operator) -> Result<()> {
         }
     }
 
-    op.remove_all(&format!("{parent}/x/")).await?;
+    op.remove_all(&format!("{parent}/")).await?;
 
     for path in expected.iter() {
         if path.ends_with('/') {
@@ -359,5 +366,6 @@ pub async fn test_remove_all(op: Operator) -> Result<()> {
             "{parent}/{path} should be removed"
         )
     }
+
     Ok(())
 }
diff --git a/core/tests/behavior/presign.rs b/core/tests/behavior/presign.rs
index 8e2b2d2f2..29c19f52c 100644
--- a/core/tests/behavior/presign.rs
+++ b/core/tests/behavior/presign.rs
@@ -41,7 +41,6 @@ pub fn behavior_presign_tests(op: &Operator) -> Vec<Trial> {
 /// Presign write should succeed.
 pub async fn test_presign_write(op: Operator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     let signed_req = op.presign_write(&path, Duration::from_secs(3600)).await?;
@@ -68,12 +67,12 @@ pub async fn test_presign_write(op: Operator) -> Result<()> 
{
     assert_eq!(meta.content_length(), size as u64);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
 pub async fn test_presign_stat(op: Operator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
     op.write(&path, content.clone())
         .await
@@ -97,13 +96,13 @@ pub async fn test_presign_stat(op: Operator) -> Result<()> {
     assert_eq!(content_length, size as u64);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
 // Presign read should read content successfully.
 pub async fn test_presign_read(op: Operator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content.clone())
@@ -133,5 +132,6 @@ pub async fn test_presign_read(op: Operator) -> Result<()> {
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
diff --git a/core/tests/behavior/rename.rs b/core/tests/behavior/rename.rs
index d6c64a805..0bade3b57 100644
--- a/core/tests/behavior/rename.rs
+++ b/core/tests/behavior/rename.rs
@@ -57,6 +57,7 @@ pub async fn test_rename_file(op: Operator) -> Result<()> {
 
     op.delete(&source_path).await.expect("delete must succeed");
     op.delete(&target_path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -70,6 +71,7 @@ pub async fn test_rename_non_existing_source(op: Operator) -> 
Result<()> {
         .await
         .expect_err("rename must fail");
     assert_eq!(err.kind(), ErrorKind::NotFound);
+
     Ok(())
 }
 
@@ -85,6 +87,9 @@ pub async fn test_rename_source_dir(op: Operator) -> 
Result<()> {
         .await
         .expect_err("rename must fail");
     assert_eq!(err.kind(), ErrorKind::IsADirectory);
+
+    op.delete(&source_path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -107,6 +112,7 @@ pub async fn test_rename_target_dir(op: Operator) -> 
Result<()> {
 
     op.delete(&source_path).await.expect("delete must succeed");
     op.delete(&target_path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -124,33 +130,31 @@ pub async fn test_rename_self(op: Operator) -> Result<()> 
{
     assert_eq!(err.kind(), ErrorKind::IsSameFile);
 
     op.delete(&source_path).await.expect("delete must succeed");
+
     Ok(())
 }
 
 /// Rename to a nested path, parent path should be created successfully.
 pub async fn test_rename_nested(op: Operator) -> Result<()> {
-    let source_path = uuid::Uuid::new_v4().to_string();
+    let dir = &format!("{}/", uuid::Uuid::new_v4());
+
+    let source_path = &format!("{}{}/{}", dir, uuid::Uuid::new_v4(), 
uuid::Uuid::new_v4());
     let (source_content, _) = gen_bytes();
 
-    op.write(&source_path, source_content.clone()).await?;
+    op.write(source_path, source_content.clone()).await?;
 
-    let target_path = format!(
-        "{}/{}/{}",
-        uuid::Uuid::new_v4(),
-        uuid::Uuid::new_v4(),
-        uuid::Uuid::new_v4()
-    );
+    let target_path = format!("{}/{}/{}", dir, uuid::Uuid::new_v4(), 
uuid::Uuid::new_v4());
 
-    op.rename(&source_path, &target_path).await?;
+    op.rename(source_path, &target_path).await?;
 
-    let err = op.stat(&source_path).await.expect_err("stat must fail");
+    let err = op.stat(source_path).await.expect_err("stat must fail");
     assert_eq!(err.kind(), ErrorKind::NotFound);
 
     let target_content = op.read(&target_path).await.expect("read must 
succeed");
     assert_eq!(target_content, source_content);
 
-    op.delete(&source_path).await.expect("delete must succeed");
-    op.delete(&target_path).await.expect("delete must succeed");
+    op.remove_all(dir).await.expect("remove_all must succeed");
+
     Ok(())
 }
 
@@ -177,5 +181,6 @@ pub async fn test_rename_overwrite(op: Operator) -> 
Result<()> {
 
     op.delete(&source_path).await.expect("delete must succeed");
     op.delete(&target_path).await.expect("delete must succeed");
+
     Ok(())
 }
diff --git a/core/tests/behavior/write.rs b/core/tests/behavior/write.rs
index f147d5883..54c85f049 100644
--- a/core/tests/behavior/write.rs
+++ b/core/tests/behavior/write.rs
@@ -26,7 +26,7 @@ use futures::AsyncReadExt;
 use futures::AsyncSeekExt;
 use futures::StreamExt;
 use http::StatusCode;
-use log::debug;
+
 use log::warn;
 use reqwest::Url;
 use sha2::Digest;
@@ -100,6 +100,7 @@ pub async fn test_create_dir(op: Operator) -> Result<()> {
     assert_eq!(meta.mode(), EntryMode::DIR);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -115,6 +116,7 @@ pub async fn test_create_dir_existing(op: Operator) -> 
Result<()> {
     assert_eq!(meta.mode(), EntryMode::DIR);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -129,6 +131,7 @@ pub async fn test_write_only(op: Operator) -> Result<()> {
     assert_eq!(meta.content_length(), size as u64);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -141,13 +144,15 @@ pub async fn test_write_with_dir_path(op: Operator) -> 
Result<()> {
     assert!(result.is_err());
     assert_eq!(result.unwrap_err().kind(), ErrorKind::IsADirectory);
 
+    op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
 /// Write a single file with special chars should succeed.
 pub async fn test_write_with_special_chars(op: Operator) -> Result<()> {
     // Ignore test for supabase until 
https://github.com/apache/incubator-opendal/issues/2194 addressed.
-    if op.info().scheme() == opendal::Scheme::Supabase {
+    if op.info().scheme() == Scheme::Supabase {
         warn!("ignore test for supabase until 
https://github.com/apache/incubator-opendal/issues/2194 is resolved");
         return Ok(());
     }
@@ -161,6 +166,7 @@ pub async fn test_write_with_special_chars(op: Operator) -> 
Result<()> {
     assert_eq!(meta.content_length(), size as u64);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -256,6 +262,7 @@ pub async fn test_stat_file(op: Operator) -> Result<()> {
     assert_eq!(meta.content_length(), size as u64);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -269,6 +276,7 @@ pub async fn test_stat_dir(op: Operator) -> Result<()> {
     assert_eq!(meta.mode(), EntryMode::DIR);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -290,13 +298,13 @@ pub async fn test_stat_with_special_chars(op: Operator) 
-> Result<()> {
     assert_eq!(meta.content_length(), size as u64);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
 /// Stat not cleaned path should also succeed.
 pub async fn test_stat_not_cleaned_path(op: Operator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content).await.expect("write must succeed");
@@ -306,6 +314,7 @@ pub async fn test_stat_not_cleaned_path(op: Operator) -> 
Result<()> {
     assert_eq!(meta.content_length(), size as u64);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -327,7 +336,6 @@ pub async fn test_stat_with_if_match(op: Operator) -> 
Result<()> {
     }
 
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content.clone())
@@ -349,6 +357,7 @@ pub async fn test_stat_with_if_match(op: Operator) -> 
Result<()> {
     assert!(result.is_ok());
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -359,7 +368,6 @@ pub async fn test_stat_with_if_none_match(op: Operator) -> 
Result<()> {
     }
 
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content.clone())
@@ -385,6 +393,7 @@ pub async fn test_stat_with_if_none_match(op: Operator) -> 
Result<()> {
     assert_eq!(res.content_length(), meta.content_length());
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -402,7 +411,6 @@ pub async fn test_stat_root(op: Operator) -> Result<()> {
 /// Read full content should match.
 pub async fn test_read_full(op: Operator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content.clone())
@@ -418,6 +426,7 @@ pub async fn test_read_full(op: Operator) -> Result<()> {
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -428,7 +437,6 @@ pub async fn test_read_range(op: Operator) -> Result<()> {
     }
 
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
     let (offset, length) = gen_offset_length(size);
 
@@ -448,6 +456,7 @@ pub async fn test_read_range(op: Operator) -> Result<()> {
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -458,7 +467,6 @@ pub async fn test_read_large_range(op: Operator) -> 
Result<()> {
     }
 
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
     let (offset, _) = gen_offset_length(size);
 
@@ -479,6 +487,7 @@ pub async fn test_read_large_range(op: Operator) -> 
Result<()> {
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -489,7 +498,6 @@ pub async fn test_reader_range(op: Operator) -> Result<()> {
     }
 
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
     let (offset, length) = gen_offset_length(size);
 
@@ -512,6 +520,7 @@ pub async fn test_reader_range(op: Operator) -> Result<()> {
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -522,7 +531,6 @@ pub async fn test_reader_from(op: Operator) -> Result<()> {
     }
 
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
     let (offset, _) = gen_offset_length(size);
 
@@ -543,6 +551,7 @@ pub async fn test_reader_from(op: Operator) -> Result<()> {
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -553,7 +562,6 @@ pub async fn test_reader_tail(op: Operator) -> Result<()> {
     }
 
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
     let (_, length) = gen_offset_length(size);
 
@@ -582,6 +590,7 @@ pub async fn test_reader_tail(op: Operator) -> Result<()> {
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -603,7 +612,6 @@ pub async fn test_read_with_if_match(op: Operator) -> 
Result<()> {
     }
 
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, _) = gen_bytes();
 
     op.write(&path, content.clone())
@@ -624,6 +632,7 @@ pub async fn test_read_with_if_match(op: Operator) -> 
Result<()> {
     assert_eq!(bs, content);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -634,7 +643,6 @@ pub async fn test_read_with_if_none_match(op: Operator) -> 
Result<()> {
     }
 
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, _) = gen_bytes();
 
     op.write(&path, content.clone())
@@ -658,6 +666,7 @@ pub async fn test_read_with_if_none_match(op: Operator) -> 
Result<()> {
     assert_eq!(bs, content);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -667,7 +676,6 @@ pub async fn test_fuzz_range_reader(op: Operator) -> 
Result<()> {
     }
 
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, _) = gen_bytes();
 
     op.write(&path, content.clone())
@@ -699,6 +707,7 @@ pub async fn test_fuzz_range_reader(op: Operator) -> 
Result<()> {
     }
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -708,7 +717,6 @@ pub async fn test_fuzz_offset_reader(op: Operator) -> 
Result<()> {
     }
 
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, _) = gen_bytes();
 
     op.write(&path, content.clone())
@@ -740,6 +748,7 @@ pub async fn test_fuzz_offset_reader(op: Operator) -> 
Result<()> {
     }
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -749,7 +758,6 @@ pub async fn test_fuzz_part_reader(op: Operator) -> 
Result<()> {
     }
 
     let path = uuid::Uuid::new_v4().to_string();
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
     let (offset, length) = gen_offset_length(size);
 
@@ -783,6 +791,7 @@ pub async fn test_fuzz_part_reader(op: Operator) -> 
Result<()> {
     }
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -797,6 +806,7 @@ pub async fn test_read_with_dir_path(op: Operator) -> 
Result<()> {
     assert_eq!(result.unwrap_err().kind(), ErrorKind::IsADirectory);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -809,7 +819,6 @@ pub async fn test_read_with_special_chars(op: Operator) -> 
Result<()> {
     }
 
     let path = format!("{} !@#$%^&()_+-=;',.txt", uuid::Uuid::new_v4());
-    debug!("Generate a random file: {}", &path);
     let (content, size) = gen_bytes();
 
     op.write(&path, content.clone())
@@ -825,6 +834,7 @@ pub async fn test_read_with_special_chars(op: Operator) -> 
Result<()> {
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -870,6 +880,7 @@ pub async fn test_read_with_override_cache_control(op: 
Operator) -> Result<()> {
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -926,7 +937,7 @@ pub async fn 
test_read_with_override_content_disposition(op: Operator) -> Result
     Ok(())
 }
 
-/// Delete existing file should succeed.
+/// Abort writer should not write actual file.
 pub async fn test_writer_abort(op: Operator) -> Result<()> {
     let path = uuid::Uuid::new_v4().to_string();
     let (content, _) = gen_bytes();
@@ -989,7 +1000,6 @@ pub async fn test_delete_with_special_chars(op: Operator) 
-> Result<()> {
     }
 
     let path = format!("{} !@#$%^&()_+-=;',.txt", uuid::Uuid::new_v4());
-    debug!("Generate a random file: {}", &path);
     let (content, _) = gen_bytes();
 
     op.write(&path, content).await.expect("write must succeed");
@@ -1050,6 +1060,8 @@ pub async fn test_delete_stream(op: Operator) -> 
Result<()> {
         )
     }
 
+    op.delete(&format!("{dir}/")).await?;
+
     Ok(())
 }
 
@@ -1089,6 +1101,7 @@ pub async fn test_writer_write(op: Operator) -> 
Result<()> {
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -1129,6 +1142,7 @@ pub async fn test_writer_sink(op: Operator) -> Result<()> 
{
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -1169,6 +1183,7 @@ pub async fn test_writer_copy(op: Operator) -> Result<()> 
{
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -1204,6 +1219,7 @@ pub async fn test_writer_futures_copy(op: Operator) -> 
Result<()> {
     );
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }
 
@@ -1231,5 +1247,6 @@ pub async fn test_fuzz_unsized_writer(op: Operator) -> 
Result<()> {
     fuzzer.check(&content);
 
     op.delete(&path).await.expect("delete must succeed");
+
     Ok(())
 }


Reply via email to