16
16
import XCTest
17
17
18
18
class S3Tests : XCTestCase {
19
- static let eventBody = """
19
+ static let eventBodyObjectCreated = """
20
20
{
21
21
" Records " : [
22
22
{
@@ -57,8 +57,49 @@ class S3Tests: XCTestCase {
57
57
}
58
58
"""
59
59
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) !
62
103
var event : S3 . Event ?
63
104
XCTAssertNoThrow ( event = try JSONDecoder ( ) . decode ( S3 . Event. self, from: data) )
64
105
@@ -85,4 +126,33 @@ class S3Tests: XCTestCase {
85
126
XCTAssertEqual ( record. s3. object. eTag, " 91a7f2c3ae81bcc6afef83979b463f0e " )
86
127
XCTAssertEqual ( record. s3. object. sequencer, " 005E1C37948E783A6E " )
87
128
}
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
+ }
88
158
}
0 commit comments