Skip to content

Commit 794f163

Browse files
authored
Fixed an issue in vfsevents where the S3 event names were being evaluated incorrectly (#300)
* Fixed an issue in vfsevents where the S3 event names were being evaluated incorrectly * Added entry in changelog * Updated the right changelog this time.
1 parent f7a03c4 commit 794f163

File tree

3 files changed

+42
-39
lines changed

3 files changed

+42
-39
lines changed

contrib/vfsevents/CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

77
## [Unreleased]
8+
### Fixed
9+
- Updated logic to correctly evaluate the S3 event name to determine the event type
810

911
## [contrib/vfsevents/v1.1.0] - 2025-10-07
1012
### Security
1113
- Updated to go 1.24.7
1214
- Updated dependcies
1315
### Fixed
14-
- Fixed lint issues where t.Context() shoudl be used and pubsub v1 is deprecated, so updated.
16+
- Fixed lint issues where t.Context() should be used and pubsub v1 is deprecated, so updated.
1517

1618
## [contrib/vfsevents/v1.0.2] - 2025-09-16
1719
### Fixed

contrib/vfsevents/watchers/s3events/s3events.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -333,28 +333,28 @@ func (w *S3Watcher) processMessage(
333333
// mapS3EventType maps an S3 event name to a vfsevents.EventType with semantic accuracy
334334
func (w *S3Watcher) mapS3EventType(eventName string) vfsevents.EventType {
335335
switch eventName {
336-
case "s3:ObjectCreated:Put", "s3:ObjectCreated:Post":
336+
case "ObjectCreated:Put", "ObjectCreated:Post":
337337
// Direct uploads are typically new file creations
338338
return vfsevents.EventCreated
339-
case "s3:ObjectCreated:Copy":
339+
case "ObjectCreated:Copy":
340340
// Copy operations are more likely to be overwrites or modifications
341341
return vfsevents.EventModified
342-
case "s3:ObjectCreated:CompleteMultipartUpload":
342+
case "ObjectCreated:CompleteMultipartUpload":
343343
// Large uploads could be either, but often represent significant changes
344344
return vfsevents.EventModified
345-
case "s3:ObjectCreated:*":
345+
case "ObjectCreated:*":
346346
// Wildcard - default to created for broad compatibility
347347
return vfsevents.EventCreated
348-
case "s3:ObjectRestore:Post":
348+
case "ObjectRestore:Post":
349349
// Restore initiation - modification-like operation
350350
return vfsevents.EventModified
351-
case "s3:ObjectRestore:Completed":
351+
case "ObjectRestore:Completed":
352352
// Restore completion - object is now available (modification)
353353
return vfsevents.EventModified
354-
case "s3:ObjectRestore:Delete":
354+
case "ObjectRestore:Delete":
355355
// Temporary restored copy expires - deletion
356356
return vfsevents.EventDeleted
357-
case "s3:ObjectRemoved:*", "s3:ObjectRemoved:Delete", "s3:ObjectRemoved:DeleteMarkerCreated":
357+
case "ObjectRemoved:*", "ObjectRemoved:Delete", "ObjectRemoved:DeleteMarkerCreated":
358358
return vfsevents.EventDeleted
359359
default:
360360
return vfsevents.EventUnknown

contrib/vfsevents/watchers/s3events/s3events_test.go

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ type S3WatcherTestSuite struct {
2929
}
3030

3131
func (s *S3WatcherTestSuite) SetupTest() {
32+
s.sqsClient = mocks.NewSqsClient(s.T())
3233
s.sqsClient = mocks.NewSqsClient(s.T())
3334
s.watcher, _ = NewS3Watcher("https://sqs.us-east-1.amazonaws.com/123456789012/my-queue", WithSqsClient(s.sqsClient))
3435
}
@@ -109,7 +110,7 @@ func (s *S3WatcherTestSuite) TestPoll() {
109110
Records: []S3Record{
110111
{
111112
EventTime: time.Now().Format(time.RFC3339Nano),
112-
EventName: "s3:ObjectCreated:Put",
113+
EventName: "ObjectCreated:Put",
113114
S3: S3Entity{
114115
Bucket: S3Bucket{
115116
Name: "bucket-name",
@@ -152,7 +153,7 @@ func (s *S3WatcherTestSuite) TestPoll() {
152153
Records: []S3Record{
153154
{
154155
EventTime: time.Now().Format(time.RFC3339Nano),
155-
EventName: "s3:ObjectRemoved:Delete",
156+
EventName: "ObjectRemoved:Delete",
156157
S3: S3Entity{
157158
Bucket: S3Bucket{
158159
Name: "bucket-name",
@@ -195,7 +196,7 @@ func (s *S3WatcherTestSuite) TestPoll() {
195196
Records: []S3Record{
196197
{
197198
EventTime: time.Now().Format(time.RFC3339Nano),
198-
EventName: "s3:ObjectAccessed:Get",
199+
EventName: "ObjectAccessed:Get",
199200
S3: S3Entity{
200201
Bucket: S3Bucket{
201202
Name: "bucket-name",
@@ -238,7 +239,7 @@ func (s *S3WatcherTestSuite) TestPoll() {
238239
Records: []S3Record{
239240
{
240241
EventTime: time.Now().Format(time.RFC3339Nano),
241-
EventName: "s3:ObjectCreated:Put",
242+
EventName: "ObjectCreated:Put",
242243
S3: S3Entity{
243244
Bucket: S3Bucket{
244245
Name: "bucket-name",
@@ -329,7 +330,7 @@ func (s *S3WatcherTestSuite) TestPollWithRetry() {
329330
s3Event := S3Event{
330331
Records: []S3Record{
331332
{
332-
EventName: "s3:ObjectCreated:Put",
333+
EventName: "ObjectCreated:Put",
333334
S3: S3Entity{
334335
Bucket: S3Bucket{Name: "test-bucket"},
335336
Object: S3Object{Key: "test-object"},
@@ -533,7 +534,7 @@ func (s *S3WatcherTestSuite) TestWithReceivedCount() {
533534
Records: []S3Record{
534535
{
535536
EventTime: time.Now().Format(time.RFC3339Nano),
536-
EventName: "s3:ObjectCreated:Put",
537+
EventName: "ObjectCreated:Put",
537538
S3: S3Entity{
538539
Bucket: S3Bucket{Name: "test-bucket"},
539540
Object: S3Object{Key: "test-object"},
@@ -605,7 +606,7 @@ func (s *S3WatcherTestSuite) TestWithReceivedCountNoAttributes() {
605606
Records: []S3Record{
606607
{
607608
EventTime: time.Now().Format(time.RFC3339Nano),
608-
EventName: "s3:ObjectCreated:Put",
609+
EventName: "ObjectCreated:Put",
609610
S3: S3Entity{
610611
Bucket: S3Bucket{Name: "test-bucket"},
611612
Object: S3Object{Key: "test-object"},
@@ -659,7 +660,7 @@ func (s *S3WatcherTestSuite) TestWithReceivedCountMissingAttribute() {
659660
Records: []S3Record{
660661
{
661662
EventTime: time.Now().Format(time.RFC3339Nano),
662-
EventName: "s3:ObjectCreated:Put",
663+
EventName: "ObjectCreated:Put",
663664
S3: S3Entity{
664665
Bucket: S3Bucket{Name: "test-bucket"},
665666
Object: S3Object{Key: "test-object"},
@@ -757,62 +758,62 @@ func (s *S3WatcherTestSuite) TestMapS3EventType() {
757758
}{
758759
{
759760
name: "ObjectCreated:Put - direct upload",
760-
eventName: "s3:ObjectCreated:Put",
761+
eventName: "ObjectCreated:Put",
761762
expected: vfsevents.EventCreated,
762763
},
763764
{
764765
name: "ObjectCreated:Post - form upload",
765-
eventName: "s3:ObjectCreated:Post",
766+
eventName: "ObjectCreated:Post",
766767
expected: vfsevents.EventCreated,
767768
},
768769
{
769770
name: "ObjectCreated:Copy - copy operation",
770-
eventName: "s3:ObjectCreated:Copy",
771+
eventName: "ObjectCreated:Copy",
771772
expected: vfsevents.EventModified,
772773
},
773774
{
774775
name: "ObjectCreated:CompleteMultipartUpload - large upload",
775-
eventName: "s3:ObjectCreated:CompleteMultipartUpload",
776+
eventName: "ObjectCreated:CompleteMultipartUpload",
776777
expected: vfsevents.EventModified,
777778
},
778779
{
779780
name: "ObjectCreated:* - wildcard",
780-
eventName: "s3:ObjectCreated:*",
781+
eventName: "ObjectCreated:*",
781782
expected: vfsevents.EventCreated,
782783
},
783784
{
784785
name: "ObjectRestore:Post - restore initiation",
785-
eventName: "s3:ObjectRestore:Post",
786+
eventName: "ObjectRestore:Post",
786787
expected: vfsevents.EventModified,
787788
},
788789
{
789790
name: "ObjectRestore:Completed - restore completion",
790-
eventName: "s3:ObjectRestore:Completed",
791+
eventName: "ObjectRestore:Completed",
791792
expected: vfsevents.EventModified,
792793
},
793794
{
794795
name: "ObjectRestore:Delete - restored copy expires",
795-
eventName: "s3:ObjectRestore:Delete",
796+
eventName: "ObjectRestore:Delete",
796797
expected: vfsevents.EventDeleted,
797798
},
798799
{
799800
name: "ObjectRemoved:Delete - object deletion",
800-
eventName: "s3:ObjectRemoved:Delete",
801+
eventName: "ObjectRemoved:Delete",
801802
expected: vfsevents.EventDeleted,
802803
},
803804
{
804805
name: "ObjectRemoved:DeleteMarkerCreated - versioned deletion",
805-
eventName: "s3:ObjectRemoved:DeleteMarkerCreated",
806+
eventName: "ObjectRemoved:DeleteMarkerCreated",
806807
expected: vfsevents.EventDeleted,
807808
},
808809
{
809810
name: "ObjectRemoved:* - wildcard deletion",
810-
eventName: "s3:ObjectRemoved:*",
811+
eventName: "ObjectRemoved:*",
811812
expected: vfsevents.EventDeleted,
812813
},
813814
{
814815
name: "Unknown event type",
815-
eventName: "s3:ObjectTagging:Put",
816+
eventName: "ObjectTagging:Put",
816817
expected: vfsevents.EventUnknown,
817818
},
818819
}
@@ -833,37 +834,37 @@ func (s *S3WatcherTestSuite) TestGetOperationType() {
833834
}{
834835
{
835836
name: "Put operation",
836-
eventName: "s3:ObjectCreated:Put",
837+
eventName: "ObjectCreated:Put",
837838
expected: "put",
838839
},
839840
{
840841
name: "Post operation",
841-
eventName: "s3:ObjectCreated:Post",
842+
eventName: "ObjectCreated:Post",
842843
expected: "post",
843844
},
844845
{
845846
name: "Copy operation",
846-
eventName: "s3:ObjectCreated:Copy",
847+
eventName: "ObjectCreated:Copy",
847848
expected: "copy",
848849
},
849850
{
850851
name: "Multipart operation",
851-
eventName: "s3:ObjectCreated:CompleteMultipartUpload",
852+
eventName: "ObjectCreated:CompleteMultipartUpload",
852853
expected: "multipart",
853854
},
854855
{
855856
name: "Restore operation",
856-
eventName: "s3:ObjectRestore:Completed",
857+
eventName: "ObjectRestore:Completed",
857858
expected: "restore",
858859
},
859860
{
860861
name: "Delete operation",
861-
eventName: "s3:ObjectRemoved:Delete",
862+
eventName: "ObjectRemoved:Delete",
862863
expected: "delete",
863864
},
864865
{
865866
name: "Unknown operation",
866-
eventName: "s3:ObjectTagging:Put",
867+
eventName: "ObjectTagging:Put",
867868
expected: "unknown",
868869
},
869870
}
@@ -889,7 +890,7 @@ func (s *S3WatcherTestSuite) TestEnhancedMetadata() {
889890
Records: []S3Record{
890891
{
891892
EventTime: "2023-01-01T12:00:00.000Z",
892-
EventName: "s3:ObjectCreated:Copy",
893+
EventName: "ObjectCreated:Copy",
893894
AwsRegion: "us-east-1",
894895
S3: S3Entity{
895896
Bucket: S3Bucket{
@@ -950,7 +951,7 @@ func (s *S3WatcherTestSuite) TestEnhancedMetadata() {
950951
// Verify enhanced metadata
951952
s.Equal("test-bucket", receivedEvent.Metadata["bucketName"])
952953
s.Equal("test-file.txt", receivedEvent.Metadata["key"])
953-
s.Equal("s3:ObjectCreated:Copy", receivedEvent.Metadata["eventName"])
954+
s.Equal("ObjectCreated:Copy", receivedEvent.Metadata["eventName"])
954955
s.Equal("us-east-1", receivedEvent.Metadata["region"])
955956
s.Equal("2023-01-01T12:00:00.000Z", receivedEvent.Metadata["eventTime"])
956957
s.Equal("copy", receivedEvent.Metadata["operation"])
@@ -973,7 +974,7 @@ func (s *S3WatcherTestSuite) TestNonVersionedBucketMetadata() {
973974
Records: []S3Record{
974975
{
975976
EventTime: "2023-01-01T12:00:00.000Z",
976-
EventName: "s3:ObjectCreated:Put",
977+
EventName: "ObjectCreated:Put",
977978
AwsRegion: "us-west-2",
978979
S3: S3Entity{
979980
Bucket: S3Bucket{

0 commit comments

Comments
 (0)