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

koushiro pushed a commit to branch split-opendal-raw-tests-module
in repository https://gitbox.apache.org/repos/asf/opendal.git

commit 6086a6084934358b8f1abe9e0e810e3d4cc0796e
Author: koushiro <[email protected]>
AuthorDate: Tue Dec 16 18:03:07 2025 +0800

    refactor: split opendal_core::raw::tests module into a separate crate
---
 core/Cargo.lock                                    | 15 +++++++++++++-
 core/Cargo.toml                                    | 10 +++++----
 core/benches/ops/read.rs                           |  4 ++--
 core/benches/ops/utils.rs                          |  2 +-
 core/benches/ops/write.rs                          |  4 ++--
 core/benches/vs_s3/src/main.rs                     |  2 +-
 core/core/Cargo.toml                               | 20 ------------------
 core/core/src/raw/mod.rs                           |  2 --
 .../src/main.rs                                    |  2 +-
 core/examples/basic/src/main.rs                    |  2 +-
 core/examples/concurrent-upload/src/main.rs        |  2 +-
 core/examples/multipart-upload/src/main.rs         |  2 +-
 core/fuzz/fuzz_reader.rs                           |  8 ++++----
 core/fuzz/fuzz_writer.rs                           |  8 ++++----
 core/src/lib.rs                                    |  3 +++
 core/testkit/Cargo.toml                            | 24 ++++++++++++++++++++++
 .../src/raw/tests/mod.rs => testkit/src/lib.rs}    |  2 +-
 core/{core/src/raw/tests => testkit/src}/read.rs   |  3 +--
 core/{core/src/raw/tests => testkit/src}/utils.rs  |  4 +++-
 core/{core/src/raw/tests => testkit/src}/write.rs  |  0
 core/tests/behavior/main.rs                        |  4 ++--
 core/tests/behavior/utils.rs                       |  2 +-
 integrations/object_store/tests/behavior/main.rs   |  2 +-
 integrations/object_store/tests/behavior/utils.rs  |  2 +-
 24 files changed, 75 insertions(+), 54 deletions(-)

