@@ -338,6 +338,118 @@ public void testPutObjectIfMatchMissingKeyFail() {
338338 b -> b .bucket (bucketName ).key (keyName )));
339339 }
340340
341+ @ Test
342+ public void testGetObjectIfMatch () {
343+ final String bucketName = getBucketName ();
344+ final String keyName = getKeyName ();
345+ final String content = "bar" ;
346+ s3Client .createBucket (b -> b .bucket (bucketName ));
347+
348+ PutObjectResponse initialResponse = s3Client .putObject (
349+ b -> b .bucket (bucketName ).key (keyName ),
350+ RequestBody .fromString (content ));
351+
352+ ResponseBytes <GetObjectResponse > response = s3Client .getObjectAsBytes (
353+ b -> b .bucket (bucketName ).key (keyName ).ifMatch (initialResponse .eTag ()));
354+
355+ assertEquals (content , response .asUtf8String ());
356+ }
357+
358+ @ Test
359+ public void testGetObjectIfMatchFail () {
360+ final String bucketName = getBucketName ();
361+ final String keyName = getKeyName ();
362+ final String content = "bar" ;
363+ s3Client .createBucket (b -> b .bucket (bucketName ));
364+ s3Client .putObject (b -> b .bucket (bucketName ).key (keyName ),
365+ RequestBody .fromString (content ));
366+
367+ S3Exception exception = assertThrows (S3Exception .class ,
368+ () -> s3Client .getObjectAsBytes (
369+ b -> b .bucket (bucketName ).key (keyName ).ifMatch ("wrong-etag" )));
370+
371+ assertEquals (412 , exception .statusCode ());
372+ assertEquals ("PreconditionFailed" , exception .awsErrorDetails ().errorCode ());
373+ }
374+
375+ @ Test
376+ public void testGetObjectIfNoneMatchReturnsNotModified () {
377+ final String bucketName = getBucketName ();
378+ final String keyName = getKeyName ();
379+ final String content = "bar" ;
380+ s3Client .createBucket (b -> b .bucket (bucketName ));
381+
382+ PutObjectResponse initialResponse = s3Client .putObject (
383+ b -> b .bucket (bucketName ).key (keyName ),
384+ RequestBody .fromString (content ));
385+
386+ S3Exception exception = assertThrows (S3Exception .class ,
387+ () -> s3Client .getObjectAsBytes (
388+ b -> b .bucket (bucketName ).key (keyName )
389+ .ifNoneMatch (initialResponse .eTag ())));
390+
391+ assertEquals (304 , exception .statusCode ());
392+ }
393+
394+ @ Test
395+ public void testGetObjectIfModifiedSinceReturnsNotModified () {
396+ final String bucketName = getBucketName ();
397+ final String keyName = getKeyName ();
398+ final String content = "bar" ;
399+ s3Client .createBucket (b -> b .bucket (bucketName ));
400+ s3Client .putObject (b -> b .bucket (bucketName ).key (keyName ),
401+ RequestBody .fromString (content ));
402+
403+ HeadObjectResponse headObjectResponse = s3Client .headObject (
404+ b -> b .bucket (bucketName ).key (keyName ));
405+
406+ S3Exception exception = assertThrows (S3Exception .class ,
407+ () -> s3Client .getObjectAsBytes (
408+ b -> b .bucket (bucketName ).key (keyName )
409+ .ifModifiedSince (headObjectResponse .lastModified ()
410+ .plusSeconds (60 ))));
411+
412+ assertEquals (304 , exception .statusCode ());
413+ }
414+
415+ @ Test
416+ public void testHeadObjectIfMatch () {
417+ final String bucketName = getBucketName ();
418+ final String keyName = getKeyName ();
419+ final String content = "bar" ;
420+ s3Client .createBucket (b -> b .bucket (bucketName ));
421+
422+ PutObjectResponse initialResponse = s3Client .putObject (
423+ b -> b .bucket (bucketName ).key (keyName ),
424+ RequestBody .fromString (content ));
425+
426+ HeadObjectResponse response = s3Client .headObject (
427+ b -> b .bucket (bucketName ).key (keyName ).ifMatch (initialResponse .eTag ()));
428+
429+ assertEquals (Long .valueOf (content .length ()), response .contentLength ());
430+ }
431+
432+ @ Test
433+ public void testHeadObjectIfUnmodifiedSinceFail () {
434+ final String bucketName = getBucketName ();
435+ final String keyName = getKeyName ();
436+ final String content = "bar" ;
437+ s3Client .createBucket (b -> b .bucket (bucketName ));
438+ s3Client .putObject (b -> b .bucket (bucketName ).key (keyName ),
439+ RequestBody .fromString (content ));
440+
441+ HeadObjectResponse headObjectResponse = s3Client .headObject (
442+ b -> b .bucket (bucketName ).key (keyName ));
443+
444+ S3Exception exception = assertThrows (S3Exception .class ,
445+ () -> s3Client .headObject (
446+ b -> b .bucket (bucketName ).key (keyName )
447+ .ifUnmodifiedSince (headObjectResponse .lastModified ()
448+ .minusSeconds (60 ))));
449+
450+ assertEquals (412 , exception .statusCode ());
451+ }
452+
341453 @ Test
342454 public void testPutObjectEmpty () throws Exception {
343455 final String bucketName = getBucketName ();
0 commit comments