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

erickguan pushed a commit to branch ruby-source-pkg
in repository https://gitbox.apache.org/repos/asf/opendal.git

commit d453841a46fbf0d72631ba0eeaf2df592b8be93d
Author: QuakeWang <[email protected]>
AuthorDate: Wed Jul 8 23:52:00 2026 +0800

    test(behavior): cover versioned object operations
    
    Signed-off-by: QuakeWang <[email protected]>
---
 core/tests/behavior/async_delete.rs | 37 +++++++++++++++++++++++++++++--------
 core/tests/behavior/async_read.rs   | 31 +++++++++++++++++++++----------
 core/tests/behavior/async_stat.rs   |  9 ++++++++-
 3 files changed, 58 insertions(+), 19 deletions(-)

diff --git a/core/tests/behavior/async_delete.rs 
b/core/tests/behavior/async_delete.rs
index ae441cc54..933721acb 100644
--- a/core/tests/behavior/async_delete.rs
+++ b/core/tests/behavior/async_delete.rs
@@ -246,26 +246,47 @@ pub async fn test_delete_with_version(op: Operator) -> 
Result<()> {
     op.write(path.as_str(), content)
         .await
         .expect("write must success");
-    let meta = op.stat(path.as_str()).await.expect("stat must success");
-    let version = meta.version().expect("must have version");
+    let first_meta = op.stat(path.as_str()).await.expect("stat must success");
+    let first_version = first_meta.version().expect("must have version");
+
+    op.write(path.as_str(), b"second version".to_vec())
+        .await
+        .expect("write must success");
+    let second_meta = op.stat(path.as_str()).await.expect("stat must success");
+    let second_version = second_meta.version().expect("must have version");
+    assert_ne!(first_version, second_version);
 
     op.delete(path.as_str()).await.expect("delete must success");
     assert!(!op.exists(path.as_str()).await?);
 
-    // After a simple delete, the data can still be accessed using its version.
+    // After a simple delete, both versions can still be accessed using their 
versions.
+    let meta = op
+        .stat_with(path.as_str())
+        .version(first_version)
+        .await
+        .expect("stat must success");
+    assert_eq!(first_version, meta.version().expect("must have version"));
     let meta = op
         .stat_with(path.as_str())
-        .version(version)
+        .version(second_version)
         .await
         .expect("stat must success");
-    assert_eq!(version, meta.version().expect("must have version"));
+    assert_eq!(second_version, meta.version().expect("must have version"));
+
+    // After deleting with the version, the data is removed permanently.
+    op.delete_with(path.as_str())
+        .version(first_version)
+        .await
+        .expect("delete must success");
+    let ret = op.stat_with(path.as_str()).version(first_version).await;
+    assert!(ret.is_err());
+    assert_eq!(ret.unwrap_err().kind(), ErrorKind::NotFound);
 
-    // After deleting with the version, the data is removed permanently
     op.delete_with(path.as_str())
-        .version(version)
+        .version(second_version)
         .await
         .expect("delete must success");
-    let ret = op.stat_with(path.as_str()).version(version).await;
+    let ret = op.stat_with(path.as_str()).version(second_version).await;
     assert!(ret.is_err());
     assert_eq!(ret.unwrap_err().kind(), ErrorKind::NotFound);
 
diff --git a/core/tests/behavior/async_read.rs 
b/core/tests/behavior/async_read.rs
index feee7c730..09d3356c3 100644
--- a/core/tests/behavior/async_read.rs
+++ b/core/tests/behavior/async_read.rs
@@ -1069,31 +1069,42 @@ pub async fn test_read_with_version(op: Operator) -> 
anyhow::Result<()> {
         return Ok(());
     }
 
-    let (path, content, _) = TEST_FIXTURE.new_file(op.clone());
-    op.write(path.as_str(), content.clone())
+    let (path, first_content, _) = TEST_FIXTURE.new_file(op.clone());
+    op.write(path.as_str(), first_content.clone())
         .await
         .expect("write must success");
-    let meta = op.stat(path.as_str()).await.expect("stat must success");
-    let version = meta.version().expect("must have version");
+    let first_meta = op.stat(path.as_str()).await.expect("stat must success");
+    let first_version = first_meta.version().expect("must have version");
 
     let data = op
         .read_with(path.as_str())
-        .version(version)
+        .version(first_version)
         .await
         .expect("read must success");
-    assert_eq!(content, data.to_vec());
+    assert_eq!(first_content, data.to_vec());
 
-    op.write(path.as_str(), "1")
+    let second_content = b"second version";
+    op.write(path.as_str(), second_content.to_vec())
         .await
         .expect("write must success");
+    let second_meta = op.stat(path.as_str()).await.expect("stat must success");
+    let second_version = second_meta.version().expect("must have version");
+    assert_ne!(first_version, second_version);
 
     // After writing new data, we can still read the first version data
-    let second_data = op
+    let first_version_data = op
+        .read_with(path.as_str())
+        .version(first_version)
+        .await
+        .expect("read must success");
+    assert_eq!(first_content, first_version_data.to_vec());
+
+    let second_version_data = op
         .read_with(path.as_str())
-        .version(version)
+        .version(second_version)
         .await
         .expect("read must success");
-    assert_eq!(content, second_data.to_vec());
+    assert_eq!(second_content.to_vec(), second_version_data.to_vec());
 
     Ok(())
 }
diff --git a/core/tests/behavior/async_stat.rs 
b/core/tests/behavior/async_stat.rs
index 141200894..a204db09d 100644
--- a/core/tests/behavior/async_stat.rs
+++ b/core/tests/behavior/async_stat.rs
@@ -570,7 +570,7 @@ pub async fn test_stat_with_version(op: Operator) -> 
Result<()> {
         .expect("stat must success");
     assert_eq!(first_meta, first_versioning_meta);
 
-    op.write(path.as_str(), content)
+    op.write(path.as_str(), b"second version".to_vec())
         .await
         .expect("write must success");
     let second_meta = op.stat(path.as_str()).await.expect("stat must success");
@@ -585,6 +585,13 @@ pub async fn test_stat_with_version(op: Operator) -> 
Result<()> {
         .expect("stat must success");
     assert_eq!(first_meta, meta);
 
+    let meta = op
+        .stat_with(path.as_str())
+        .version(second_version)
+        .await
+        .expect("stat must success");
+    assert_eq!(second_meta, meta);
+
     Ok(())
 }
 

Reply via email to