build(deps): update axum requirement from 0.6.x to 0.7.x

This commit is contained in:
gengteng
2023-11-28 16:38:58 +08:00
parent 27d42b35e4
commit e8888c75e9
23 changed files with 289 additions and 927 deletions

View File

@@ -3,24 +3,22 @@
use crate::tests::{ValidTest, ValidTestParameter};
use crate::{Arguments, HasValidate, HasValidateArgs, Valid, ValidEx, VALIDATION_ERROR_STATUS};
use axum::extract::{FromRef, Path, Query};
use axum::http::StatusCode;
use axum::routing::{get, post};
use axum::{Form, Json, Router};
use hyper::Method;
use once_cell::sync::Lazy;
use reqwest::{StatusCode, Url};
use reqwest::Url;
use serde::{Deserialize, Serialize};
use std::any::type_name;
use std::net::SocketAddr;
use std::ops::{Deref, RangeInclusive};
use std::sync::Arc;
use tokio::net::TcpListener;
use validator::{Validate, ValidateArgs, ValidationError};
#[derive(Clone, Deserialize, Serialize, Validate, Eq, PartialEq)]
#[cfg_attr(feature = "extra_protobuf", derive(prost::Message))]
#[cfg_attr(
feature = "typed_multipart",
derive(axum_typed_multipart::TryFromMultipart)
)]
pub struct Parameters {
#[validate(range(min = 5, max = 10))]
#[cfg_attr(feature = "extra_protobuf", prost(int32, tag = "1"))]
@@ -32,10 +30,6 @@ pub struct Parameters {
#[derive(Clone, Deserialize, Serialize, Validate, Eq, PartialEq)]
#[cfg_attr(feature = "extra_protobuf", derive(prost::Message))]
#[cfg_attr(
feature = "typed_multipart",
derive(axum_typed_multipart::TryFromMultipart)
)]
pub struct ParametersEx {
#[validate(custom(function = "validate_v0", arg = "&'v_a RangeInclusive<i32>"))]
#[cfg_attr(feature = "extra_protobuf", prost(int32, tag = "1"))]
@@ -271,15 +265,14 @@ async fn test_main() -> anyhow::Result<()> {
let router = router.with_state(state);
let server = axum::Server::bind(&SocketAddr::from(([0u8, 0, 0, 0], 0u16)))
.serve(router.into_make_service());
let server_addr = server.local_addr();
let listener = TcpListener::bind(&SocketAddr::from(([0u8, 0, 0, 0], 0u16))).await?;
let server_addr = listener.local_addr()?;
let server = axum::serve(listener, router.into_make_service());
println!("Axum server address: {}.", server_addr);
let (server_guard, close) = tokio::sync::oneshot::channel::<()>();
let server_handle = tokio::spawn(server.with_graceful_shutdown(async move {
let _ = close.await;
}));
tokio::spawn(async move {
let _ = server.await;
});
let server_url = format!("http://{}", server_addr);
let test_executor = TestExecutor::from(Url::parse(&format!("http://{}", server_addr))?);
@@ -299,8 +292,8 @@ async fn test_main() -> anyhow::Result<()> {
.send()
.await?;
assert_eq!(
valid_path_response.status(),
StatusCode::OK,
valid_path_response.status().as_u16(),
StatusCode::OK.as_u16(),
"Valid '{}' test failed.",
path_type_name
);
@@ -311,8 +304,8 @@ async fn test_main() -> anyhow::Result<()> {
.send()
.await?;
assert_eq!(
error_path_response.status(),
StatusCode::BAD_REQUEST,
error_path_response.status().as_u16(),
StatusCode::BAD_REQUEST.as_u16(),
"Error '{}' test failed.",
path_type_name
);
@@ -326,8 +319,8 @@ async fn test_main() -> anyhow::Result<()> {
.send()
.await?;
assert_eq!(
invalid_path_response.status(),
VALIDATION_ERROR_STATUS,
invalid_path_response.status().as_u16(),
VALIDATION_ERROR_STATUS.as_u16(),
"Invalid '{}' test failed.",
path_type_name
);
@@ -372,7 +365,7 @@ async fn test_main() -> anyhow::Result<()> {
#[cfg(feature = "typed_header")]
{
use axum::TypedHeader;
use axum_extra::typed_header::TypedHeader;
// Valid
test_executor
.execute::<TypedHeader<Parameters>>(Method::POST, typed_header::route::TYPED_HEADER)
@@ -476,8 +469,8 @@ async fn test_main() -> anyhow::Result<()> {
.send()
.await?;
assert_eq!(
valid_extra_typed_path_response.status(),
StatusCode::OK,
valid_extra_typed_path_response.status().as_u16(),
StatusCode::OK.as_u16(),
"Valid '{}' test failed.",
extra_typed_path_type_name
);
@@ -488,8 +481,8 @@ async fn test_main() -> anyhow::Result<()> {
.send()
.await?;
assert_eq!(
error_extra_typed_path_response.status(),
StatusCode::BAD_REQUEST,
error_extra_typed_path_response.status().as_u16(),
StatusCode::BAD_REQUEST.as_u16(),
"Error '{}' test failed.",
extra_typed_path_type_name
);
@@ -503,8 +496,8 @@ async fn test_main() -> anyhow::Result<()> {
.send()
.await?;
assert_eq!(
invalid_extra_typed_path_response.status(),
VALIDATION_ERROR_STATUS,
invalid_extra_typed_path_response.status().as_u16(),
VALIDATION_ERROR_STATUS.as_u16(),
"Invalid '{}' test failed.",
extra_typed_path_type_name
);
@@ -583,8 +576,6 @@ async fn test_main() -> anyhow::Result<()> {
.await?;
}
drop(server_guard);
server_handle.await??;
Ok(())
}
@@ -617,8 +608,8 @@ impl TestExecutor {
let valid_builder = self.client.request(method.clone(), url.clone());
let valid_response = T::set_valid_request(valid_builder).send().await?;
assert_eq!(
valid_response.status(),
StatusCode::OK,
valid_response.status().as_u16(),
StatusCode::OK.as_u16(),
"Valid '{}' test failed.",
type_name
);
@@ -626,8 +617,8 @@ impl TestExecutor {
let error_builder = self.client.request(method.clone(), url.clone());
let error_response = T::set_error_request(error_builder).send().await?;
assert_eq!(
error_response.status(),
T::ERROR_STATUS_CODE,
error_response.status().as_u16(),
T::ERROR_STATUS_CODE.as_u16(),
"Error '{}' test failed.",
type_name
);
@@ -635,8 +626,8 @@ impl TestExecutor {
let invalid_builder = self.client.request(method, url);
let invalid_response = T::set_invalid_request(invalid_builder).send().await?;
assert_eq!(
invalid_response.status(),
T::INVALID_STATUS_CODE,
invalid_response.status().as_u16(),
T::INVALID_STATUS_CODE.as_u16(),
"Invalid '{}' test failed.",
type_name
);
@@ -659,8 +650,8 @@ impl TestExecutor {
#[cfg(feature = "into_json")]
pub async fn check_json(type_name: &'static str, response: reqwest::Response) {
assert_eq!(
response.headers()[axum::http::header::CONTENT_TYPE],
axum::http::HeaderValue::from_static(mime::APPLICATION_JSON.as_ref()),
response.headers()[reqwest::header::CONTENT_TYPE],
reqwest::header::HeaderValue::from_static(mime::APPLICATION_JSON.as_ref()),
"'{}' rejection into json test failed",
type_name
);
@@ -754,9 +745,9 @@ mod typed_header {
use super::{validate_again, Parameters};
use super::{validate_again_ex, ParametersEx, ParametersExValidationArguments};
use crate::{Arguments, Valid, ValidEx};
use axum::headers::{Error, Header, HeaderName, HeaderValue};
use axum::http::StatusCode;
use axum::TypedHeader;
use axum_extra::headers::{Error, Header, HeaderName, HeaderValue};
use axum_extra::typed_header::TypedHeader;
pub static AXUM_VALID_PARAMETERS: HeaderName = HeaderName::from_static("axum-valid-parameters");