1 use mockito::{mock, server_url}; 2 3 speculate::speculate! { 4 before { 5 env_logger::try_init().ok(); 6 } 7 8 test "simple response body" { 9 let m = mock("GET", "/") 10 .with_body("hello world") 11 .create(); 12 13 let mut response = isahc::get(server_url()).unwrap(); 14 let response_text = response.body_mut().text().unwrap(); 15 16 assert_eq!(response_text, "hello world"); 17 m.assert(); 18 } 19 20 test "large response body" { 21 let body = "wow so large ".repeat(1000); 22 23 let m = mock("GET", "/") 24 .with_body(&body) 25 .create(); 26 27 let mut response = isahc::get(server_url()).unwrap(); 28 let response_text = response.body_mut().text().unwrap(); 29 30 assert_eq!(response_text, body); 31 m.assert(); 32 } 33 34 test "response body with Content-Length knows its size" { 35 let m = mock("GET", "/") 36 .with_body("hello world") 37 .create(); 38 39 let response = isahc::get(server_url()).unwrap(); 40 41 assert_eq!(response.body().len(), Some(11)); 42 m.assert(); 43 } 44 45 test "response body with chunked encoding has unknown size" { 46 let m = mock("GET", "/") 47 .with_body_from_fn(|w| w.write_all(b"hello world")) 48 .create(); 49 50 let response = isahc::get(server_url()).unwrap(); 51 52 assert_eq!(response.body().len(), None); 53 m.assert(); 54 } 55 56 // See issue #64. 57 test "dropping client does not abort response transfer" { 58 let body = "hello world\n".repeat(8192); 59 let m = mock("GET", "/") 60 .with_body(&body) 61 .create(); 62 63 let client = isahc::HttpClient::new().unwrap(); 64 let mut response = client.get(server_url()).unwrap(); 65 drop(client); 66 67 assert_eq!(response.body_mut().text().unwrap().len(), body.len()); 68 m.assert(); 69 } 70 71 // See issue #72. 72 test "reading from response body after EOF continues to return EOF" { 73 use std::{io, io::Read}; 74 75 let m = mock("GET", "/") 76 .with_body("hello world") 77 .create(); 78 79 let mut response = isahc::get(server_url()).unwrap(); 80 let mut body = response.body_mut(); 81 82 // Read until EOF 83 io::copy(&mut body, &mut io::sink()).unwrap(); 84 m.assert(); 85 86 // Read after already receiving EOF 87 let mut buf = [0; 1024]; 88 for _ in 0..3 { 89 assert_eq!(body.read(&mut buf).unwrap(), 0); 90 } 91 } 92 } 93