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