in core/src/raw/http_util/multipart.rs [743:849]
fn test_multipart_mixed_gcs_batch_metadata() -> Result<()> {
let multipart = Multipart::new()
.with_boundary("===============7330845974216740156==")
.part(
MixedPart::new("/storage/v1/b/example-bucket/o/obj1")
.method(Method::PATCH)
.part_header(
"content-id".parse().unwrap(),
"<b29c5de2-0db4-490b-b421-6a51b598bd22+1>".parse().unwrap(),
)
.header(
"content-type".parse().unwrap(),
"application/json".parse().unwrap(),
)
.header(
"accept".parse().unwrap(),
"application/json".parse().unwrap(),
)
.header("content-length".parse().unwrap(), "31".parse().unwrap())
.content(r#"{"metadata": {"type": "tabby"}}"#),
)
.part(
MixedPart::new("/storage/v1/b/example-bucket/o/obj2")
.method(Method::PATCH)
.part_header(
"content-id".parse().unwrap(),
"<b29c5de2-0db4-490b-b421-6a51b598bd22+2>".parse().unwrap(),
)
.header(
"content-type".parse().unwrap(),
"application/json".parse().unwrap(),
)
.header(
"accept".parse().unwrap(),
"application/json".parse().unwrap(),
)
.header("content-length".parse().unwrap(), "32".parse().unwrap())
.content(r#"{"metadata": {"type": "tuxedo"}}"#),
)
.part(
MixedPart::new("/storage/v1/b/example-bucket/o/obj3")
.method(Method::PATCH)
.part_header(
"content-id".parse().unwrap(),
"<b29c5de2-0db4-490b-b421-6a51b598bd22+3>".parse().unwrap(),
)
.header(
"content-type".parse().unwrap(),
"application/json".parse().unwrap(),
)
.header(
"accept".parse().unwrap(),
"application/json".parse().unwrap(),
)
.header("content-length".parse().unwrap(), "32".parse().unwrap())
.content(r#"{"metadata": {"type": "calico"}}"#),
);
let bs = multipart.build();
let expected = r#"--===============7330845974216740156==
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <b29c5de2-0db4-490b-b421-6a51b598bd22+1>
PATCH /storage/v1/b/example-bucket/o/obj1 HTTP/1.1
content-type: application/json
accept: application/json
content-length: 31
{"metadata": {"type": "tabby"}}
--===============7330845974216740156==
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <b29c5de2-0db4-490b-b421-6a51b598bd22+2>
PATCH /storage/v1/b/example-bucket/o/obj2 HTTP/1.1
content-type: application/json
accept: application/json
content-length: 32
{"metadata": {"type": "tuxedo"}}
--===============7330845974216740156==
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <b29c5de2-0db4-490b-b421-6a51b598bd22+3>
PATCH /storage/v1/b/example-bucket/o/obj3 HTTP/1.1
content-type: application/json
accept: application/json
content-length: 32
{"metadata": {"type": "calico"}}
--===============7330845974216740156==--
"#;
assert_eq!(
expected,
// Rust can't represent `\r` in a string literal, so we
// replace `\r\n` with `\n` for comparison
String::from_utf8(bs.to_bytes().to_vec())
.unwrap()
.replace("\r\n", "\n")
);
Ok(())
}