@@ -70,6 +70,38 @@ TEST(AUTH, CannonicalGETRequest) {
7070 EXPECT_TRUE (req.getHeaders ().contains (" Authorization" ));
7171}
7272
73+ TEST (AUTH, CannonicalGETRequestWithoutPayload) {
74+ // create signer & http client
75+ auto signer = AWSSigV4Signer (" minio_access" , " minio_secret" );
76+ HttpClient client {};
77+
78+ // prepare request
79+ const std::string host = " s3.amazonaws.com" ;
80+ const std::string URI = " /amzn-s3-demo-bucket/myphoto.jpg" ;
81+ const std::string URL = std::format (" http://{}{}" , host, URI);
82+ const std::string timestamp = signer.getTimestamp ();
83+ const std::string empty_payload_hash = " e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ;
84+ HttpRequest req = client.get (URL)
85+ .header (" Host" , host)
86+ .header (" X-Amz-Date" , timestamp)
87+ .header (" X-Amz-Content-Sha256" , empty_payload_hash);
88+
89+ const std::string expected_canonical = std::format (" GET\n "
90+ " /amzn-s3-demo-bucket/myphoto.jpg\n "
91+ " \n "
92+ " host:{}\n "
93+ " x-amz-content-sha256:{}\n "
94+ " x-amz-date:{}\n "
95+ " \n "
96+ " host;x-amz-content-sha256;x-amz-date\n "
97+ " {}" ,
98+ host, empty_payload_hash, timestamp, empty_payload_hash);
99+
100+ EXPECT_EQ (signer.createCannonicalRequest (req), expected_canonical);
101+ signer.sign (req);
102+ EXPECT_TRUE (req.getHeaders ().contains (" Authorization" ));
103+ }
104+
73105TEST (AUTH, MinIOBasicRequest) {
74106 // create signer & http client
75107 auto signer = AWSSigV4Signer (" minio_access" , " minio_secret" );
0 commit comments