1 use log::*;
2 use url::Url;
3
4 use tungstenite::{connect, Error, Message, Result};
5
6 const AGENT: &str = "Tungstenite";
7
get_case_count() -> Result<u32>8 fn get_case_count() -> Result<u32> {
9 let (mut socket, _) = connect(Url::parse("ws://localhost:9001/getCaseCount").unwrap())?;
10 let msg = socket.read()?;
11 socket.close(None)?;
12 Ok(msg.into_text()?.parse::<u32>().unwrap())
13 }
14
update_reports() -> Result<()>15 fn update_reports() -> Result<()> {
16 let (mut socket, _) = connect(
17 Url::parse(&format!("ws://localhost:9001/updateReports?agent={}", AGENT)).unwrap(),
18 )?;
19 socket.close(None)?;
20 Ok(())
21 }
22
run_test(case: u32) -> Result<()>23 fn run_test(case: u32) -> Result<()> {
24 info!("Running test case {}", case);
25 let case_url =
26 Url::parse(&format!("ws://localhost:9001/runCase?case={}&agent={}", case, AGENT)).unwrap();
27 let (mut socket, _) = connect(case_url)?;
28 loop {
29 match socket.read()? {
30 msg @ Message::Text(_) | msg @ Message::Binary(_) => {
31 socket.send(msg)?;
32 }
33 Message::Ping(_) | Message::Pong(_) | Message::Close(_) | Message::Frame(_) => {}
34 }
35 }
36 }
37
main()38 fn main() {
39 env_logger::init();
40
41 let total = get_case_count().unwrap();
42
43 for case in 1..=total {
44 if let Err(e) = run_test(case) {
45 match e {
46 Error::ConnectionClosed | Error::Protocol(_) | Error::Utf8 => (),
47 err => error!("test: {}", err),
48 }
49 }
50 }
51
52 update_reports().unwrap();
53 }
54