diff --git a/core/Cargo.lock b/core/Cargo.lock
index 6350dbe6e..2b33210c3 100644
--- a/core/Cargo.lock
+++ b/core/Cargo.lock
@@ -5577,6 +5577,7 @@ dependencies = [
  "opendal-service-sqlite",
  "opendal-service-tikv",
  "opendal-service-vercel-blob",
+ "opendal-testkit",
  "opentelemetry",
  "opentelemetry-otlp",
  "opentelemetry_sdk",
@@ -5630,7 +5631,6 @@ dependencies = [
  "criterion",
  "ctor",
  "divan",
- "dotenvy",
  "etcd-client",
  "fastpool",
  "flume",
@@ -6256,6 +6256,19 @@ dependencies = [
  "tokio",
 ]
 
+[[package]]
+name = "opendal-testkit"
+version = "0.55.0"
+dependencies = [
+ "bytes",
+ "dotenvy",
+ "opendal-core",
+ "rand 0.8.5",
+ "sha2",
+ "tokio",
+ "uuid",
+]
+
 [[package]]
 name = "openssh"
 version = "0.11.6"
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 870af8ad1..259a21fa1 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -19,13 +19,14 @@
 default-members = [".", "core"]
 members = [
   ".",
+  "benches/vs_*",
   "core",
+  "edge/*",
   "examples/*",
   "fuzz",
-  "edge/*",
-  "benches/vs_*",
-  "services/*",
   "layers/*",
+  "services/*",
+  "testkit",
 ]
 
 [workspace.package]
@@ -163,7 +164,7 @@ services-vercel-blob = ["dep:opendal-service-vercel-blob"]
 services-webdav = ["opendal-core/services-webdav"]
 services-webhdfs = ["opendal-core/services-webhdfs"]
 services-yandex-disk = ["opendal-core/services-yandex-disk"]
-tests = ["opendal-core/tests"]
+tests = ["opendal-testkit"]
 
 [lib]
 bench = false
@@ -185,6 +186,7 @@ required-features = ["tests"]
 
 [dependencies]
 opendal-core = { path = "core", version = "0.55.0", default-features = false }
+opendal-testkit = { path = "testkit", version = "0.55.0", optional = true }
 opendal-layer-async-backtrace = { path = "layers/async-backtrace", version = 
"0.55.0", optional = true, default-features = false }
 opendal-layer-await-tree = { path = "layers/await-tree", version = "0.55.0", 
optional = true, default-features = false }
 opendal-layer-capability-check = { path = "layers/capability-check", version = 
"0.55.0", optional = true, default-features = false }
diff --git a/core/benches/ops/read.rs b/core/benches/ops/read.rs
index ba9517fcd..f4cbfac7c 100644
--- a/core/benches/ops/read.rs
+++ b/core/benches/ops/read.rs
@@ -17,8 +17,8 @@
 
 use divan::Bencher;
 use divan::counter::BytesCount;
-use opendal::raw::tests::TEST_RUNTIME;
-use opendal::raw::tests::init_test_service;
+use opendal::tests::TEST_RUNTIME;
+use opendal::tests::init_test_service;
 use rand::prelude::*;
 use size::Size;
 
diff --git a/core/benches/ops/utils.rs b/core/benches/ops/utils.rs
index 39947835a..3b3adc1b3 100644
--- a/core/benches/ops/utils.rs
+++ b/core/benches/ops/utils.rs
@@ -16,7 +16,7 @@
 // under the License.
 
 use bytes::Bytes;
-use opendal::raw::tests::TEST_RUNTIME;
+use opendal::tests::TEST_RUNTIME;
 use opendal::*;
 use rand::prelude::*;
 
diff --git a/core/benches/ops/write.rs b/core/benches/ops/write.rs
index d1809cd74..a4a50f465 100644
--- a/core/benches/ops/write.rs
+++ b/core/benches/ops/write.rs
@@ -17,8 +17,8 @@
 
 use divan::Bencher;
 use divan::counter::BytesCount;
-use opendal::raw::tests::TEST_RUNTIME;
-use opendal::raw::tests::init_test_service;
+use opendal::tests::TEST_RUNTIME;
+use opendal::tests::init_test_service;
 use rand::prelude::*;
 use size::Size;
 
diff --git a/core/benches/vs_s3/src/main.rs b/core/benches/vs_s3/src/main.rs
index fe1e733f8..2f04808d9 100644
--- a/core/benches/vs_s3/src/main.rs
+++ b/core/benches/vs_s3/src/main.rs
@@ -22,7 +22,7 @@ use aws_config::Region;
 use aws_credential_types::Credentials;
 use criterion::Criterion;
 use opendal::Operator;
-use opendal::raw::tests::TEST_RUNTIME;
+use opendal::tests::TEST_RUNTIME;
 use opendal::services;
 use rand::prelude::*;
 use tokio::io::AsyncReadExt;
diff --git a/core/core/Cargo.toml b/core/core/Cargo.toml
index b6be8bb66..ce97a6d8b 100644
--- a/core/core/Cargo.toml
+++ b/core/core/Cargo.toml
@@ -45,21 +45,6 @@ reqwest-rustls-tls = ["reqwest/rustls-tls"]
 # Enable opendal's blocking support.
 blocking = ["internal-tokio-rt"]
 
-# Build test utils or not.
-#
-# These features are used to control whether to build opendal's test utils.
-# And doesn't have any other effects.
-#
-# You should never enable this feature unless you are developing opendal.
-tests = [
-  "dep:rand",
-  "dep:sha2",
-  "dep:dotenvy",
-  "services-http",
-  "services-memory",
-  "internal-tokio-rt",
-]
-
 # Enable path cache.
 # This is an internal feature, and should not be used by users.
 internal-path-cache = ["dep:moka"]
@@ -152,10 +137,6 @@ tokio = { workspace = true, features = ["macros", 
"io-util"] }
 url = "2.5"
 uuid = { workspace = true, features = ["serde", "v4"] }
 
-# Test only dependencies
-dotenvy = { version = "0.15", optional = true }
-rand = { workspace = true, optional = true }
-
 # Optional dependencies
 
 # Services
@@ -258,7 +239,6 @@ web-time = { version = "1.1.0" }
 [dev-dependencies]
 criterion = { version = "0.7", features = ["async", "async_tokio"] }
 divan = { version = "0.1" }
-dotenvy = "0.15"
 libtest-mimic = "0.8"
 pretty_assertions = "1"
 rand = { workspace = true }
diff --git a/core/core/src/raw/mod.rs b/core/core/src/raw/mod.rs
index f85f4bf86..11828804e 100644
--- a/core/core/src/raw/mod.rs
+++ b/core/core/src/raw/mod.rs
@@ -83,5 +83,3 @@ pub use atomic_util::*;
 
 // Expose as a pub mod to avoid confusing.
 pub mod oio;
-#[cfg(feature = "tests")]
-pub mod tests;
diff --git a/core/edge/s3_aws_assume_role_with_web_identity/src/main.rs 
b/core/edge/s3_aws_assume_role_with_web_identity/src/main.rs
index 1b3774c29..0a0982583 100644
--- a/core/edge/s3_aws_assume_role_with_web_identity/src/main.rs
+++ b/core/edge/s3_aws_assume_role_with_web_identity/src/main.rs
@@ -16,7 +16,7 @@
 // under the License.
 
 use opendal::Result;
-use opendal::raw::tests::init_test_service;
+use opendal::tests::init_test_service;
 
 #[tokio::main]
 async fn main() -> Result<()> {
diff --git a/core/examples/basic/src/main.rs b/core/examples/basic/src/main.rs
index 32cf1e302..9ef69e097 100644
--- a/core/examples/basic/src/main.rs
+++ b/core/examples/basic/src/main.rs
@@ -43,7 +43,7 @@ async fn example(op: Operator) -> Result<()> {
 
 #[tokio::main]
 async fn main() -> Result<()> {
-    use opendal::raw::tests::init_test_service;
+    use opendal::tests::init_test_service;
     let op = init_test_service()?.expect("OPENDAL_TEST must be set");
 
     println!("service {:?} has been initialized", op.info());
diff --git a/core/examples/concurrent-upload/src/main.rs 
b/core/examples/concurrent-upload/src/main.rs
index 376fed05f..60f60b3ed 100644
--- a/core/examples/concurrent-upload/src/main.rs
+++ b/core/examples/concurrent-upload/src/main.rs
@@ -60,7 +60,7 @@ async fn example(op: Operator) -> Result<()> {
 
 #[tokio::main]
 async fn main() -> Result<()> {
-    use opendal::raw::tests::init_test_service;
+    use opendal::tests::init_test_service;
     let op = init_test_service()?.expect("OPENDAL_TEST must be set");
 
     println!("service {:?} has been initialized", op.info());
diff --git a/core/examples/multipart-upload/src/main.rs 
b/core/examples/multipart-upload/src/main.rs
index 0ec1d89a2..85dd819aa 100644
--- a/core/examples/multipart-upload/src/main.rs
+++ b/core/examples/multipart-upload/src/main.rs
@@ -48,7 +48,7 @@ async fn example(op: Operator) -> Result<()> {
 
 #[tokio::main]
 async fn main() -> Result<()> {
-    use opendal::raw::tests::init_test_service;
+    use opendal::tests::init_test_service;
     let op = init_test_service()?.expect("OPENDAL_TEST must be set");
 
     println!("service {:?} has been initialized", op.info());
diff --git a/core/fuzz/fuzz_reader.rs b/core/fuzz/fuzz_reader.rs
index d7714f947..8cbc1a300 100644
--- a/core/fuzz/fuzz_reader.rs
+++ b/core/fuzz/fuzz_reader.rs
@@ -25,10 +25,10 @@ use libfuzzer_sys::arbitrary::Unstructured;
 use libfuzzer_sys::fuzz_target;
 use opendal::Operator;
 use opendal::Result;
-use opendal::raw::tests::ReadAction;
-use opendal::raw::tests::ReadChecker;
-use opendal::raw::tests::TEST_RUNTIME;
-use opendal::raw::tests::init_test_service;
+use opendal::tests::ReadChecker;
+use opendal::tests::TEST_RUNTIME;
+use opendal::tests::init_test_service;
+use opendal::tests::ReadAction;
 
 const MAX_DATA_SIZE: usize = 16 * 1024 * 1024;
 
diff --git a/core/fuzz/fuzz_writer.rs b/core/fuzz/fuzz_writer.rs
index aa3ed5815..266d1ec6b 100644
--- a/core/fuzz/fuzz_writer.rs
+++ b/core/fuzz/fuzz_writer.rs
@@ -22,10 +22,10 @@ use libfuzzer_sys::arbitrary::Unstructured;
 use libfuzzer_sys::fuzz_target;
 use opendal::Operator;
 use opendal::Result;
-use opendal::raw::tests::TEST_RUNTIME;
-use opendal::raw::tests::WriteAction;
-use opendal::raw::tests::WriteChecker;
-use opendal::raw::tests::init_test_service;
+use opendal::tests::TEST_RUNTIME;
+use opendal::tests::WriteAction;
+use opendal::tests::WriteChecker;
+use opendal::tests::init_test_service;
 
 const MAX_DATA_SIZE: usize = 16 * 1024 * 1024;
 
diff --git a/core/src/lib.rs b/core/src/lib.rs
index 2b9bf1a8c..7dd0006f5 100644
--- a/core/src/lib.rs
+++ b/core/src/lib.rs
@@ -24,6 +24,9 @@
 
 pub use opendal_core::*;
 
+#[cfg(feature = "tests")]
+pub use opendal_testkit as tests;
+
 /// Re-export of service implementations.
 pub mod services {
     pub use opendal_core::services::*;
diff --git a/core/testkit/Cargo.toml b/core/testkit/Cargo.toml
new file mode 100644
index 000000000..5e520adc6
--- /dev/null
+++ b/core/testkit/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "opendal-testkit"
+description = "Test harness and utilities for Apache OpenDAL"
+publish = false
+
+authors = { workspace = true }
+edition = { workspace = true }
+homepage = { workspace = true }
+license = { workspace = true }
+repository = { workspace = true }
+rust-version = { workspace = true }
+version = { workspace = true }
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+bytes = { workspace = true }
+dotenvy = "0.15"
+opendal-core = { path = "../core", version = "0.55.0", default-features = 
false }
+rand = { workspace = true }
+sha2 = { workspace = true }
+tokio = { workspace = true, features = ["rt-multi-thread"] }
+uuid = { workspace = true }
diff --git a/core/core/src/raw/tests/mod.rs b/core/testkit/src/lib.rs
similarity index 95%
rename from core/core/src/raw/tests/mod.rs
rename to core/testkit/src/lib.rs
index 9f59559ce..bb2295ec1 100644
--- a/core/core/src/raw/tests/mod.rs
+++ b/core/testkit/src/lib.rs
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-//! Utilities for opendal testing.
+//! Test harness and utilities for Apache OpenDAL.
 
 mod read;
 pub use read::ReadAction;
diff --git a/core/core/src/raw/tests/read.rs b/core/testkit/src/read.rs
similarity index 99%
rename from core/core/src/raw/tests/read.rs
rename to core/testkit/src/read.rs
index fbaf5e36a..44ea13609 100644
--- a/core/core/src/raw/tests/read.rs
+++ b/core/testkit/src/read.rs
@@ -16,13 +16,12 @@
 // under the License.
 
 use bytes::Bytes;
+use opendal_core::*;
 use rand::RngCore;
 use rand::thread_rng;
 use sha2::Digest;
 use sha2::Sha256;
 
-use crate::*;
-
 /// ReadAction represents a read action.
 #[derive(Debug, Clone, Copy, Eq, PartialEq)]
 pub enum ReadAction {
diff --git a/core/core/src/raw/tests/utils.rs b/core/testkit/src/utils.rs
similarity index 97%
rename from core/core/src/raw/tests/utils.rs
rename to core/testkit/src/utils.rs
index 81f75ac14..736a8597f 100644
--- a/core/core/src/raw/tests/utils.rs
+++ b/core/testkit/src/utils.rs
@@ -19,7 +19,9 @@ use std::collections::HashMap;
 use std::env;
 use std::sync::LazyLock;
 
-use crate::*;
+use opendal_core::Operator;
+use opendal_core::Result;
+use opendal_core::layers;
 
 /// TEST_RUNTIME is the runtime used for running tests.
 pub static TEST_RUNTIME: LazyLock<tokio::runtime::Runtime> = LazyLock::new(|| {
diff --git a/core/core/src/raw/tests/write.rs b/core/testkit/src/write.rs
similarity index 100%
rename from core/core/src/raw/tests/write.rs
rename to core/testkit/src/write.rs
diff --git a/core/tests/behavior/main.rs b/core/tests/behavior/main.rs
index a9ed00e0f..fd31fa2dc 100644
--- a/core/tests/behavior/main.rs
+++ b/core/tests/behavior/main.rs
@@ -34,8 +34,8 @@ mod async_write;
 // External dependencies
 use libtest_mimic::Arguments;
 use libtest_mimic::Trial;
-use opendal::raw::tests::TEST_RUNTIME;
-use opendal::raw::tests::init_test_service;
+use opendal::tests::TEST_RUNTIME;
+use opendal::tests::init_test_service;
 use opendal::*;
 
 pub static TEST_FIXTURE: Fixture = Fixture::new();
diff --git a/core/tests/behavior/utils.rs b/core/tests/behavior/utils.rs
index 2e2d4d41e..c4a5440f0 100644
--- a/core/tests/behavior/utils.rs
+++ b/core/tests/behavior/utils.rs
@@ -21,8 +21,8 @@ use std::sync::Mutex;
 use futures::Future;
 use libtest_mimic::Failed;
 use libtest_mimic::Trial;
-use opendal::raw::tests::TEST_RUNTIME;
 use opendal::raw::*;
+use opendal::tests::TEST_RUNTIME;
 use opendal::*;
 use rand::distributions::uniform::SampleRange;
 use rand::prelude::*;
diff --git a/integrations/object_store/tests/behavior/main.rs 
b/integrations/object_store/tests/behavior/main.rs
index 1429eb5f5..371dad6c8 100644
--- a/integrations/object_store/tests/behavior/main.rs
+++ b/integrations/object_store/tests/behavior/main.rs
@@ -23,7 +23,7 @@ mod utils;
 use libtest_mimic::Arguments;
 
 fn main() -> anyhow::Result<()> {
-    let Ok(Some(op)) = opendal::raw::tests::init_test_service() else {
+    let Ok(Some(op)) = opendal::tests::init_test_service() else {
         return Ok(());
     };
     let store = object_store_opendal::OpendalStore::new(op);
diff --git a/integrations/object_store/tests/behavior/utils.rs 
b/integrations/object_store/tests/behavior/utils.rs
index 96b58e4e8..f295fedb0 100644
--- a/integrations/object_store/tests/behavior/utils.rs
+++ b/integrations/object_store/tests/behavior/utils.rs
@@ -18,7 +18,7 @@
 use libtest_mimic::{Failed, Trial};
 use object_store_opendal::OpendalStore;
 use opendal::raw::MaybeSend;
-use opendal::raw::tests::TEST_RUNTIME;
+use opendal::tests::TEST_RUNTIME;
 use std::future::Future;
 
 pub fn build_trail<F, Fut>(name: &str, store: &OpendalStore, f: F) -> Trial

Reply via email to