mirror of
https://github.com/fafhrd91/actix-web
synced 2025-06-25 06:39:22 +02:00
refactor http-test server
This commit is contained in:
@ -13,11 +13,13 @@ use futures::future::ok;
|
||||
use rand::Rng;
|
||||
|
||||
use actix_http::HttpService;
|
||||
use actix_http_test::TestServer;
|
||||
use actix_http_test::test_server;
|
||||
use actix_service::pipeline_factory;
|
||||
use actix_web::http::Cookie;
|
||||
use actix_web::middleware::{BodyEncoding, Compress};
|
||||
use actix_web::{http::header, web, App, Error, HttpMessage, HttpRequest, HttpResponse};
|
||||
use actix_web::{
|
||||
http::header, test, web, App, Error, HttpMessage, HttpRequest, HttpResponse,
|
||||
};
|
||||
use awc::error::SendRequestError;
|
||||
|
||||
const STR: &str = "Hello World Hello World Hello World Hello World Hello World \
|
||||
@ -44,13 +46,10 @@ const STR: &str = "Hello World Hello World Hello World Hello World Hello World \
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn test_simple() {
|
||||
let srv =
|
||||
TestServer::start(|| {
|
||||
HttpService::new(App::new().service(
|
||||
web::resource("/").route(web::to(|| HttpResponse::Ok().body(STR))),
|
||||
))
|
||||
.tcp()
|
||||
});
|
||||
let srv = test::start(|| {
|
||||
App::new()
|
||||
.service(web::resource("/").route(web::to(|| HttpResponse::Ok().body(STR))))
|
||||
});
|
||||
|
||||
let request = srv.get("/").header("x-test", "111").send();
|
||||
let mut response = request.await.unwrap();
|
||||
@ -74,11 +73,10 @@ async fn test_simple() {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn test_json() {
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().service(
|
||||
let srv = test::start(|| {
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(|_: web::Json<String>| HttpResponse::Ok())),
|
||||
))
|
||||
.tcp()
|
||||
)
|
||||
});
|
||||
|
||||
let request = srv
|
||||
@ -91,11 +89,10 @@ async fn test_json() {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn test_form() {
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().service(web::resource("/").route(web::to(
|
||||
let srv = test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(
|
||||
|_: web::Form<HashMap<String, String>>| HttpResponse::Ok(),
|
||||
))))
|
||||
.tcp()
|
||||
)))
|
||||
});
|
||||
|
||||
let mut data = HashMap::new();
|
||||
@ -108,14 +105,13 @@ async fn test_form() {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn test_timeout() {
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().service(web::resource("/").route(web::to(|| {
|
||||
let srv = test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| {
|
||||
async {
|
||||
actix_rt::time::delay_for(Duration::from_millis(200)).await;
|
||||
Ok::<_, Error>(HttpResponse::Ok().body(STR))
|
||||
}
|
||||
}))))
|
||||
.tcp()
|
||||
})))
|
||||
});
|
||||
|
||||
let connector = awc::Connector::new()
|
||||
@ -139,14 +135,13 @@ async fn test_timeout() {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn test_timeout_override() {
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().service(web::resource("/").route(web::to(|| {
|
||||
let srv = test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| {
|
||||
async {
|
||||
actix_rt::time::delay_for(Duration::from_millis(200)).await;
|
||||
Ok::<_, Error>(HttpResponse::Ok().body(STR))
|
||||
}
|
||||
}))))
|
||||
.tcp()
|
||||
})))
|
||||
});
|
||||
|
||||
let client = awc::Client::build()
|
||||
@ -167,7 +162,7 @@ async fn test_connection_reuse() {
|
||||
let num = Arc::new(AtomicUsize::new(0));
|
||||
let num2 = num.clone();
|
||||
|
||||
let srv = TestServer::start(move || {
|
||||
let srv = test_server(move || {
|
||||
let num2 = num2.clone();
|
||||
pipeline_factory(move |io| {
|
||||
num2.fetch_add(1, Ordering::Relaxed);
|
||||
@ -203,7 +198,7 @@ async fn test_connection_force_close() {
|
||||
let num = Arc::new(AtomicUsize::new(0));
|
||||
let num2 = num.clone();
|
||||
|
||||
let srv = TestServer::start(move || {
|
||||
let srv = test_server(move || {
|
||||
let num2 = num2.clone();
|
||||
pipeline_factory(move |io| {
|
||||
num2.fetch_add(1, Ordering::Relaxed);
|
||||
@ -239,7 +234,7 @@ async fn test_connection_server_close() {
|
||||
let num = Arc::new(AtomicUsize::new(0));
|
||||
let num2 = num.clone();
|
||||
|
||||
let srv = TestServer::start(move || {
|
||||
let srv = test_server(move || {
|
||||
let num2 = num2.clone();
|
||||
pipeline_factory(move |io| {
|
||||
num2.fetch_add(1, Ordering::Relaxed);
|
||||
@ -277,7 +272,7 @@ async fn test_connection_wait_queue() {
|
||||
let num = Arc::new(AtomicUsize::new(0));
|
||||
let num2 = num.clone();
|
||||
|
||||
let srv = TestServer::start(move || {
|
||||
let srv = test_server(move || {
|
||||
let num2 = num2.clone();
|
||||
pipeline_factory(move |io| {
|
||||
num2.fetch_add(1, Ordering::Relaxed);
|
||||
@ -321,7 +316,7 @@ async fn test_connection_wait_queue_force_close() {
|
||||
let num = Arc::new(AtomicUsize::new(0));
|
||||
let num2 = num.clone();
|
||||
|
||||
let srv = TestServer::start(move || {
|
||||
let srv = test_server(move || {
|
||||
let num2 = num2.clone();
|
||||
pipeline_factory(move |io| {
|
||||
num2.fetch_add(1, Ordering::Relaxed);
|
||||
@ -365,17 +360,14 @@ async fn test_connection_wait_queue_force_close() {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn test_with_query_parameter() {
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().service(web::resource("/").to(
|
||||
|req: HttpRequest| {
|
||||
if req.query_string().contains("qp") {
|
||||
HttpResponse::Ok()
|
||||
} else {
|
||||
HttpResponse::BadRequest()
|
||||
}
|
||||
},
|
||||
)))
|
||||
.tcp()
|
||||
let srv = test::start(|| {
|
||||
App::new().service(web::resource("/").to(|req: HttpRequest| {
|
||||
if req.query_string().contains("qp") {
|
||||
HttpResponse::Ok()
|
||||
} else {
|
||||
HttpResponse::BadRequest()
|
||||
}
|
||||
}))
|
||||
});
|
||||
|
||||
let res = awc::Client::new()
|
||||
@ -388,15 +380,14 @@ async fn test_with_query_parameter() {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn test_no_decompress() {
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().wrap(Compress::default()).service(
|
||||
web::resource("/").route(web::to(|| {
|
||||
let srv = test::start(|| {
|
||||
App::new()
|
||||
.wrap(Compress::default())
|
||||
.service(web::resource("/").route(web::to(|| {
|
||||
let mut res = HttpResponse::Ok().body(STR);
|
||||
res.encoding(header::ContentEncoding::Gzip);
|
||||
res
|
||||
})),
|
||||
))
|
||||
.tcp()
|
||||
})))
|
||||
});
|
||||
|
||||
let mut res = awc::Client::new()
|
||||
@ -433,8 +424,8 @@ async fn test_no_decompress() {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn test_client_gzip_encoding() {
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().service(web::resource("/").route(web::to(|| {
|
||||
let srv = test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| {
|
||||
let mut e = GzEncoder::new(Vec::new(), Compression::default());
|
||||
e.write_all(STR.as_ref()).unwrap();
|
||||
let data = e.finish().unwrap();
|
||||
@ -442,8 +433,7 @@ async fn test_client_gzip_encoding() {
|
||||
HttpResponse::Ok()
|
||||
.header("content-encoding", "gzip")
|
||||
.body(data)
|
||||
}))))
|
||||
.tcp()
|
||||
})))
|
||||
});
|
||||
|
||||
// client request
|
||||
@ -457,8 +447,8 @@ async fn test_client_gzip_encoding() {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn test_client_gzip_encoding_large() {
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().service(web::resource("/").route(web::to(|| {
|
||||
let srv = test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| {
|
||||
let mut e = GzEncoder::new(Vec::new(), Compression::default());
|
||||
e.write_all(STR.repeat(10).as_ref()).unwrap();
|
||||
let data = e.finish().unwrap();
|
||||
@ -466,8 +456,7 @@ async fn test_client_gzip_encoding_large() {
|
||||
HttpResponse::Ok()
|
||||
.header("content-encoding", "gzip")
|
||||
.body(data)
|
||||
}))))
|
||||
.tcp()
|
||||
})))
|
||||
});
|
||||
|
||||
// client request
|
||||
@ -486,18 +475,15 @@ async fn test_client_gzip_encoding_large_random() {
|
||||
.take(100_000)
|
||||
.collect::<String>();
|
||||
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().service(web::resource("/").route(web::to(
|
||||
|data: Bytes| {
|
||||
let mut e = GzEncoder::new(Vec::new(), Compression::default());
|
||||
e.write_all(&data).unwrap();
|
||||
let data = e.finish().unwrap();
|
||||
HttpResponse::Ok()
|
||||
.header("content-encoding", "gzip")
|
||||
.body(data)
|
||||
},
|
||||
))))
|
||||
.tcp()
|
||||
let srv = test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|data: Bytes| {
|
||||
let mut e = GzEncoder::new(Vec::new(), Compression::default());
|
||||
e.write_all(&data).unwrap();
|
||||
let data = e.finish().unwrap();
|
||||
HttpResponse::Ok()
|
||||
.header("content-encoding", "gzip")
|
||||
.body(data)
|
||||
})))
|
||||
});
|
||||
|
||||
// client request
|
||||
@ -511,18 +497,15 @@ async fn test_client_gzip_encoding_large_random() {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn test_client_brotli_encoding() {
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().service(web::resource("/").route(web::to(
|
||||
|data: Bytes| {
|
||||
let mut e = CompressorWriter::new(Vec::new(), 0, 5, 0);
|
||||
e.write_all(&data).unwrap();
|
||||
let data = e.into_inner();
|
||||
HttpResponse::Ok()
|
||||
.header("content-encoding", "br")
|
||||
.body(data)
|
||||
},
|
||||
))))
|
||||
.tcp()
|
||||
let srv = test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|data: Bytes| {
|
||||
let mut e = CompressorWriter::new(Vec::new(), 0, 5, 0);
|
||||
e.write_all(&data).unwrap();
|
||||
let data = e.into_inner();
|
||||
HttpResponse::Ok()
|
||||
.header("content-encoding", "br")
|
||||
.body(data)
|
||||
})))
|
||||
});
|
||||
|
||||
// client request
|
||||
@ -541,18 +524,15 @@ async fn test_client_brotli_encoding_large_random() {
|
||||
.take(70_000)
|
||||
.collect::<String>();
|
||||
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().service(web::resource("/").route(web::to(
|
||||
|data: Bytes| {
|
||||
let mut e = CompressorWriter::new(Vec::new(), 0, 5, 0);
|
||||
e.write_all(&data).unwrap();
|
||||
let data = e.into_inner();
|
||||
HttpResponse::Ok()
|
||||
.header("content-encoding", "br")
|
||||
.body(data)
|
||||
},
|
||||
))))
|
||||
.tcp()
|
||||
let srv = test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|data: Bytes| {
|
||||
let mut e = CompressorWriter::new(Vec::new(), 0, 5, 0);
|
||||
e.write_all(&data).unwrap();
|
||||
let data = e.into_inner();
|
||||
HttpResponse::Ok()
|
||||
.header("content-encoding", "br")
|
||||
.body(data)
|
||||
})))
|
||||
});
|
||||
|
||||
// client request
|
||||
@ -688,11 +668,11 @@ async fn test_client_cookie_handling() {
|
||||
let cookie1b = cookie1.clone();
|
||||
let cookie2b = cookie2.clone();
|
||||
|
||||
let srv = TestServer::start(move || {
|
||||
let srv = test::start(move || {
|
||||
let cookie1 = cookie1b.clone();
|
||||
let cookie2 = cookie2b.clone();
|
||||
|
||||
HttpService::new(App::new().route(
|
||||
App::new().route(
|
||||
"/",
|
||||
web::to(move |req: HttpRequest| {
|
||||
let cookie1 = cookie1.clone();
|
||||
@ -730,8 +710,7 @@ async fn test_client_cookie_handling() {
|
||||
}
|
||||
}
|
||||
}),
|
||||
))
|
||||
.tcp()
|
||||
)
|
||||
});
|
||||
|
||||
let request = srv.get("/").cookie(cookie1.clone()).cookie(cookie2.clone());
|
||||
@ -775,8 +754,8 @@ async fn test_client_cookie_handling() {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn client_basic_auth() {
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().route(
|
||||
let srv = test::start(|| {
|
||||
App::new().route(
|
||||
"/",
|
||||
web::to(|req: HttpRequest| {
|
||||
if req
|
||||
@ -792,8 +771,7 @@ async fn client_basic_auth() {
|
||||
HttpResponse::BadRequest()
|
||||
}
|
||||
}),
|
||||
))
|
||||
.tcp()
|
||||
)
|
||||
});
|
||||
|
||||
// set authorization header to Basic <base64 encoded username:password>
|
||||
@ -804,8 +782,8 @@ async fn client_basic_auth() {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn client_bearer_auth() {
|
||||
let srv = TestServer::start(|| {
|
||||
HttpService::new(App::new().route(
|
||||
let srv = test::start(|| {
|
||||
App::new().route(
|
||||
"/",
|
||||
web::to(|req: HttpRequest| {
|
||||
if req
|
||||
@ -821,8 +799,7 @@ async fn client_bearer_auth() {
|
||||
HttpResponse::BadRequest()
|
||||
}
|
||||
}),
|
||||
))
|
||||
.tcp()
|
||||
)
|
||||
});
|
||||
|
||||
// set authorization header to Bearer <token>
|
||||
|
@ -3,7 +3,7 @@ use std::sync::atomic::{AtomicUsize, Ordering};
|
||||
use std::sync::Arc;
|
||||
|
||||
use actix_http::HttpService;
|
||||
use actix_http_test::TestServer;
|
||||
use actix_http_test::test_server;
|
||||
use actix_service::{pipeline_factory, ServiceFactory};
|
||||
use actix_web::http::Version;
|
||||
use actix_web::{web, App, HttpResponse};
|
||||
@ -54,7 +54,7 @@ async fn _test_connection_reuse_h2() {
|
||||
let num = Arc::new(AtomicUsize::new(0));
|
||||
let num2 = num.clone();
|
||||
|
||||
let srv = TestServer::start(move || {
|
||||
let srv = test_server(move || {
|
||||
let num2 = num2.clone();
|
||||
pipeline_factory(move |io| {
|
||||
num2.fetch_add(1, Ordering::Relaxed);
|
||||
|
@ -3,7 +3,7 @@ use std::sync::atomic::{AtomicUsize, Ordering};
|
||||
use std::sync::Arc;
|
||||
|
||||
use actix_http::HttpService;
|
||||
use actix_http_test::TestServer;
|
||||
use actix_http_test::test_server;
|
||||
use actix_service::{pipeline_factory, ServiceFactory};
|
||||
use actix_web::http::Version;
|
||||
use actix_web::{web, App, HttpResponse};
|
||||
@ -36,7 +36,7 @@ async fn test_connection_reuse_h2() {
|
||||
let num = Arc::new(AtomicUsize::new(0));
|
||||
let num2 = num.clone();
|
||||
|
||||
let srv = TestServer::start(move || {
|
||||
let srv = test_server(move || {
|
||||
let num2 = num2.clone();
|
||||
pipeline_factory(move |io| {
|
||||
num2.fetch_add(1, Ordering::Relaxed);
|
||||
|
@ -2,7 +2,7 @@ use std::io;
|
||||
|
||||
use actix_codec::Framed;
|
||||
use actix_http::{body::BodySize, h1, ws, Error, HttpService, Request, Response};
|
||||
use actix_http_test::TestServer;
|
||||
use actix_http_test::test_server;
|
||||
use bytes::Bytes;
|
||||
use futures::future::ok;
|
||||
use futures::{SinkExt, StreamExt};
|
||||
@ -21,7 +21,7 @@ async fn ws_service(req: ws::Frame) -> Result<ws::Message, io::Error> {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn test_simple() {
|
||||
let mut srv = TestServer::start(|| {
|
||||
let mut srv = test_server(|| {
|
||||
HttpService::build()
|
||||
.upgrade(|(req, mut framed): (Request, Framed<_, _>)| {
|
||||
async move {
|
||||
|
Reference in New Issue
Block a user