rpc_api_server/webserver/
wait_webserver.rs

1use std::collections::HashMap;
2use std::time::Duration;
3
4use rpc_api::rpc::http::HttpResponse;
5
6use crate::find_port::find_port;
7use crate::webserver::tokio_server::webserver_start;
8
9pub async fn wait_webserver_responsive(url: &str) {
10    wait_webserver_responsive_times(url, 300).await.unwrap();
11}
12
13pub async fn wait_webserver_responsive_times(url: &str, times: usize) -> Result<(), String> {
14    for _ in 0..times {
15        let res = reqwest::get(url).await;
16        match res {
17            Ok(ok) => {
18                // print!("{:?} === ", ok);
19                // let text = ok.text().await.unwrap();
20                // println!("{:?}", text);
21                //
22                return Ok(());
23            }
24            Err(err) => {
25                // println!("is_connect={}", err.is_connect());
26            }
27        }
28        tokio::time::sleep(Duration::from_millis(1)).await;
29    }
30    Err(format!("timeout for wait_webserver_responsive_times({},{})", url, times))
31}
32
33#[tokio::test]
34async fn test_wait_nothing() {
35    let free_port = find_port().unwrap();
36    let url = format!("http://127.0.0.1:{}", free_port);
37    let result = wait_webserver_responsive_times(&url, 10).await;
38    if let Ok(_) = result { panic!("Ci si aspettava un timeout") }
39}
40
41#[tokio::test]
42async fn test_wait() {
43    let port = find_port().unwrap();
44    tokio::spawn(async move {
45        let string = format!("127.0.0.1:{}", port);
46        webserver_start(&string, |req| -> HttpResponse {
47            HttpResponse {
48                content: "no content".to_string(),
49                content_type: "text/html".to_string(),
50                status: 404,
51                headers: HashMap::new(),
52            }
53        }).await.unwrap();
54    });
55    let url = &format!("http://127.0.0.1:{}", port);
56    wait_webserver_responsive(url).await;
57    let res = reqwest::get(url).await.unwrap().text().await.unwrap();
58    assert_eq!(res, "no content")
59}