...

Source file src/cloud.google.com/go/storage/notifications_test.go

Documentation: cloud.google.com/go/storage

     1  // Copyright 2017 Google LLC
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package storage
    16  
    17  import (
    18  	"context"
    19  	"testing"
    20  
    21  	"cloud.google.com/go/internal/testutil"
    22  	raw "google.golang.org/api/storage/v1"
    23  )
    24  
    25  func TestParseNotificationTopic(t *testing.T) {
    26  	for _, test := range []struct {
    27  		in            string
    28  		wantProjectID string
    29  		wantTopicID   string
    30  	}{
    31  		{"", "?", "?"},
    32  		{"foobar", "?", "?"},
    33  		{"//pubsub.googleapis.com/projects/foo", "?", "?"},
    34  		{"//pubsub.googleapis.com/projects/my-project/topics/my-topic",
    35  			"my-project", "my-topic"},
    36  	} {
    37  		gotProjectID, gotTopicID := parseNotificationTopic(test.in)
    38  		if gotProjectID != test.wantProjectID || gotTopicID != test.wantTopicID {
    39  			t.Errorf("%q: got (%q, %q), want (%q, %q)",
    40  				test.in, gotProjectID, gotTopicID, test.wantProjectID, test.wantTopicID)
    41  		}
    42  	}
    43  
    44  }
    45  
    46  func TestConvertNotification(t *testing.T) {
    47  	want := &Notification{
    48  		ID:               "id",
    49  		TopicProjectID:   "my-project",
    50  		TopicID:          "my-topic",
    51  		EventTypes:       []string{ObjectFinalizeEvent},
    52  		ObjectNamePrefix: "prefix",
    53  		CustomAttributes: map[string]string{"a": "b"},
    54  		PayloadFormat:    JSONPayload,
    55  	}
    56  	got := toNotification(toRawNotification(want))
    57  	if diff := testutil.Diff(got, want); diff != "" {
    58  		t.Errorf("got=-, want=+:\n%s", diff)
    59  	}
    60  }
    61  
    62  func TestNotificationsToMap(t *testing.T) {
    63  	got := notificationsToMap(nil)
    64  	want := map[string]*Notification{}
    65  	if !testutil.Equal(got, want) {
    66  		t.Errorf("got %+v, want %+v", got, want)
    67  	}
    68  
    69  	in := []*raw.Notification{
    70  		{Id: "a", Topic: "//pubsub.googleapis.com/projects/P1/topics/T1"},
    71  		{Id: "b", Topic: "//pubsub.googleapis.com/projects/P2/topics/T2"},
    72  		{Id: "c", Topic: "//pubsub.googleapis.com/projects/P3/topics/T3"},
    73  	}
    74  	got = notificationsToMap(in)
    75  	want = map[string]*Notification{
    76  		"a": {ID: "a", TopicProjectID: "P1", TopicID: "T1"},
    77  		"b": {ID: "b", TopicProjectID: "P2", TopicID: "T2"},
    78  		"c": {ID: "c", TopicProjectID: "P3", TopicID: "T3"},
    79  	}
    80  	if diff := testutil.Diff(got, want); diff != "" {
    81  		t.Errorf("got=-, want=+:\n%s", diff)
    82  	}
    83  }
    84  
    85  func TestAddNotificationsErrors(t *testing.T) {
    86  	c := &Client{}
    87  	b := c.Bucket("b")
    88  	for _, n := range []*Notification{
    89  		{ID: "foo", TopicProjectID: "p", TopicID: "t"}, // has ID
    90  		{TopicProjectID: "p"},                          // missing TopicID
    91  		{TopicID: "t"},                                 // missing TopicProjectID
    92  	} {
    93  		_, err := b.AddNotification(context.Background(), n)
    94  		if err == nil {
    95  			t.Errorf("%+v: got nil, want error", n)
    96  		}
    97  	}
    98  }
    99  

View as plain text