1616import XCTest
1717
1818class S3Tests : XCTestCase {
19- static let eventBody = """
19+ static let eventBodyObjectCreated = """
2020 {
2121 " Records " : [
2222 {
@@ -57,8 +57,49 @@ class S3Tests: XCTestCase {
5757 }
5858 """
5959
60- func testSimpleEventFromJSON( ) {
61- let data = S3Tests . eventBody. data ( using: . utf8) !
60+ // A S3 ObjectRemoved:* event does not contain the object size
61+ static let eventBodyObjectRemoved = """
62+ {
63+ " Records " : [
64+ {
65+ " eventVersion " : " 2.1 " ,
66+ " eventSource " : " aws:s3 " ,
67+ " awsRegion " : " eu-central-1 " ,
68+ " eventTime " : " 2020-01-13T09:25:40.621Z " ,
69+ " eventName " : " ObjectRemoved:DeleteMarkerCreated " ,
70+ " userIdentity " :{
71+ " principalId " : " AWS:AAAAAAAJ2MQ4YFQZ7AULJ "
72+ },
73+ " requestParameters " :{
74+ " sourceIPAddress " : " 123.123.123.123 "
75+ },
76+ " responseElements " :{
77+ " x-amz-request-id " : " 01AFA1430E18C358 " ,
78+ " x-amz-id-2 " : " JsbNw6sHGFwgzguQjbYcew//bfAeZITyTYLfjuu1U4QYqCq5CPlSyYLtvWQS+gw0RxcroItGwm8= "
79+ },
80+ " s3 " :{
81+ " s3SchemaVersion " : " 1.0 " ,
82+ " configurationId " : " 98b55bc4-3c0c-4007-b727-c6b77a259dde " ,
83+ " bucket " :{
84+ " name " : " eventsources " ,
85+ " ownerIdentity " :{
86+ " principalId " : " AAAAAAAAAAAAAA "
87+ },
88+ " arn " : " arn:aws:s3:::eventsources "
89+ },
90+ " object " :{
91+ " key " : " Hi.md " ,
92+ " eTag " : " 91a7f2c3ae81bcc6afef83979b463f0e " ,
93+ " sequencer " : " 005E1C37948E783A6E "
94+ }
95+ }
96+ }
97+ ]
98+ }
99+ """
100+
101+ func testObjectCreatedEvent( ) {
102+ let data = S3Tests . eventBodyObjectCreated. data ( using: . utf8) !
62103 var event : S3 . Event ?
63104 XCTAssertNoThrow ( event = try JSONDecoder ( ) . decode ( S3 . Event. self, from: data) )
64105
@@ -85,4 +126,33 @@ class S3Tests: XCTestCase {
85126 XCTAssertEqual ( record. s3. object. eTag, " 91a7f2c3ae81bcc6afef83979b463f0e " )
86127 XCTAssertEqual ( record. s3. object. sequencer, " 005E1C37948E783A6E " )
87128 }
129+
130+ func testObjectRemovedEvent( ) {
131+ let data = S3Tests . eventBodyObjectRemoved. data ( using: . utf8) !
132+ var event : S3 . Event ?
133+ XCTAssertNoThrow ( event = try JSONDecoder ( ) . decode ( S3 . Event. self, from: data) )
134+
135+ guard let record = event? . records. first else {
136+ XCTFail ( " Expected to have one record " )
137+ return
138+ }
139+
140+ XCTAssertEqual ( record. eventVersion, " 2.1 " )
141+ XCTAssertEqual ( record. eventSource, " aws:s3 " )
142+ XCTAssertEqual ( record. awsRegion, . eu_central_1)
143+ XCTAssertEqual ( record. eventName, " ObjectRemoved:DeleteMarkerCreated " )
144+ XCTAssertEqual ( record. eventTime, Date ( timeIntervalSince1970: 1_578_907_540.621 ) )
145+ XCTAssertEqual ( record. userIdentity, S3 . UserIdentity ( principalId: " AWS:AAAAAAAJ2MQ4YFQZ7AULJ " ) )
146+ XCTAssertEqual ( record. requestParameters, S3 . RequestParameters ( sourceIPAddress: " 123.123.123.123 " ) )
147+ XCTAssertEqual ( record. responseElements. count, 2 )
148+ XCTAssertEqual ( record. s3. schemaVersion, " 1.0 " )
149+ XCTAssertEqual ( record. s3. configurationId, " 98b55bc4-3c0c-4007-b727-c6b77a259dde " )
150+ XCTAssertEqual ( record. s3. bucket. name, " eventsources " )
151+ XCTAssertEqual ( record. s3. bucket. ownerIdentity, S3 . UserIdentity ( principalId: " AAAAAAAAAAAAAA " ) )
152+ XCTAssertEqual ( record. s3. bucket. arn, " arn:aws:s3:::eventsources " )
153+ XCTAssertEqual ( record. s3. object. key, " Hi.md " )
154+ XCTAssertNil ( record. s3. object. size)
155+ XCTAssertEqual ( record. s3. object. eTag, " 91a7f2c3ae81bcc6afef83979b463f0e " )
156+ XCTAssertEqual ( record. s3. object. sequencer, " 005E1C37948E783A6E " )
157+ }
88158}
0 commit comments