Ошибка "Несколько исполнителей одновременно" для интеграционного теста обратного прокси, написанного на rust actix-web 0.7.18
Я разрабатываю обратный прокси с именем palantir
используя ржавчину actix-web v0.7.18. Он отлично работает и превосходит обратный прокси Nginx в тестах. Я пытаюсь написать интеграционные тесты для него, используя actix_web::test::TestServer
:
extern crate palantir;
use palantir::proxy::proxy::PalantirProxy;
fn connection_server_proxy(req: actix_web::HttpRequest) ->
impl futures::Future<Item=actix_web::HttpResponse, Error=actix_web::Error> {
PalantirProxy::new(&String::from(
"https://127.0.0.1:9062"))
.timeout(std::time::Duration::from_secs(100))
.forward(req)
}
#[test]
fn make_palantir() {
use actix_web::test::TestServer;
let mut srv = TestServer::new(|_r|
actix_web::server::new(
|| actix_web::App::new()
.resource("/{tail:.*}", |r| r.with_async(
connection_server_proxy
))
)
.bind(&String::from("0.0.0.0:8080"))
.unwrap()
.run()
);
let request = srv.get().finish().unwrap();
let response = srv.execute(request.send()).unwrap();
assert!(response.status().is_success());
}
Однако мой тест не прошел из-за этой паники:
thread 'arbiter:a640a897-97d9-431c-988c-ea776e293127:actix-net-worker-0' panicked at
'Multiple executors at once: EnterError { reason: "attempted to run an executor while another executor is already running" }',
src/libcore/result.rs:997:5
Я нашел похожие проблемы, о которых сообщалось reqwest
а также tokio
, но решения и обсуждения не помогли, потому что actix-web не предоставляет такой интерфейс.
Я знаю, что эта ошибка возникает из-за блокирующего сетевого запроса в неблокирующем будущем, но я не знаю, как это исправить. Я также думал о HTTP-насмешках, используя mockito
, но не смог найти полезных примеров для прокси-серверов.
Кто-нибудь знает, как я могу это исправить или сделать простой интеграционный тест с помощью actix-web v0.7.18?