From 147159b0bd76f47e631b44a69c625968834e4924 Mon Sep 17 00:00:00 2001 From: Gary Yu Date: Tue, 2 Oct 2018 19:23:51 +0800 Subject: [PATCH] test: avoid infinite waiting on basic_stratum_server test (#1634) * test: avoid infinite waiting on basic_stratum_server test * rustfmt --- servers/tests/stratum.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/servers/tests/stratum.rs b/servers/tests/stratum.rs index 31c4d75d..d9029ecf 100644 --- a/servers/tests/stratum.rs +++ b/servers/tests/stratum.rs @@ -22,6 +22,8 @@ extern crate grin_wallet as wallet; extern crate bufstream; extern crate serde_json; +#[macro_use] +extern crate slog; mod framework; @@ -30,9 +32,11 @@ use serde_json::Value; use std::io::prelude::{BufRead, Write}; use std::net::TcpStream; +use std::process; use std::{thread, time}; use core::global::{self, ChainTypes}; +use util::LOGGER; use framework::{config, stratum_config}; @@ -71,6 +75,7 @@ fn basic_stratum_server() { } // As this stream falls out of scope it will be disconnected } + info!(LOGGER, "stratum server connected"); // Create a few new worker connections let mut workers = vec![]; @@ -82,6 +87,7 @@ fn basic_stratum_server() { workers.push(stream); } assert!(workers.len() == 5); + info!(LOGGER, "workers length verification ok"); // Simulate a worker lost connection workers.remove(4); @@ -110,6 +116,7 @@ fn basic_stratum_server() { assert!(false); } } + info!(LOGGER, "a few stratum JSONRpc commands verification ok"); // keepalive - expected "ok" result let mut response = String::new(); @@ -120,6 +127,7 @@ fn basic_stratum_server() { thread::sleep(time::Duration::from_secs(1)); // Wait for the server to reply let _st = workers[2].read_line(&mut response); assert_eq!(response.as_str(), ok_resp); + info!(LOGGER, "keepalive test ok"); // "doesnotexist" - error expected let mut response = String::new(); @@ -130,6 +138,7 @@ fn basic_stratum_server() { thread::sleep(time::Duration::from_secs(1)); // Wait for the server to reply let _st = workers[3].read_line(&mut response); assert_eq!(response.as_str(), ok_resp); + info!(LOGGER, "worker doesnotexist test ok"); // Verify stratum server and worker stats let stats = s.get_server_stats().unwrap(); @@ -137,9 +146,20 @@ fn basic_stratum_server() { assert_eq!(stats.stratum_stats.num_workers, 4); // 5 - 1 = 4 assert_eq!(stats.stratum_stats.worker_stats[5].is_connected, false); // worker was removed assert_eq!(stats.stratum_stats.worker_stats[1].is_connected, true); + info!(LOGGER, "stratum server and worker stats verification ok"); // Start mining blocks s.start_test_miner(None); + info!(LOGGER, "test miner started"); + + // This test is supposed to complete in 3 seconds, + // so let's set a timeout on 10s to avoid infinite waiting happened in Travis-CI. + let handler = thread::spawn(|| { + thread::sleep(time::Duration::from_secs(10)); + error!(LOGGER, "basic_stratum_server test fail on timeout!"); + thread::sleep(time::Duration::from_millis(100)); + process::exit(1); + }); // Simulate a worker lost connection workers.remove(1); @@ -151,10 +171,12 @@ fn basic_stratum_server() { let _st = workers[2].read_line(&mut jobtemplate); let job_template: Value = serde_json::from_str(&jobtemplate).unwrap(); assert_eq!(job_template["method"], expected); + info!(LOGGER, "blocks broadcasting to workers test ok"); // Verify stratum server and worker stats let stats = s.get_server_stats().unwrap(); assert_eq!(stats.stratum_stats.num_workers, 3); // 5 - 2 = 3 assert_eq!(stats.stratum_stats.worker_stats[2].is_connected, false); // worker was removed assert_ne!(stats.stratum_stats.block_height, 1); + info!(LOGGER, "basic_stratum_server test done and ok."); }