Rust Axum 测试类

multipart 测试类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
const BOUNDARY: &str = "BOUNDARY";

#[tokio::test]
async fn test_import_proc_def() -> anyhow::Result<()> {
    let bytes = fs::read("./examples/test01.xml").await?;
    let request = Request::builder()
        .header(
            CONTENT_TYPE,
            format!("multipart/form-data; boundary={}", BOUNDARY),
        )
        .body::<Body>(generate_multipart_data("file", &bytes)?.into())
        .unwrap();
    let multipart = Multipart::from_request(request, &State(())).await?;

    let (db, ..) = setup().await?;
    let proc_def_ids = import_proc_def(State(db), multipart).await?;

    info!("{:?}", proc_def_ids);
    Ok(())
}

fn generate_multipart_data(name: &str, bytes: &[u8]) -> anyhow::Result<Vec<u8>> {
    let mut data = Vec::new();
    write!(data, "--{}\r\n", BOUNDARY)?;
    write!(data, "Content-Disposition: form-data; name=\"{}\";\r\n", name)?;
    write!(data, "\r\n")?;
    std::io::Write::write_all(&mut data, bytes)?;
    write!(data, "\r\n")?;

    write!(data, "--{}--\r\n", BOUNDARY)?;
    Ok(data)
}
0%