Browse Source

Attach test name to test log file name.

Jing Yang 4 years ago
parent
commit
96fd5067e7
6 changed files with 48 additions and 21 deletions
  1. 1 0
      Cargo.toml
  2. 7 3
      test_utils/src/logging.rs
  3. 6 6
      tests/agreement_tests.rs
  4. 25 3
      tests/config/mod.rs
  5. 2 2
      tests/election_tests.rs
  6. 7 7
      tests/persist_tests.rs

+ 1 - 0
Cargo.toml

@@ -36,6 +36,7 @@ anyhow = "1.0"
 futures = { version = "0.3.15", features = ["thread-pool"] }
 ruaft = { path = ".", features = ["integration-test"] }
 scopeguard = "1.1.0"
+stdext = "0.3"
 test_utils = { path = "test_utils" }
 kvraft = { path = "kvraft" }
 

+ 7 - 3
test_utils/src/logging.rs

@@ -12,8 +12,7 @@ macro_rules! init_test_log {
 
 pub const LOG_DIR: &str = "/tmp/ruaft-test-logs/";
 
-pub fn init_log(module_path: &str) -> std::io::Result<PathBuf> {
-    let module = module_path.replace("::config", "");
+pub fn init_log(module: &str) -> std::io::Result<PathBuf> {
     let module_file = module.replace("::", "-");
     let timestamp = SystemTime::now()
         .duration_since(SystemTime::UNIX_EPOCH)
@@ -34,10 +33,15 @@ pub fn init_log(module_path: &str) -> std::io::Result<PathBuf> {
     path.push(log_file_name);
     let log_file = std::fs::File::create(path.as_path())?;
 
+    let module = match module.rfind("::") {
+        Some(pos) => &module[..pos],
+        None => &module,
+    };
+
     let env = env_logger::Env::default().default_filter_or("info");
     let logger = env_logger::Builder::from_env(env)
         .target(env_logger::Target::Pipe(Box::new(log_file)))
-        .filter(Some(module.as_str()), log::LevelFilter::Trace)
+        .filter(Some(module), log::LevelFilter::Trace)
         .format_timestamp_millis()
         .is_test(true)
         .build();

+ 6 - 6
tests/agreement_tests.rs

@@ -15,7 +15,7 @@ pub mod config;
 #[test]
 fn basic_agreement() -> config::Result<()> {
     const SERVERS: usize = 5;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin("Test (2B): basic agreement");
@@ -38,7 +38,7 @@ fn basic_agreement() -> config::Result<()> {
 #[test]
 fn fail_agree() -> config::Result<()> {
     const SERVERS: usize = 3;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin("Test (2B): agreement despite follower disconnection");
@@ -71,7 +71,7 @@ fn fail_agree() -> config::Result<()> {
 #[test]
 fn fail_no_agree() -> config::Result<()> {
     const SERVERS: usize = 5;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin("Test (2B): no agreement if too many followers disconnect");
@@ -120,7 +120,7 @@ fn fail_no_agree() -> config::Result<()> {
 #[test]
 fn rejoin() -> config::Result<()> {
     const SERVERS: usize = 3;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin("Test (2B): rejoin of partitioned leader");
@@ -160,7 +160,7 @@ fn rejoin() -> config::Result<()> {
 #[test]
 fn backup() -> config::Result<()> {
     const SERVERS: usize = 5;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin(
@@ -237,7 +237,7 @@ fn backup() -> config::Result<()> {
 #[test]
 fn count() -> config::Result<()> {
     const SERVERS: usize = 3;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin("Test (2B): RPC counts aren't too high");

+ 25 - 3
tests/config/mod.rs

@@ -32,6 +32,7 @@ pub struct Config {
     state: Mutex<ConfigState>,
     log: Arc<Mutex<LogState>>,
     log_file_path: PathBuf,
+    test_path: &'static str,
 }
 
 impl Config {
@@ -376,7 +377,11 @@ impl Config {
             }
         }
         log::trace!("Cleaning up test config done.");
-        eprintln!("Ruaft log file: {:?}", self.log_file_path.as_os_str());
+        eprintln!(
+            "Ruaft log file for {}: {:?}",
+            self.test_path,
+            self.log_file_path.as_os_str()
+        );
     }
 }
 
@@ -437,9 +442,25 @@ impl Config {
     }
 }
 
-pub fn make_config(server_count: usize, unreliable: bool) -> Config {
+#[macro_export]
+macro_rules! make_config {
+    ($server_count:expr, $unreliable:expr) => {
+        $crate::config::make_config(
+            $server_count,
+            $unreliable,
+            stdext::function_name!(),
+        )
+    };
+}
+
+pub fn make_config(
+    server_count: usize,
+    unreliable: bool,
+    test_path: &'static str,
+) -> Config {
     // Create a logger first.
-    let log_file_path = test_utils::init_test_log!();
+    let log_file_path = test_utils::init_log(test_path)
+        .expect("Test log file creation should never fail");
 
     let network = labrpc::Network::run_daemon();
     {
@@ -469,6 +490,7 @@ pub fn make_config(server_count: usize, unreliable: bool) -> Config {
         state,
         log,
         log_file_path,
+        test_path,
     };
 
     for i in 0..server_count {

+ 2 - 2
tests/election_tests.rs

@@ -12,7 +12,7 @@ pub mod config;
 #[test]
 fn initial_election() -> config::Result<()> {
     const SERVERS: usize = 3;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin("Test (2A): initial election");
@@ -39,7 +39,7 @@ fn initial_election() -> config::Result<()> {
 #[test]
 fn re_election() -> config::Result<()> {
     const SERVERS: usize = 3;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin("Test (2A): election after network failure");

+ 7 - 7
tests/persist_tests.rs

@@ -19,7 +19,7 @@ pub mod config;
 #[test]
 fn persist1() -> config::Result<()> {
     const SERVERS: usize = 5;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin("Test (2C): basic persistence");
@@ -68,7 +68,7 @@ fn persist1() -> config::Result<()> {
 #[test]
 fn persist2() -> config::Result<()> {
     const SERVERS: usize = 5;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin("Test (2C): more persistence");
@@ -118,7 +118,7 @@ fn persist2() -> config::Result<()> {
 #[test]
 fn persist3() -> config::Result<()> {
     const SERVERS: usize = 3;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin(
@@ -152,7 +152,7 @@ fn persist3() -> config::Result<()> {
 #[test]
 fn figure8() -> config::Result<()> {
     const SERVERS: usize = 5;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin("Test (2C): Figure 8");
@@ -210,7 +210,7 @@ fn figure8() -> config::Result<()> {
 #[test]
 fn unreliable_agree() -> config::Result<()> {
     const SERVERS: usize = 5;
-    let cfg = Arc::new(config::make_config(SERVERS, true));
+    let cfg = Arc::new(make_config!(SERVERS, true));
     defer!(cfg.cleanup());
 
     cfg.begin("Test (2C): unreliable agreement");
@@ -242,7 +242,7 @@ fn unreliable_agree() -> config::Result<()> {
 #[test]
 fn figure8_unreliable() -> config::Result<()> {
     const SERVERS: usize = 5;
-    let cfg = config::make_config(SERVERS, false);
+    let cfg = make_config!(SERVERS, false);
     defer!(cfg.cleanup());
 
     cfg.begin("Test (2C): Figure 8 (unreliable)");
@@ -304,7 +304,7 @@ fn figure8_unreliable() -> config::Result<()> {
 
 fn internal_churn(unreliable: bool) -> config::Result<()> {
     const SERVERS: usize = 5;
-    let cfg = Arc::new(config::make_config(SERVERS, false));
+    let cfg = Arc::new(make_config!(SERVERS, false));
     defer!(cfg.cleanup());
 
     if unreliable {