update test. Fix index matching

This commit is contained in:
fakeshadow 2021-04-06 01:29:47 +08:00
parent ac4b6dcd6a
commit 0522f50f64
2 changed files with 30 additions and 13 deletions

View File

@ -404,16 +404,19 @@ impl Future for ServerWorker {
let factory_id = restart.factory_id; let factory_id = restart.factory_id;
let token = restart.token; let token = restart.token;
let mut item = ready!(restart.fut.as_mut().poll(cx)).unwrap_or_else(|_| { let service = ready!(restart.fut.as_mut().poll(cx))
panic!( .unwrap_or_else(|_| {
"Can not restart {:?} service", panic!(
this.factories[factory_id].name(token) "Can not restart {:?} service",
) this.factories[factory_id].name(token)
}); )
})
// Token should have a matching index with returned item vec. .into_iter()
debug_assert_eq!(item.get(token.0).unwrap().0, token); // Find the same token from vector. There should be only one
let (token, service) = item.remove(token.0); // So the first match would be enough.
.find(|(t, _)| *t == token)
.map(|(_, service)| service)
.expect("No BoxedServerService found");
trace!( trace!(
"Service {:?} has been restarted", "Service {:?} has been restarted",

View File

@ -365,11 +365,14 @@ fn test_service_restart() {
let _ = server.stop(false); let _ = server.stop(false);
let _ = h.join().unwrap(); let _ = h.join().unwrap();
let addr = unused_addr(); let addr1 = unused_addr();
let addr2 = unused_addr();
let (tx, rx) = mpsc::channel(); let (tx, rx) = mpsc::channel();
let num = Arc::new(AtomicUsize::new(0)); let num = Arc::new(AtomicUsize::new(0));
let num2 = Arc::new(AtomicUsize::new(0));
let num_clone = num.clone(); let num_clone = num.clone();
let num2_clone = num2.clone();
let h = thread::spawn(move || { let h = thread::spawn(move || {
let num = num.clone(); let num = num.clone();
@ -377,7 +380,7 @@ fn test_service_restart() {
let server = Server::build() let server = Server::build()
.backlog(1) .backlog(1)
.disable_signals() .disable_signals()
.bind("addr", addr, move || { .bind("addr1", addr1, move || {
let num = num.clone(); let num = num.clone();
fn_factory(move || { fn_factory(move || {
let num = num.clone(); let num = num.clone();
@ -385,6 +388,14 @@ fn test_service_restart() {
}) })
}) })
.unwrap() .unwrap()
.bind("addr2", addr2, move || {
let num2 = num2.clone();
fn_factory(move || {
let num2 = num2.clone();
async move { Ok::<_, ()>(TestService(num2)) }
})
})
.unwrap()
.workers(1) .workers(1)
.run(); .run();
@ -397,13 +408,16 @@ fn test_service_restart() {
thread::sleep(time::Duration::from_millis(500)); thread::sleep(time::Duration::from_millis(500));
for _ in 0..5 { for _ in 0..5 {
let conn = net::TcpStream::connect(addr).unwrap(); let conn = net::TcpStream::connect(addr1).unwrap();
conn.shutdown(Shutdown::Both).unwrap();
let conn = net::TcpStream::connect(addr2).unwrap();
conn.shutdown(Shutdown::Both).unwrap(); conn.shutdown(Shutdown::Both).unwrap();
} }
thread::sleep(time::Duration::from_secs(1)); thread::sleep(time::Duration::from_secs(1));
assert!(num_clone.load(Ordering::SeqCst) > 5); assert!(num_clone.load(Ordering::SeqCst) > 5);
assert!(num2_clone.load(Ordering::SeqCst) > 5);
sys.stop(); sys.stop();
let _ = server.stop(false); let _ = server.stop(false);