in core/src/raw/http_util/multipart.rs [954:1136]
fn test_multipart_mixed_gcs_batch_metadata_response() {
let response = r#"--batch_pK7JBAk73-E=_AA5eFwv4m2Q=
Content-Type: application/http
Content-ID: <response-b29c5de2-0db4-490b-b421-6a51b598bd22+1>
HTTP/1.1 200 OK
ETag: "lGaP-E0memYDumK16YuUDM_6Gf0/V43j6azD55CPRGb9b6uytDYl61Y"
Content-Type: application/json; charset=UTF-8
Date: Mon, 22 Jan 2018 18:56:00 GMT
Expires: Mon, 22 Jan 2018 18:56:00 GMT
Cache-Control: private, max-age=0
Content-Length: 846
{"kind": "storage#object","id": "example-bucket/obj1/1495822576643790","metadata": {"type": "tabby"}}
--batch_pK7JBAk73-E=_AA5eFwv4m2Q=
Content-Type: application/http
Content-ID: <response-b29c5de2-0db4-490b-b421-6a51b598bd22+2>
HTTP/1.1 200 OK
ETag: "lGaP-E0memYDumK16YuUDM_6Gf0/91POdd-sxSAkJnS8Dm7wMxBSDKk"
Content-Type: application/json; charset=UTF-8
Date: Mon, 22 Jan 2018 18:56:00 GMT
Expires: Mon, 22 Jan 2018 18:56:00 GMT
Cache-Control: private, max-age=0
Content-Length: 846
{"kind": "storage#object","id": "example-bucket/obj2/1495822576643790","metadata": {"type": "tuxedo"}}
--batch_pK7JBAk73-E=_AA5eFwv4m2Q=
Content-Type: application/http
Content-ID: <response-b29c5de2-0db4-490b-b421-6a51b598bd22+3>
HTTP/1.1 200 OK
ETag: "lGaP-E0memYDumK16YuUDM_6Gf0/d2Z1F1_ZVbB1dC0YKM9rX5VAgIQ"
Content-Type: application/json; charset=UTF-8
Date: Mon, 22 Jan 2018 18:56:00 GMT
Expires: Mon, 22 Jan 2018 18:56:00 GMT
Cache-Control: private, max-age=0
Content-Length: 846
{"kind": "storage#object","id": "example-bucket/obj3/1495822576643790","metadata": {"type": "calico"}}
--batch_pK7JBAk73-E=_AA5eFwv4m2Q=--"#.replace('\n', "\r\n");
let multipart: Multipart<MixedPart> = Multipart::new()
.with_boundary("batch_pK7JBAk73-E=_AA5eFwv4m2Q=")
.parse(Bytes::from(response))
.unwrap();
let part0_bs = Bytes::from_static(
r#"{"kind": "storage#object","id": "example-bucket/obj1/1495822576643790","metadata": {"type": "tabby"}}"#.as_bytes());
let part1_bs = Bytes::from_static(
r#"{"kind": "storage#object","id": "example-bucket/obj2/1495822576643790","metadata": {"type": "tuxedo"}}"#
.as_bytes()
);
let part2_bs = Bytes::from_static(
r#"{"kind": "storage#object","id": "example-bucket/obj3/1495822576643790","metadata": {"type": "calico"}}"#
.as_bytes()
);
assert_eq!(multipart.parts.len(), 3);
assert_eq!(multipart.parts[0].part_headers, {
let mut h = HeaderMap::new();
h.insert("Content-Type", "application/http".parse().unwrap());
h.insert(
"Content-ID",
"<response-b29c5de2-0db4-490b-b421-6a51b598bd22+1>"
.parse()
.unwrap(),
);
h
});
assert_eq!(multipart.parts[0].version, Version::HTTP_11);
assert_eq!(multipart.parts[0].headers, {
let mut h = HeaderMap::new();
h.insert(
"ETag",
"\"lGaP-E0memYDumK16YuUDM_6Gf0/V43j6azD55CPRGb9b6uytDYl61Y\""
.parse()
.unwrap(),
);
h.insert(
"Content-Type",
"application/json; charset=UTF-8".parse().unwrap(),
);
h.insert("Date", "Mon, 22 Jan 2018 18:56:00 GMT".parse().unwrap());
h.insert("Expires", "Mon, 22 Jan 2018 18:56:00 GMT".parse().unwrap());
h.insert("Cache-Control", "private, max-age=0".parse().unwrap());
h.insert("Content-Length", "846".parse().unwrap());
h
});
assert_eq!(multipart.parts[0].content.len(), part0_bs.len());
assert_eq!(multipart.parts[0].uri, None);
assert_eq!(multipart.parts[0].method, None);
assert_eq!(
multipart.parts[0].status_code,
Some(StatusCode::from_u16(200).unwrap())
);
assert_eq!(multipart.parts[1].part_headers, {
let mut h = HeaderMap::new();
h.insert("Content-Type", "application/http".parse().unwrap());
h.insert(
"Content-ID",
"<response-b29c5de2-0db4-490b-b421-6a51b598bd22+2>"
.parse()
.unwrap(),
);
h
});
assert_eq!(multipart.parts[1].version, Version::HTTP_11);
assert_eq!(multipart.parts[1].headers, {
let mut h = HeaderMap::new();
h.insert(
"ETag",
"\"lGaP-E0memYDumK16YuUDM_6Gf0/91POdd-sxSAkJnS8Dm7wMxBSDKk\""
.parse()
.unwrap(),
);
h.insert(
"Content-Type",
"application/json; charset=UTF-8".parse().unwrap(),
);
h.insert("Date", "Mon, 22 Jan 2018 18:56:00 GMT".parse().unwrap());
h.insert("Expires", "Mon, 22 Jan 2018 18:56:00 GMT".parse().unwrap());
h.insert("Cache-Control", "private, max-age=0".parse().unwrap());
h.insert("Content-Length", "846".parse().unwrap());
h
});
assert_eq!(multipart.parts[1].content.len(), part1_bs.len());
assert_eq!(multipart.parts[1].uri, None);
assert_eq!(multipart.parts[1].method, None);
assert_eq!(
multipart.parts[1].status_code,
Some(StatusCode::from_u16(200).unwrap())
);
assert_eq!(multipart.parts[2].part_headers, {
let mut h = HeaderMap::new();
h.insert("Content-Type", "application/http".parse().unwrap());
h.insert(
"Content-ID",
"<response-b29c5de2-0db4-490b-b421-6a51b598bd22+3>"
.parse()
.unwrap(),
);
h
});
assert_eq!(multipart.parts[2].version, Version::HTTP_11);
assert_eq!(multipart.parts[2].headers, {
let mut h = HeaderMap::new();
h.insert(
"ETag",
"\"lGaP-E0memYDumK16YuUDM_6Gf0/d2Z1F1_ZVbB1dC0YKM9rX5VAgIQ\""
.parse()
.unwrap(),
);
h.insert(
"Content-Type",
"application/json; charset=UTF-8".parse().unwrap(),
);
h.insert("Date", "Mon, 22 Jan 2018 18:56:00 GMT".parse().unwrap());
h.insert("Expires", "Mon, 22 Jan 2018 18:56:00 GMT".parse().unwrap());
h.insert("Cache-Control", "private, max-age=0".parse().unwrap());
h.insert("Content-Length", "846".parse().unwrap());
h
});
assert_eq!(multipart.parts[2].content.len(), part2_bs.len());
assert_eq!(multipart.parts[2].uri, None);
assert_eq!(multipart.parts[2].method, None);
assert_eq!(
multipart.parts[2].status_code,
Some(StatusCode::from_u16(200).unwrap())
);
}