From 535f7171752363669483fee9305087456b937993 Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Thu, 15 Mar 2018 05:22:18 -0400 Subject: [PATCH] fix(s3Event): Size and MD5 missing in certain event types --- lib/controllers.js | 6 +++--- lib/models/s3-event.js | 4 ++-- test/test.js | 24 ++++++++++++++++++------ 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/lib/controllers.js b/lib/controllers.js index 82668449..af801d2b 100644 --- a/lib/controllers.js +++ b/lib/controllers.js @@ -498,9 +498,9 @@ module.exports = function(rootDirectory, logger, indexDocument, errorDocument) { triggerS3Event(req, res, { bucket: req.params.bucket, eventType: "Put", - S3Item: new S3Object(object.bucket, object.key, { + S3Item: new S3Object(object.bucket, object.key, null, { "content-length": size, - etag: size + etag: JSON.stringify(md5) }) }); res.header("ETag", JSON.stringify(md5)); @@ -592,7 +592,7 @@ module.exports = function(rootDirectory, logger, indexDocument, errorDocument) { req.params.bucket, req.params.key, null, - { etag: md5, "content-length": size } + { etag: JSON.stringify(md5), "content-length": size } ) }); // prettier-ignore diff --git a/lib/models/s3-event.js b/lib/models/s3-event.js index 90f7bce9..6f11c4e5 100644 --- a/lib/models/s3-event.js +++ b/lib/models/s3-event.js @@ -27,13 +27,13 @@ class S3Event { case "Put": eventName = "ObjectCreated:Put"; s3Object.size = eventData.S3Item.size; - s3Object.eTag = eventData.S3Item.etag; + s3Object.eTag = JSON.parse(eventData.S3Item.metadata["etag"]); break; case "Post": eventName = "ObjectCreated:Post"; s3Object.size = eventData.S3Item.size; - s3Object.eTag = eventData.S3Item.etag; + s3Object.eTag = JSON.parse(eventData.S3Item.metadata["etag"]); break; case "Delete": diff --git a/test/test.js b/test/test.js index 15e4f08a..19206038 100644 --- a/test/test.js +++ b/test/test.js @@ -202,18 +202,24 @@ describe("S3rver Tests", function() { it("should trigger a Put event", function*() { const eventPromise = server.s3Event.take(1).toPromise(); + const body = "Hello!"; yield s3Client - .putObject({ Bucket: buckets[0], Key: "testPutKey", Body: "Hello!" }) + .putObject({ Bucket: buckets[0], Key: "testPutKey", Body: body }) .promise(); const event = yield eventPromise; expect(event.Records[0].eventName).to.equal("ObjectCreated:Put"); expect(event.Records[0].s3.bucket.name).to.equal(buckets[0]); - expect(event.Records[0].s3.object.key).to.equal("testPutKey"); + expect(event.Records[0].s3.object).to.contain({ + key: "testPutKey", + size: body.length, + eTag: md5(body) + }); }); it("should trigger a Copy event", function*() { + const body = "Hello!"; yield s3Client - .putObject({ Bucket: buckets[0], Key: "testPut", Body: "Hello!" }) + .putObject({ Bucket: buckets[0], Key: "testPut", Body: body }) .promise(); const eventPromise = server.s3Event.take(1).toPromise(); yield s3Client @@ -226,15 +232,19 @@ describe("S3rver Tests", function() { const event = yield eventPromise; expect(event.Records[0].eventName).to.equal("ObjectCreated:Copy"); expect(event.Records[0].s3.bucket.name).to.equal(buckets[4]); - expect(event.Records[0].s3.object.key).to.equal("testCopy"); + expect(event.Records[0].s3.object).to.contain({ + key: "testCopy", + size: body.length + }); }); it("should trigger a Delete event", function*() { + const body = "Hello!"; yield s3Client .putObject({ Bucket: buckets[0], Key: "testDelete", - Body: "Hello!" + Body: body }) .promise(); const eventPromise = server.s3Event.take(1).toPromise(); @@ -244,7 +254,9 @@ describe("S3rver Tests", function() { const event = yield eventPromise; expect(event.Records[0].eventName).to.equal("ObjectRemoved:Delete"); expect(event.Records[0].s3.bucket.name).to.equal(buckets[0]); - expect(event.Records[0].s3.object.key).to.equal("testDelete"); + expect(event.Records[0].s3.object).to.contain({ + key: "testDelete" + }); }); it("should store a text object with some custom metadata", function*() {