mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
- switch `listen` to async in oder to verify if the bind was successful - Introduce the following examples - network speed - chat - fileshare - add additional tests - fix dropping stream before last messages can be handled bug, when dropping a stream, BParticipant will wait for prio to be empty before dropping the stream and sending the signal - correct closing of stream and participant - move tcp to protocols and create udp front and backend - tracing and fixing a bug that is caused by not waiting for configuration after receiving a frame - fix a bug in network-speed, but there is still a bug if trace=warn after 2.000.000 messages the server doesnt get that client has shut down and seems to lock somewhere. hard to reproduce open tasks [ ] verify UDP works correctly, especcially the connect! [ ] implements UDP shutdown correctly, the one created in connect! [ ] unify logging [ ] fill metrics [ ] fix dropping stream before last messages can be handled bug [ ] add documentation [ ] add benchmarks [ ] remove async_serde??? [ ] add mpsc
134 lines
4.4 KiB
Rust
134 lines
4.4 KiB
Rust
use async_std::task;
|
|
use task::block_on;
|
|
use veloren_network::StreamError;
|
|
mod helper;
|
|
use helper::{network_participant_stream, tcp, udp};
|
|
|
|
#[test]
|
|
#[ignore]
|
|
fn network_20s() {
|
|
let (_, _) = helper::setup(false, 0);
|
|
let (_n_a, _, _, _n_b, _, _) = block_on(network_participant_stream(tcp()));
|
|
std::thread::sleep(std::time::Duration::from_secs(30));
|
|
}
|
|
|
|
#[test]
|
|
fn close_network() {
|
|
let (_, _) = helper::setup(false, 0);
|
|
let (_, _p1_a, mut s1_a, _, _p1_b, mut s1_b) = block_on(network_participant_stream(tcp()));
|
|
|
|
std::thread::sleep(std::time::Duration::from_millis(30));
|
|
|
|
assert_eq!(s1_a.send("Hello World"), Err(StreamError::StreamClosed));
|
|
let msg1: Result<String, _> = block_on(s1_b.recv());
|
|
assert_eq!(msg1, Err(StreamError::StreamClosed));
|
|
}
|
|
|
|
#[test]
|
|
fn close_participant() {
|
|
let (_, _) = helper::setup(false, 0);
|
|
let (n_a, p1_a, mut s1_a, n_b, p1_b, mut s1_b) = block_on(network_participant_stream(tcp()));
|
|
|
|
block_on(n_a.disconnect(p1_a)).unwrap();
|
|
block_on(n_b.disconnect(p1_b)).unwrap();
|
|
|
|
std::thread::sleep(std::time::Duration::from_millis(30));
|
|
assert_eq!(s1_a.send("Hello World"), Err(StreamError::StreamClosed));
|
|
assert_eq!(
|
|
block_on(s1_b.recv::<String>()),
|
|
Err(StreamError::StreamClosed)
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn close_stream() {
|
|
let (_, _) = helper::setup(false, 0);
|
|
let (_n_a, _, mut s1_a, _n_b, _, _) = block_on(network_participant_stream(tcp()));
|
|
|
|
// s1_b is dropped directly while s1_a isn't
|
|
std::thread::sleep(std::time::Duration::from_millis(30));
|
|
|
|
assert_eq!(s1_a.send("Hello World"), Err(StreamError::StreamClosed));
|
|
assert_eq!(
|
|
block_on(s1_a.recv::<String>()),
|
|
Err(StreamError::StreamClosed)
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn stream_simple() {
|
|
let (_, _) = helper::setup(false, 0);
|
|
let (_n_a, _, mut s1_a, _n_b, _, mut s1_b) = block_on(network_participant_stream(tcp()));
|
|
|
|
s1_a.send("Hello World").unwrap();
|
|
assert_eq!(block_on(s1_b.recv()), Ok("Hello World".to_string()));
|
|
}
|
|
|
|
#[test]
|
|
fn stream_simple_3msg() {
|
|
let (_, _) = helper::setup(false, 0);
|
|
let (_n_a, _, mut s1_a, _n_b, _, mut s1_b) = block_on(network_participant_stream(tcp()));
|
|
|
|
s1_a.send("Hello World").unwrap();
|
|
s1_a.send(1337).unwrap();
|
|
assert_eq!(block_on(s1_b.recv()), Ok("Hello World".to_string()));
|
|
assert_eq!(block_on(s1_b.recv()), Ok(1337));
|
|
s1_a.send("3rdMessage").unwrap();
|
|
assert_eq!(block_on(s1_b.recv()), Ok("3rdMessage".to_string()));
|
|
}
|
|
|
|
#[test]
|
|
fn stream_simple_3msg_then_close() {
|
|
let (_, _) = helper::setup(false, 0);
|
|
let (_n_a, _, mut s1_a, _n_b, _, mut s1_b) = block_on(network_participant_stream(tcp()));
|
|
|
|
s1_a.send(1u8).unwrap();
|
|
s1_a.send(42).unwrap();
|
|
s1_a.send("3rdMessage").unwrap();
|
|
assert_eq!(block_on(s1_b.recv()), Ok(1u8));
|
|
assert_eq!(block_on(s1_b.recv()), Ok(42));
|
|
assert_eq!(block_on(s1_b.recv()), Ok("3rdMessage".to_string()));
|
|
drop(s1_a);
|
|
std::thread::sleep(std::time::Duration::from_millis(30));
|
|
assert_eq!(s1_b.send("Hello World"), Err(StreamError::StreamClosed));
|
|
}
|
|
|
|
#[test]
|
|
fn stream_send_first_then_receive() {
|
|
// recv should still be possible even if stream got closed if they are in queue
|
|
let (_, _) = helper::setup(false, 0);
|
|
let (_n_a, _, mut s1_a, _n_b, _, mut s1_b) = block_on(network_participant_stream(tcp()));
|
|
|
|
s1_a.send(1u8).unwrap();
|
|
s1_a.send(42).unwrap();
|
|
s1_a.send("3rdMessage").unwrap();
|
|
drop(s1_a);
|
|
std::thread::sleep(std::time::Duration::from_millis(2000));
|
|
assert_eq!(block_on(s1_b.recv()), Ok(1u8));
|
|
assert_eq!(block_on(s1_b.recv()), Ok(42));
|
|
assert_eq!(block_on(s1_b.recv()), Ok("3rdMessage".to_string()));
|
|
assert_eq!(s1_b.send("Hello World"), Err(StreamError::StreamClosed));
|
|
}
|
|
|
|
#[test]
|
|
fn stream_simple_udp() {
|
|
let (_, _) = helper::setup(false, 0);
|
|
let (_n_a, _, mut s1_a, _n_b, _, mut s1_b) = block_on(network_participant_stream(udp()));
|
|
|
|
s1_a.send("Hello World").unwrap();
|
|
assert_eq!(block_on(s1_b.recv()), Ok("Hello World".to_string()));
|
|
}
|
|
|
|
#[test]
|
|
fn stream_simple_udp_3msg() {
|
|
let (_, _) = helper::setup(false, 0);
|
|
let (_n_a, _, mut s1_a, _n_b, _, mut s1_b) = block_on(network_participant_stream(udp()));
|
|
|
|
s1_a.send("Hello World").unwrap();
|
|
s1_a.send(1337).unwrap();
|
|
assert_eq!(block_on(s1_b.recv()), Ok("Hello World".to_string()));
|
|
assert_eq!(block_on(s1_b.recv()), Ok(1337));
|
|
s1_a.send("3rdMessage").unwrap();
|
|
assert_eq!(block_on(s1_b.recv()), Ok("3rdMessage".to_string()));
|
|
}
|