use std::collections::HashMap; use crate::common; use common::custom_requester::BodySignature; use hyper::Method; const STD_KEY: &str = "hello-world"; //const CTRL_KEY: &str = "\x00\x01\x02\x00"; const BODY: &[u8; 62] = b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; #[tokio::test] async fn test_putobject_streaming() { let ctx = common::context(); let bucket = ctx.create_bucket("putobject-streaming"); { // Send an empty object (can serve as a directory marker) // with a content type let etag = "\"d41d8cd98f00b204e9800998ecf8427e\""; let content_type = "text/csv"; let mut headers = HashMap::new(); headers.insert("content-type".to_owned(), content_type.to_owned()); let _ = ctx .custom_request .builder(bucket.clone()) .method(Method::PUT) .path(STD_KEY.to_owned()) .unsigned_headers(headers) .vhost_style(true) .body(vec![]) .body_signature(BodySignature::Streaming(10)) .send() .await .unwrap(); // assert_eq!(r.e_tag.unwrap().as_str(), etag); // We return a version ID here // We should check if Amazon is returning one when versioning is not enabled // assert!(r.version_id.is_some()); //let _version = r.version_id.unwrap(); let o = ctx .client .get_object() .bucket(&bucket) .key(STD_KEY) .send() .await .unwrap(); assert_bytes_eq!(o.body, b""); assert_eq!(o.e_tag.unwrap(), etag); // We do not return version ID // We should check if Amazon is returning one when versioning is not enabled // assert_eq!(o.version_id.unwrap(), _version); assert_eq!(o.content_type.unwrap(), content_type); assert!(o.last_modified.is_some()); assert_eq!(o.content_length, 0); assert_eq!(o.parts_count, 0); assert_eq!(o.tag_count, 0); } { let etag = "\"46cf18a9b447991b450cad3facf5937e\""; let _ = ctx .custom_request .builder(bucket.clone()) .method(Method::PUT) //.path(CTRL_KEY.to_owned()) at the moment custom_request does not encode url so this //fail .path("abc".to_owned()) .vhost_style(true) .body(BODY.to_vec()) .body_signature(BodySignature::Streaming(16)) .send() .await .unwrap(); // assert_eq!(r.e_tag.unwrap().as_str(), etag); // assert!(r.version_id.is_some()); let o = ctx .client .get_object() .bucket(&bucket) //.key(CTRL_KEY) .key("abc") .send() .await .unwrap(); assert_bytes_eq!(o.body, BODY); assert_eq!(o.e_tag.unwrap(), etag); assert!(o.last_modified.is_some()); assert_eq!(o.content_length, 62); assert_eq!(o.parts_count, 0); assert_eq!(o.tag_count, 0); } }