|
18 | 18 | import static org.assertj.core.api.Assertions.assertThat;
|
19 | 19 | import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
20 | 20 |
|
| 21 | +import java.io.ByteArrayInputStream; |
21 | 22 | import java.time.Instant;
|
22 | 23 | import java.util.Arrays;
|
23 | 24 | import java.util.Collections;
|
@@ -454,4 +455,128 @@ void malformedJson_throwsException() {
|
454 | 455 | String json = "{\"Records\":[], \"toto\"}";
|
455 | 456 | assertThatThrownBy(() -> S3EventNotification.fromJson(json)).hasCauseInstanceOf(JsonParseException.class);
|
456 | 457 | }
|
| 458 | + |
| 459 | + @Test |
| 460 | + void fromJsonInputStream_handlesCorrectly() { |
| 461 | + String eventJson = "{ " |
| 462 | + + " \"Records\":[ " |
| 463 | + + " { " |
| 464 | + + " \"eventVersion\":\"2.1\"," |
| 465 | + + " \"eventSource\":\"aws:s3\"," |
| 466 | + + " \"awsRegion\":\"us-west-2\"," |
| 467 | + + " \"eventTime\":\"1970-01-01T00:00:00.000Z\"," |
| 468 | + + " \"eventName\":\"ObjectCreated:Put\"," |
| 469 | + + " \"userIdentity\":{ " |
| 470 | + + " \"principalId\":\"AIDAJDPLRKLG7UEXAMPLE\"" |
| 471 | + + " }," |
| 472 | + + " \"requestParameters\":{ " |
| 473 | + + " \"sourceIPAddress\":\"127.0.0.1\"" |
| 474 | + + " }," |
| 475 | + + " \"responseElements\":{ " |
| 476 | + + " \"x-amz-request-id\":\"C3D13FE58DE4C810\"," |
| 477 | + + " \"x-amz-id-2\":\"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD\"" |
| 478 | + + " }," |
| 479 | + + " \"s3\":{ " |
| 480 | + + " \"s3SchemaVersion\":\"1.0\"," |
| 481 | + + " \"configurationId\":\"testConfigRule\"," |
| 482 | + + " \"bucket\":{ " |
| 483 | + + " \"name\":\"mybucket\"," |
| 484 | + + " \"ownerIdentity\":{ " |
| 485 | + + " \"principalId\":\"A3NL1KOZZKExample\"" |
| 486 | + + " }," |
| 487 | + + " \"arn\":\"arn:aws:s3:::mybucket\"" |
| 488 | + + " }," |
| 489 | + + " \"object\":{ " |
| 490 | + + " \"key\":\"HappyFace.jpg\"," |
| 491 | + + " \"size\":1024," |
| 492 | + + " \"eTag\":\"d41d8cd98f00b204e9800998ecf8427e\"," |
| 493 | + + " \"versionId\":\"096fKKXTRTtl3on89fVO.nfljtsv6qko\"," |
| 494 | + + " \"sequencer\":\"0055AED6DCD90281E5\"" |
| 495 | + + " }" |
| 496 | + + " }" |
| 497 | + + " }" |
| 498 | + + " ]" |
| 499 | + + "}"; |
| 500 | + |
| 501 | + S3EventNotification event = S3EventNotification.fromJson(new ByteArrayInputStream(eventJson.getBytes())); |
| 502 | + |
| 503 | + assertThat(event.getRecords()).hasSize(1); |
| 504 | + |
| 505 | + // verify constructors |
| 506 | + S3EventNotification expected = new S3EventNotification( |
| 507 | + Collections.singletonList(new S3EventNotificationRecord( |
| 508 | + "us-west-2", |
| 509 | + "ObjectCreated:Put", |
| 510 | + "aws:s3", |
| 511 | + "1970-01-01T00:00:00.000Z", |
| 512 | + "2.1", |
| 513 | + new RequestParameters("127.0.0.1"), |
| 514 | + new ResponseElements( |
| 515 | + "FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD", "C3D13FE58DE4C810"), |
| 516 | + new S3( |
| 517 | + "testConfigRule", |
| 518 | + new S3Bucket( |
| 519 | + "mybucket", |
| 520 | + new UserIdentity("A3NL1KOZZKExample"), |
| 521 | + "arn:aws:s3:::mybucket"), |
| 522 | + new S3Object( |
| 523 | + "HappyFace.jpg", |
| 524 | + 1024L, |
| 525 | + "d41d8cd98f00b204e9800998ecf8427e", |
| 526 | + "096fKKXTRTtl3on89fVO.nfljtsv6qko", |
| 527 | + "0055AED6DCD90281E5"), |
| 528 | + "1.0" |
| 529 | + ), |
| 530 | + new UserIdentity("AIDAJDPLRKLG7UEXAMPLE") |
| 531 | + )) |
| 532 | + ); |
| 533 | + assertThat(event).isEqualTo(expected); |
| 534 | + |
| 535 | + // verify getters |
| 536 | + S3EventNotificationRecord rec = event.getRecords().get(0); |
| 537 | + assertThat(rec).isNotNull(); |
| 538 | + assertThat(rec.getAwsRegion()).isEqualTo("us-west-2"); |
| 539 | + assertThat(rec.getEventName()).isEqualTo("ObjectCreated:Put"); |
| 540 | + assertThat(rec.getEventTime()).isEqualTo(Instant.parse("1970-01-01T00:00:00.000Z")); |
| 541 | + assertThat(rec.getEventVersion()).isEqualTo("2.1"); |
| 542 | + |
| 543 | + UserIdentity userIdentity = rec.getUserIdentity(); |
| 544 | + assertThat(userIdentity).isNotNull(); |
| 545 | + assertThat(userIdentity.getPrincipalId()).isEqualTo("AIDAJDPLRKLG7UEXAMPLE"); |
| 546 | + |
| 547 | + RequestParameters requestParameters = rec.getRequestParameters(); |
| 548 | + assertThat(requestParameters).isNotNull(); |
| 549 | + assertThat(requestParameters.getSourceIpAddress()).isEqualTo("127.0.0.1"); |
| 550 | + |
| 551 | + ResponseElements responseElements = rec.getResponseElements(); |
| 552 | + assertThat(responseElements).isNotNull(); |
| 553 | + assertThat(responseElements.getXAmzRequestId()).isEqualTo("C3D13FE58DE4C810"); |
| 554 | + assertThat(responseElements.getXAmzId2()) |
| 555 | + .isEqualTo("FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"); |
| 556 | + |
| 557 | + S3 s3 = rec.getS3(); |
| 558 | + assertThat(s3).isNotNull(); |
| 559 | + assertThat(s3.getS3SchemaVersion()).isEqualTo("1.0"); |
| 560 | + assertThat(s3.getConfigurationId()).isEqualTo("testConfigRule"); |
| 561 | + S3Bucket s3Bucket = s3.getBucket(); |
| 562 | + assertThat(s3Bucket).isNotNull(); |
| 563 | + assertThat(s3Bucket.getName()).isEqualTo("mybucket"); |
| 564 | + assertThat(s3Bucket.getArn()).isEqualTo("arn:aws:s3:::mybucket"); |
| 565 | + UserIdentity ownerIdentity = s3Bucket.getOwnerIdentity(); |
| 566 | + assertThat(ownerIdentity).isNotNull(); |
| 567 | + assertThat(ownerIdentity.getPrincipalId()).isEqualTo("A3NL1KOZZKExample"); |
| 568 | + S3Object s3Object = s3.getObject(); |
| 569 | + assertThat(s3Object).isNotNull(); |
| 570 | + assertThat(s3Object.getKey()).isEqualTo("HappyFace.jpg"); |
| 571 | + assertThat(s3Object.getETag()).isEqualTo("d41d8cd98f00b204e9800998ecf8427e"); |
| 572 | + assertThat(s3Object.getSizeAsLong()).isEqualTo(1024L); |
| 573 | + assertThat(s3Object.getVersionId()).isEqualTo("096fKKXTRTtl3on89fVO.nfljtsv6qko"); |
| 574 | + assertThat(s3Object.getSequencer()).isEqualTo("0055AED6DCD90281E5"); |
| 575 | + |
| 576 | + assertThat(rec.getGlacierEventData()).isNull(); |
| 577 | + assertThat(rec.getIntelligentTieringEventData()).isNull(); |
| 578 | + assertThat(rec.getLifecycleEventData()).isNull(); |
| 579 | + assertThat(rec.getReplicationEventData()).isNull(); |
| 580 | + |
| 581 | + } |
457 | 582 | }
|
0 commit comments