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