mirror of
https://github.com/minio/minio.git
synced 2025-11-21 02:09:08 -05:00
Make addition of TopicConfig to globalEventNotifier go-routine safe (#2806)
This commit is contained in:
committed by
Harshavardhana
parent
f72163f856
commit
5fdd768903
@@ -17,6 +17,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -64,11 +65,11 @@ func testEventNotify(obj ObjectLayer, instanceType string, t TestErrHandler) {
|
||||
t.Errorf("Expected error to be nil, got %s", err)
|
||||
}
|
||||
|
||||
if !globalEventNotifier.IsBucketNotificationSet(bucketName) {
|
||||
nConfig := globalEventNotifier.GetBucketNotificationConfig(bucketName)
|
||||
if nConfig == nil {
|
||||
t.Errorf("Notification expected to be set, but notification not set.")
|
||||
}
|
||||
|
||||
nConfig := globalEventNotifier.GetBucketNotificationConfig(bucketName)
|
||||
if !reflect.DeepEqual(nConfig, ¬ificationConfig{}) {
|
||||
t.Errorf("Mismatching notification configs.")
|
||||
}
|
||||
@@ -381,3 +382,69 @@ func TestListenBucketNotification(t *testing.T) {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
func testAddTopicConfig(obj ObjectLayer, instanceType string, t TestErrHandler) {
|
||||
root, cErr := newTestConfig("us-east-1")
|
||||
if cErr != nil {
|
||||
t.Fatalf("[%s] Failed to initialize test config: %v", instanceType, cErr)
|
||||
}
|
||||
defer removeAll(root)
|
||||
|
||||
if err := initEventNotifier(obj); err != nil {
|
||||
t.Fatalf("[%s] : Failed to initialize event notifier: %v", instanceType, err)
|
||||
}
|
||||
|
||||
// Make a bucket to store topicConfigs.
|
||||
randBucket := getRandomBucketName()
|
||||
if err := obj.MakeBucket(randBucket); err != nil {
|
||||
t.Fatalf("[%s] : Failed to make bucket %s", instanceType, randBucket)
|
||||
}
|
||||
|
||||
// Add a topicConfig to an empty notificationConfig.
|
||||
accountID := fmt.Sprintf("%d", time.Now().UTC().UnixNano())
|
||||
accountARN := "arn:minio:sns:" + serverConfig.GetRegion() + accountID + ":listen"
|
||||
var filterRules []filterRule
|
||||
filterRules = append(filterRules, filterRule{
|
||||
Name: "prefix",
|
||||
Value: "minio",
|
||||
})
|
||||
filterRules = append(filterRules, filterRule{
|
||||
Name: "suffix",
|
||||
Value: "*.jpg",
|
||||
})
|
||||
|
||||
// Make topic configuration corresponding to this ListenBucketNotification request.
|
||||
sampleTopicCfg := &topicConfig{
|
||||
TopicARN: accountARN,
|
||||
serviceConfig: serviceConfig{
|
||||
Filter: struct {
|
||||
Key keyFilter `xml:"S3Key,omitempty"`
|
||||
}{
|
||||
Key: keyFilter{
|
||||
FilterRules: filterRules,
|
||||
},
|
||||
},
|
||||
ID: "sns-" + accountID,
|
||||
},
|
||||
}
|
||||
testCases := []struct {
|
||||
topicCfg *topicConfig
|
||||
expectedErr error
|
||||
}{
|
||||
{sampleTopicCfg, nil},
|
||||
{nil, errInvalidArgument},
|
||||
{sampleTopicCfg, nil},
|
||||
}
|
||||
|
||||
for i, test := range testCases {
|
||||
err := globalEventNotifier.AddTopicConfig(randBucket, test.topicCfg)
|
||||
if err != test.expectedErr {
|
||||
t.Errorf("Test %d: %s failed with error %v, expected to fail with %v",
|
||||
i+1, instanceType, err, test.expectedErr)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestAddTopicConfig(t *testing.T) {
|
||||
ExecObjectLayerTest(t, testAddTopicConfig)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user