Skip to content

При большом теле ответа получается ошибка http: socket closed already

Воспроизвести socket closed already:

#[tarantool_test::test]
fn large_response() {
    let text = "Hello";
    let repetitions = 10000;
    let server = server::http(move |_req| {
        let response_text = std::iter::repeat(text)
            .take(repetitions)
            .collect::<Vec<_>>()
            .join("");
        async { http::Response::new(response_text.into()) }
    });
    let client = fibreq::ClientBuilder::new().build();

    let mut response = client
        .get(format!("http://{}/text", server.addr()))
        .expect("Failed to create get request.")
        .send()
        .expect("Failed to send get request.");
    let response_length = text.len() * repetitions;
    let content_length = response
        .content_length()
        .expect("Failed to get response content length");
    assert_eq!(response_length as u64, content_length);
    let text = response.text().expect("Failed to get text");
    assert_eq!("Hello", &text[..5]);
}

Если repetitions выставить в 1000 то все ок.

Ошибка выявлена в реузльтате расследования бага в ttc.

Edited by Igor Kuznetsov