diff --git a/include/miniocpp/response.h b/include/miniocpp/response.h index 436a4c2..93fcda9 100644 --- a/include/miniocpp/response.h +++ b/include/miniocpp/response.h @@ -153,6 +153,10 @@ struct CompleteMultipartUploadResponse : public Response { std::string location; std::string etag; std::string version_id; + std::string checksumCRC32; + std::string checksumCRC32C; + std::string checksumSHA1; + std::string checksumSHA256; CompleteMultipartUploadResponse() = default; diff --git a/src/response.cc b/src/response.cc index d1b724f..387c844 100644 --- a/src/response.cc +++ b/src/response.cc @@ -123,8 +123,7 @@ CompleteMultipartUploadResponse CompleteMultipartUploadResponse::ParseXML( if (!result) { return error::make("unable to parse XML"); } - auto root = xdoc.select_node("/CompleteMultipartUploadOutput"); - + auto root = xdoc.select_node("/CompleteMultipartUploadResult"); pugi::xpath_node text; text = root.node().select_node("Bucket/text()"); @@ -139,6 +138,18 @@ CompleteMultipartUploadResponse CompleteMultipartUploadResponse::ParseXML( text = root.node().select_node("ETag/text()"); resp.etag = utils::Trim(text.node().value(), '"'); + text = root.node().select_node("ChecksumCRC32/text()"); + resp.checksumCRC32 = text.node().value(); + + text = root.node().select_node("ChecksumCRC32/text()"); + resp.checksumCRC32C = text.node().value(); + + text = root.node().select_node("ChecksumSHA1/text()"); + resp.checksumSHA1 = text.node().value(); + + text = root.node().select_node("ChecksumSHA256/text()"); + resp.checksumSHA256 = text.node().value(); + resp.version_id = version_id; return resp; diff --git a/tests/tests.cc b/tests/tests.cc index e06e1b3..427dd62 100644 --- a/tests/tests.cc +++ b/tests/tests.cc @@ -461,9 +461,7 @@ class Tests { std::string object_name = RandObjectName(); std::string data = "PutObject()"; std::stringstream ss(data); - minio::s3::PutObjectArgs args( - ss, static_cast(data.length()), - 0); // PWTODO: PutObjectArgs should accept size_t instead of long + minio::s3::PutObjectArgs args(ss, data.length(), 0); args.bucket = bucket_name_; args.object = object_name; minio::s3::PutObjectResponse resp = client_.PutObject(args); @@ -475,9 +473,9 @@ class Tests { { std::string object_name = RandObjectName(); - size_t size = 13930573; + size_t size = 67108865; // (64MiB + 1) bytes RandCharStream stream(size); - minio::s3::PutObjectArgs args(stream, static_cast(size), 0); + minio::s3::PutObjectArgs args(stream, size, 0); args.bucket = bucket_name_; args.object = object_name; minio::s3::PutObjectResponse resp = client_.PutObject(args); @@ -485,6 +483,9 @@ class Tests { throw std::runtime_error(" PutObject(): " + resp.Error().String()); } + if (resp.etag == "") { + throw std::runtime_error(" PutObject(): etag is missing"); + } RemoveObject(bucket_name_, object_name); } }