Close, but far
This commit is contained in:
@@ -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"
|
||||||
+54
-35
@@ -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()
|
|
||||||
|
let request = axum::http::Request::builder()
|
||||||
.method(axum::http::Method::POST)
|
.method(axum::http::Method::POST)
|
||||||
|
.uri(crate::callers::endpoints::QUEUESONG)
|
||||||
.header(
|
.header(
|
||||||
axum::http::header::CONTENT_TYPE,
|
axum::http::header::CONTENT_TYPE,
|
||||||
format!(
|
"multipart/form-data; boundary=boundary",
|
||||||
"multipart/form-data; boundary={}",
|
|
||||||
multipart_body.boundary()
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
.uri(crate::callers::endpoints::QUEUESONG)
|
.body(axum::body::Body::from(raw_string))
|
||||||
.body(axum::body::Body::from(multipart_bytes)),
|
.unwrap();
|
||||||
)
|
// let response = app.clone().oneshot(request).await;
|
||||||
.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()
|
||||||
|
|
||||||
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user