rpc_api_server/webserver/
wait_webserver.rs1use 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 return Ok(());
23 }
24 Err(err) => {
25 }
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}