mirror of
https://github.com/rustfs/rustfs.git
synced 2026-09-02 10:18:10 +00:00
test(e2e): exercise cluster volume fault proxy (#6919)
Co-authored-by: heihutu <heihutu@gmail.com>
This commit is contained in:
@@ -27,8 +27,10 @@
|
|||||||
//! Readiness is established by the harness's `start()` handshake (TCP reachability
|
//! Readiness is established by the harness's `start()` handshake (TCP reachability
|
||||||
//! plus an S3 `ListBuckets` poll) — there are no fixed sleeps.
|
//! plus an S3 `ListBuckets` poll) — there are no fixed sleeps.
|
||||||
//!
|
//!
|
||||||
//! Out of scope for this block (tracked separately): network fault injection
|
//! The volume-proxy smoke below also proves that the socket-level fault proxy
|
||||||
//! (toxiproxy / socket proxy) and 5GiB large-object budgets.
|
//! can be installed before startup without changing the client-facing node URL.
|
||||||
|
//! A full lock-plane partition matrix and 5GiB large-object budget remain
|
||||||
|
//! tracked separately.
|
||||||
|
|
||||||
use crate::common::{ClusterTopology, RustFSTestClusterEnvironment};
|
use crate::common::{ClusterTopology, RustFSTestClusterEnvironment};
|
||||||
|
|
||||||
@@ -125,3 +127,27 @@ async fn cluster_two_pool_smoke() -> TestResult {
|
|||||||
put_get_roundtrip(&cluster, "twopool/object", &payload).await?;
|
put_get_roundtrip(&cluster, "twopool/object", &payload).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A real cluster smoke for the volume FaultProxy wiring. The proxy target is
|
||||||
|
/// not listening yet when it is created; cluster startup must still converge
|
||||||
|
/// once the target node starts, and peer disk/RPC traffic must traverse it.
|
||||||
|
#[tokio::test]
|
||||||
|
async fn cluster_volume_fault_proxy_pass_smoke() -> TestResult {
|
||||||
|
crate::common::init_logging();
|
||||||
|
|
||||||
|
let mut cluster = RustFSTestClusterEnvironment::with_topology(ClusterTopology::single_pool_multidrive(2, 2)).await?;
|
||||||
|
let proxy = cluster.start_volume_proxy_for_node(0).await?;
|
||||||
|
let proxied = proxy.local_addr().to_string();
|
||||||
|
assert!(cluster.rustfs_volumes_arg().contains(&proxied));
|
||||||
|
|
||||||
|
let result: TestResult = async {
|
||||||
|
cluster.start().await?;
|
||||||
|
cluster.create_test_bucket(BUCKET).await?;
|
||||||
|
let payload = vec![0x6Du8; 256 * 1024];
|
||||||
|
put_get_roundtrip(&cluster, "volume-proxy/object", &payload).await
|
||||||
|
}
|
||||||
|
.await;
|
||||||
|
|
||||||
|
proxy.shutdown().await;
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
| chaos | 2 | |
|
| chaos | 2 | |
|
||||||
| checksum_upload_test | 7 | |
|
| checksum_upload_test | 7 | |
|
||||||
| cluster_concurrency_test | 3 | 🌙 |
|
| cluster_concurrency_test | 3 | 🌙 |
|
||||||
| cluster_multidrive_pool_test | 3 | 🌙 |
|
| cluster_multidrive_pool_test | 4 | 🌙 |
|
||||||
| common | 17 | |
|
| common | 17 | |
|
||||||
| compression_test | 6 | ✅ |
|
| compression_test | 6 | ✅ |
|
||||||
| connection_cap_test | 2 | |
|
| connection_cap_test | 2 | |
|
||||||
@@ -103,4 +103,4 @@
|
|||||||
| tls_hot_reload_test | 1 | ✅ |
|
| tls_hot_reload_test | 1 | ✅ |
|
||||||
| version_id_regression_test | 10 | ✅ |
|
| version_id_regression_test | 10 | ✅ |
|
||||||
|
|
||||||
**Total listed: 620 tests across 86 modules · PR smoke: 165 tests / 36 modules · merge/main full: 495 tests / 77 modules · nightly replication: 56 tests · nightly cluster faults: 30 tests / 7 modules · nightly protocols: 16 tests** · updated 2026-08-31.
|
**Total listed: 621 tests across 86 modules · PR smoke: 165 tests / 36 modules · merge/main full: 495 tests / 77 modules · nightly replication: 56 tests · nightly cluster faults: 31 tests / 7 modules · nightly protocols: 16 tests** · updated 2026-08-31.
|
||||||
|
|||||||
Reference in New Issue
Block a user