Close, but far

This commit is contained in:
phoenix
2025-04-21 21:57:29 -04:00
parent 6859f2d2a3
commit 6350094030
2 changed files with 61 additions and 39 deletions
+3
View File
@@ -24,6 +24,9 @@ icarus_meta = { git = "ssh://git@git.kundeng.us/phoenix/icarus_meta.git", tag =
icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.4.3" } icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.4.3" }
[dev-dependencies] [dev-dependencies]
http-body-util = { version = "0.1.3" }
url = { version = "2.5.4" } url = { version = "2.5.4" }
reqwest = { version = "0.12.15", features = ["stream", "multipart"] } reqwest = { version = "0.12.15", features = ["stream", "multipart"] }
axum-test = { version = "17.3.0" } axum-test = { version = "17.3.0" }
hyper = { version = "1.6.0" }
base64 = "0.22.1"
+57 -38
View File
@@ -114,8 +114,33 @@ pub async fn root() -> &'static str {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::os::macos::raw;
use crate::db; use crate::db;
use tower::ServiceExt;
use std::time::Duration;
use tower_http::timeout::TimeoutLayer;
use base64::Engine;
mod util {
use axum::body::Bytes;
use axum_test::multipart::MultipartForm;
use axum_test::multipart::Part;
use mime::Mime;
use std::str::FromStr;
use std::usize;
pub async fn multipart_form_to_bytes(multipart_form: MultipartForm) -> Bytes {
// let boundary = "my-boundary"; // You should generate a unique boundary
// let mut buffer = Vec::new();
let body = multipart_form.into();
let bytes = axum::body::to_bytes(body, usize::MAX).await;
bytes.unwrap()
}
}
// Might need later // Might need later
// use tower::ServiceExt; // use tower::ServiceExt;
@@ -220,51 +245,45 @@ mod tests {
.file_name(&"track01.flac") .file_name(&"track01.flac")
.mime_type(&"audio/flac"); .mime_type(&"audio/flac");
let _multipart_form = let multipart_form =
axum_test::multipart::MultipartForm::new().add_part("file", file_part); axum_test::multipart::MultipartForm::new().add_part("file", file_part);
let bytes = util::multipart_form_to_bytes(multipart_form).await;
let app = crate::init::routes().await.layer(axum::Extension(pool)); let app = crate::init::routes().await.layer(axum::Extension(pool))
let server = axum_test::TestServer::new(app); .layer(axum::extract::DefaultBodyLimit::max(1024 * 1024 * 1024))
match server { .layer(TimeoutLayer::new(Duration::from_secs(300)));
Ok(_ser) => {}
Err(err) => {
assert!(false, "Error: {:?}", err);
}
}
match reqwest::multipart::Form::new().file("file", path).await {
Ok(_form) => {
let mut builder = axum::http::Request::builder();
builder = builder.method(axum::http::Method::POST);
builder = builder.uri(crate::callers::endpoints::QUEUESONG);
}
Err(err) => {
assert!(false, "Error: {:?}", err);
}
}
// TODO: Add code to send request with multipart form data. Add a few flac files in the // TODO: Add code to send request with multipart form data. Add a few flac files in the
// tests directory // tests directory
let base64_str = base64::engine::general_purpose::STANDARD.encode(&bytes);
let raw_string = format!(
r#"--boundary
Content-Disposition:form-data;name="track01.flac";filename="track01.flac"
Content-Type:audio/flac
/* {}
let response = app --boundary--
.clone() "#, base64_str
.oneshot( );
axum::http::Request::builder()
.method(axum::http::Method::POST) let request = axum::http::Request::builder()
.header( .method(axum::http::Method::POST)
axum::http::header::CONTENT_TYPE, .uri(crate::callers::endpoints::QUEUESONG)
format!( .header(
"multipart/form-data; boundary={}", axum::http::header::CONTENT_TYPE,
multipart_body.boundary() "multipart/form-data; boundary=boundary",
),
)
.uri(crate::callers::endpoints::QUEUESONG)
.body(axum::body::Body::from(multipart_bytes)),
) )
.await; .body(axum::body::Body::from(raw_string))
*/ .unwrap();
// let response = app.clone().oneshot(request).await;
let _ = db_mgr::drop_database(&tm_pool, &db_name).await; let _ = db_mgr::drop_database(&tm_pool, &db_name).await;
} }
} }
/*
axum::http::header::CONTENT_TYPE,
format!(
"multipart/form-data; boundary={}",
multipart_body.boundary()
*/