mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-05 04:47:43 +00:00
61 lines
2.6 KiB
Rust
61 lines
2.6 KiB
Rust
// Copyright 2024 RustFS Team
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
//! Regression tests for e2e harness server-startup behavior.
|
|
//!
|
|
//! The harness spawns servers with the embedded console disabled so they never
|
|
//! contend for its fixed default port :9001 (often held by unrelated local
|
|
//! services such as Docker Desktop), and `wait_for_server_ready` must report a
|
|
//! server that dies during startup immediately instead of polling out the full
|
|
//! readiness timeout.
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::common::{RustFSTestEnvironment, init_logging, rustfs_binary_path};
|
|
use serial_test::serial;
|
|
use std::net::TcpListener;
|
|
use std::time::{Duration, Instant};
|
|
|
|
/// Force the console back on (extra_env overrides the harness default)
|
|
/// while :9001 is occupied: the server exits at startup, and the harness
|
|
/// must surface that promptly rather than waiting out the 60s timeout.
|
|
#[tokio::test]
|
|
#[serial]
|
|
async fn test_start_fails_fast_when_server_exits_during_startup() {
|
|
init_logging();
|
|
|
|
// Occupy :9001 on both stacks; a failed bind means another local
|
|
// process already holds the port, which serves equally well.
|
|
let _guard_v6 = TcpListener::bind(("::", 9001)).ok();
|
|
let _guard_v4 = TcpListener::bind(("0.0.0.0", 9001)).ok();
|
|
|
|
// Resolve (and possibly build) the binary before starting the timer.
|
|
let _ = rustfs_binary_path();
|
|
|
|
let mut env = RustFSTestEnvironment::new().await.expect("Failed to create test environment");
|
|
let started = Instant::now();
|
|
let result = env
|
|
.start_rustfs_server_with_env(vec![], &[("RUSTFS_CONSOLE_ENABLE", "true")])
|
|
.await;
|
|
let elapsed = started.elapsed();
|
|
|
|
let err = result.expect_err("server start should fail while :9001 is occupied");
|
|
assert!(err.to_string().contains("exited before becoming ready"), "unexpected start error: {err}");
|
|
assert!(
|
|
elapsed < Duration::from_secs(30),
|
|
"startup failure should be detected fast, took {elapsed:?}"
|
|
);
|
|
}
|
|
}
|