mirror of
https://github.com/rclone/rclone.git
synced 2025-12-23 11:43:50 +00:00
vendor: update all dependencies
This commit is contained in:
203
vendor/cloud.google.com/go/pubsub/integration_test.go
generated
vendored
203
vendor/cloud.google.com/go/pubsub/integration_test.go
generated
vendored
@@ -20,10 +20,14 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
gax "github.com/googleapis/gax-go"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"cloud.google.com/go/iam"
|
||||
"cloud.google.com/go/internal"
|
||||
"cloud.google.com/go/internal/testutil"
|
||||
"google.golang.org/api/iterator"
|
||||
"google.golang.org/api/option"
|
||||
)
|
||||
|
||||
@@ -44,9 +48,14 @@ func extractMessageData(m *Message) *messageData {
|
||||
}
|
||||
|
||||
func TestAll(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Integration tests skipped in short mode")
|
||||
}
|
||||
projID := testutil.ProjID()
|
||||
if projID == "" {
|
||||
t.Skip("Integration tests skipped. See CONTRIBUTING.md for details")
|
||||
}
|
||||
ctx := context.Background()
|
||||
ts := testutil.TokenSource(ctx, ScopePubSub, ScopeCloudPlatform)
|
||||
if ts == nil {
|
||||
@@ -57,7 +66,7 @@ func TestAll(t *testing.T) {
|
||||
topicName := fmt.Sprintf("topic-%d", now.Unix())
|
||||
subName := fmt.Sprintf("subscription-%d", now.Unix())
|
||||
|
||||
client, err := NewClient(ctx, testutil.ProjID(), option.WithTokenSource(ts))
|
||||
client, err := NewClient(ctx, projID, option.WithTokenSource(ts))
|
||||
if err != nil {
|
||||
t.Fatalf("Creating client error: %v", err)
|
||||
}
|
||||
@@ -67,9 +76,10 @@ func TestAll(t *testing.T) {
|
||||
if topic, err = client.CreateTopic(ctx, topicName); err != nil {
|
||||
t.Errorf("CreateTopic error: %v", err)
|
||||
}
|
||||
defer topic.Stop()
|
||||
|
||||
var sub *Subscription
|
||||
if sub, err = client.CreateSubscription(ctx, subName, topic, 0, nil); err != nil {
|
||||
if sub, err = client.CreateSubscription(ctx, subName, SubscriptionConfig{Topic: topic}); err != nil {
|
||||
t.Errorf("CreateSub error: %v", err)
|
||||
}
|
||||
|
||||
@@ -100,61 +110,44 @@ func TestAll(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
ids, err := topic.Publish(ctx, msgs...)
|
||||
if err != nil {
|
||||
t.Fatalf("Publish (1) error: %v", err)
|
||||
// Publish the messages.
|
||||
type pubResult struct {
|
||||
m *Message
|
||||
r *PublishResult
|
||||
}
|
||||
|
||||
if len(ids) != len(msgs) {
|
||||
t.Errorf("unexpected number of message IDs received; %d, want %d", len(ids), len(msgs))
|
||||
var rs []pubResult
|
||||
for _, m := range msgs {
|
||||
r := topic.Publish(ctx, m)
|
||||
rs = append(rs, pubResult{m, r})
|
||||
}
|
||||
|
||||
want := make(map[string]*messageData)
|
||||
for i, m := range msgs {
|
||||
md := extractMessageData(m)
|
||||
md.ID = ids[i]
|
||||
for _, res := range rs {
|
||||
id, err := res.r.Get(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
md := extractMessageData(res.m)
|
||||
md.ID = id
|
||||
want[md.ID] = md
|
||||
}
|
||||
|
||||
// Use a timeout to ensure that Pull does not block indefinitely if there are unexpectedly few messages available.
|
||||
timeoutCtx, _ := context.WithTimeout(ctx, time.Minute)
|
||||
it, err := sub.Pull(timeoutCtx)
|
||||
gotMsgs, err := pullN(timeoutCtx, sub, len(want), func(ctx context.Context, m *Message) {
|
||||
m.Ack()
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("error constructing iterator: %v", err)
|
||||
t.Fatalf("Pull: %v", err)
|
||||
}
|
||||
defer it.Stop()
|
||||
got := make(map[string]*messageData)
|
||||
for i := 0; i < len(want); i++ {
|
||||
m, err := it.Next()
|
||||
if err != nil {
|
||||
t.Fatalf("error getting next message: %v", err)
|
||||
}
|
||||
for _, m := range gotMsgs {
|
||||
md := extractMessageData(m)
|
||||
got[md.ID] = md
|
||||
m.Done(true)
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(got, want) {
|
||||
t.Errorf("messages: got: %v ; want: %v", got, want)
|
||||
}
|
||||
|
||||
// base64 test
|
||||
data := "=@~"
|
||||
_, err = topic.Publish(ctx, &Message{Data: []byte(data)})
|
||||
if err != nil {
|
||||
t.Fatalf("Publish error: %v", err)
|
||||
}
|
||||
|
||||
m, err := it.Next()
|
||||
if err != nil {
|
||||
t.Fatalf("Pull error: %v", err)
|
||||
}
|
||||
|
||||
if string(m.Data) != data {
|
||||
t.Errorf("unexpected message received; %s, want %s", string(m.Data), data)
|
||||
}
|
||||
m.Done(true)
|
||||
|
||||
if msg, ok := testIAM(ctx, topic.IAM(), "pubsub.topics.get"); !ok {
|
||||
t.Errorf("topic IAM: %s", msg)
|
||||
}
|
||||
@@ -162,13 +155,61 @@ func TestAll(t *testing.T) {
|
||||
t.Errorf("sub IAM: %s", msg)
|
||||
}
|
||||
|
||||
err = sub.Delete(ctx)
|
||||
snap, err := sub.createSnapshot(ctx, "")
|
||||
if err != nil {
|
||||
t.Fatalf("CreateSnapshot error: %v", err)
|
||||
}
|
||||
|
||||
timeoutCtx, _ = context.WithTimeout(ctx, time.Minute)
|
||||
err = internal.Retry(timeoutCtx, gax.Backoff{}, func() (bool, error) {
|
||||
snapIt := client.snapshots(timeoutCtx)
|
||||
for {
|
||||
s, err := snapIt.Next()
|
||||
if err == nil && s.name == snap.name {
|
||||
return true, nil
|
||||
}
|
||||
if err == iterator.Done {
|
||||
return false, fmt.Errorf("cannot find snapshot: %q", snap.name)
|
||||
}
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
err = internal.Retry(timeoutCtx, gax.Backoff{}, func() (bool, error) {
|
||||
err := sub.seekToSnapshot(timeoutCtx, snap.snapshot)
|
||||
return err == nil, err
|
||||
})
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
err = internal.Retry(timeoutCtx, gax.Backoff{}, func() (bool, error) {
|
||||
err := sub.seekToTime(timeoutCtx, time.Now())
|
||||
return err == nil, err
|
||||
})
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
err = internal.Retry(timeoutCtx, gax.Backoff{}, func() (bool, error) {
|
||||
snapHandle := client.snapshot(snap.ID())
|
||||
err := snapHandle.delete(timeoutCtx)
|
||||
return err == nil, err
|
||||
})
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if err := sub.Delete(ctx); err != nil {
|
||||
t.Errorf("DeleteSub error: %v", err)
|
||||
}
|
||||
|
||||
err = topic.Delete(ctx)
|
||||
if err != nil {
|
||||
if err := topic.Delete(ctx); err != nil {
|
||||
t.Errorf("DeleteTopic error: %v", err)
|
||||
}
|
||||
}
|
||||
@@ -230,3 +271,81 @@ func testIAM(ctx context.Context, h *iam.Handle, permission string) (msg string,
|
||||
}
|
||||
return "", true
|
||||
}
|
||||
|
||||
func TestSubscriptionUpdate(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := context.Background()
|
||||
if testing.Short() {
|
||||
t.Skip("Integration tests skipped in short mode")
|
||||
}
|
||||
projID := testutil.ProjID()
|
||||
if projID == "" {
|
||||
t.Skip("Integration tests skipped. See CONTRIBUTING.md for details.")
|
||||
}
|
||||
ts := testutil.TokenSource(ctx, ScopePubSub, ScopeCloudPlatform)
|
||||
if ts == nil {
|
||||
t.Skip("Integration tests skipped. See CONTRIBUTING.md for details")
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
topicName := fmt.Sprintf("topic-modify-%d", now.Unix())
|
||||
subName := fmt.Sprintf("subscription-modify-%d", now.Unix())
|
||||
|
||||
client, err := NewClient(ctx, projID, option.WithTokenSource(ts))
|
||||
if err != nil {
|
||||
t.Fatalf("Creating client error: %v", err)
|
||||
}
|
||||
defer client.Close()
|
||||
|
||||
var topic *Topic
|
||||
if topic, err = client.CreateTopic(ctx, topicName); err != nil {
|
||||
t.Fatalf("CreateTopic error: %v", err)
|
||||
}
|
||||
defer topic.Stop()
|
||||
defer topic.Delete(ctx)
|
||||
|
||||
var sub *Subscription
|
||||
if sub, err = client.CreateSubscription(ctx, subName, SubscriptionConfig{Topic: topic}); err != nil {
|
||||
t.Fatalf("CreateSub error: %v", err)
|
||||
}
|
||||
defer sub.Delete(ctx)
|
||||
|
||||
sc, err := sub.Config(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !reflect.DeepEqual(sc.PushConfig, PushConfig{}) {
|
||||
t.Fatalf("got %+v, want empty PushConfig")
|
||||
}
|
||||
// Add a PushConfig.
|
||||
pc := PushConfig{
|
||||
Endpoint: "https://" + projID + ".appspot.com/_ah/push-handlers/push",
|
||||
Attributes: map[string]string{"x-goog-version": "v1"},
|
||||
}
|
||||
sc, err = sub.Update(ctx, SubscriptionConfigToUpdate{PushConfig: &pc})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
// Despite the docs which say that Get always returns a valid "x-goog-version"
|
||||
// attribute, none is returned. See
|
||||
// https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#google.pubsub.v1.PushConfig
|
||||
pc.Attributes = nil
|
||||
if got, want := sc.PushConfig, pc; !reflect.DeepEqual(got, want) {
|
||||
t.Fatalf("setting push config: got\n%+v\nwant\n%+v", got, want)
|
||||
}
|
||||
// Remove the PushConfig, turning the subscription back into pull mode.
|
||||
pc = PushConfig{}
|
||||
sc, err = sub.Update(ctx, SubscriptionConfigToUpdate{PushConfig: &pc})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got, want := sc.PushConfig, pc; !reflect.DeepEqual(got, want) {
|
||||
t.Fatalf("removing push config: got\n%+v\nwant %+v", got, want)
|
||||
}
|
||||
|
||||
// If nothing changes, our client returns an error.
|
||||
_, err = sub.Update(ctx, SubscriptionConfigToUpdate{})
|
||||
if err == nil {
|
||||
t.Fatal("got nil, wanted error")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user