diff --git a/.travis.yml b/.travis.yml index 929992d14..b1fc8c314 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,9 +7,9 @@ language: go os: - linux -#- osx +- osx -#osx_image: xcode7.2 +osx_image: xcode7.2 env: - ARCH=x86_64 diff --git a/cmd/bucket-notification-handlers_test.go b/cmd/bucket-notification-handlers_test.go index 0f59af309..46847a8f1 100644 --- a/cmd/bucket-notification-handlers_test.go +++ b/cmd/bucket-notification-handlers_test.go @@ -10,6 +10,7 @@ import ( "net" "net/http" "net/http/httptest" + "reflect" "strconv" "sync" "testing" @@ -161,6 +162,79 @@ func TestSendBucketNotification(t *testing.T) { } } +func TestGetBucketNotificationHandler(t *testing.T) { + ExecObjectLayerAPITest(t, testGetBucketNotificationHandler, []string{ + "GetBucketNotification", + }) +} + +func testGetBucketNotificationHandler(obj ObjectLayer, instanceType, bucketName string, apiRouter http.Handler, + credentials credential, t *testing.T) { + // declare sample configs + filterRules := []filterRule{ + { + Name: "prefix", + Value: "minio", + }, + { + Name: "suffix", + Value: "*.jpg", + }, + } + sampleSvcCfg := ServiceConfig{ + []string{"s3:ObjectRemoved:*", "s3:ObjectCreated:*"}, + filterStruct{ + keyFilter{filterRules}, + }, + "1", + } + sampleNotifCfg := notificationConfig{ + QueueConfigs: []queueConfig{ + { + ServiceConfig: sampleSvcCfg, + QueueARN: "testqARN", + }, + }, + } + rec := httptest.NewRecorder() + req, err := newTestSignedRequestV4("GET", getGetBucketNotificationURL("", bucketName), + 0, nil, credentials.AccessKeyID, credentials.SecretAccessKey) + if err != nil { + t.Fatalf("%s: Failed to create HTTP testRequest for ListenBucketNotification: %v", instanceType, err) + } + apiRouter.ServeHTTP(rec, req) + if rec.Code != http.StatusOK { + t.Fatalf("Unexpected http response %d", rec.Code) + } + if err = persistNotificationConfig(bucketName, &sampleNotifCfg, obj); err != nil { + t.Fatalf("Unable to save notification config %s", err) + } + rec = httptest.NewRecorder() + req, err = newTestSignedRequestV4("GET", getGetBucketNotificationURL("", bucketName), + 0, nil, credentials.AccessKeyID, credentials.SecretAccessKey) + if err != nil { + t.Fatalf("%s: Failed to create HTTP testRequest for ListenBucketNotification: %v", instanceType, err) + } + apiRouter.ServeHTTP(rec, req) + if rec.Code != http.StatusOK { + t.Fatalf("Unexpected http response %d", rec.Code) + } + notificationBytes, err := ioutil.ReadAll(rec.Body) + if err != nil { + t.Fatalf("Unexpected error %s", err) + } + nConfig := notificationConfig{} + if err = xml.Unmarshal(notificationBytes, &nConfig); err != nil { + t.Fatalf("Unexpected XML received %s", err) + } + if sampleNotifCfg.QueueConfigs[0].QueueARN != nConfig.QueueConfigs[0].QueueARN { + t.Fatalf("Uexpected notification configs expected %#v, got %#v", sampleNotifCfg, nConfig) + } + if !reflect.DeepEqual(sampleNotifCfg.QueueConfigs[0].Events, nConfig.QueueConfigs[0].Events) { + t.Fatalf("Uexpected notification configs expected %#v, got %#v", sampleNotifCfg, nConfig) + } +} + func TestListenBucketNotificationHandler(t *testing.T) { ExecObjectLayerAPITest(t, testListenBucketNotificationHandler, []string{ "ListenBucketNotification", @@ -168,7 +242,8 @@ func TestListenBucketNotificationHandler(t *testing.T) { }) } -func testListenBucketNotificationHandler(obj ObjectLayer, instanceType, bucketName string, apiRouter http.Handler, credentials credential, t *testing.T) { +func testListenBucketNotificationHandler(obj ObjectLayer, instanceType, bucketName string, apiRouter http.Handler, + credentials credential, t *testing.T) { mux, ok := apiRouter.(*mux.Router) if !ok { t.Fatal("Invalid mux router found")