| // Copyright 2019 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package testutil_test |
| |
| import ( |
| "testing" |
| |
| "cloud.google.com/go/pubsub/internal/testutil" |
| ) |
| |
| func TestVerifyKeyOrdering(t *testing.T) { |
| for _, tc := range []struct { |
| name string |
| publishedMsgs []testutil.OrderedKeyMsg |
| receivedMsgs []testutil.OrderedKeyMsg |
| wantErr bool |
| }{ |
| { |
| name: "correct despite different ordering", |
| publishedMsgs: []testutil.OrderedKeyMsg{ |
| {Key: "some-key-1", Data: "some-datum-1"}, |
| {Key: "some-key-2", Data: "some-datum-1"}, |
| {Key: "some-key-1", Data: "some-datum-2"}, |
| {Key: "some-key-3", Data: "some-datum-1"}, |
| {Key: "some-key-1", Data: "some-datum-3"}, |
| {Key: "some-key-4", Data: "some-datum-1"}, |
| }, |
| receivedMsgs: []testutil.OrderedKeyMsg{ |
| {Key: "some-key-2", Data: "some-datum-1"}, |
| {Key: "some-key-1", Data: "some-datum-1"}, |
| {Key: "some-key-3", Data: "some-datum-1"}, |
| {Key: "some-key-4", Data: "some-datum-1"}, |
| {Key: "some-key-1", Data: "some-datum-2"}, |
| {Key: "some-key-1", Data: "some-datum-3"}, |
| }, |
| wantErr: false, |
| }, |
| { |
| name: "received something we didnt publish", |
| publishedMsgs: []testutil.OrderedKeyMsg{ |
| {Key: "some-key-1", Data: "some-datum-1"}, |
| }, |
| receivedMsgs: []testutil.OrderedKeyMsg{ |
| {Key: "some-key-1", Data: "some-datum-2"}, |
| }, |
| wantErr: true, |
| }, |
| { |
| name: "published message missing", |
| publishedMsgs: []testutil.OrderedKeyMsg{ |
| {Key: "some-key-1", Data: "some-datum-1"}, |
| }, |
| receivedMsgs: []testutil.OrderedKeyMsg{}, |
| wantErr: true, |
| }, |
| // TODO(deklerk): account for consistent redelivery. |
| //{ |
| // name: "correct despite consistent redlivery", |
| // publishedMsgs: []testutil.OrderedKeyMsg{ |
| // {Key: "some-key-1", Data: "some-datum-1"}, |
| // {Key: "some-key-1", Data: "some-datum-2"}, |
| // {Key: "some-key-1", Data: "some-datum-3"}, |
| // {Key: "some-key-1", Data: "some-datum-4"}, |
| // {Key: "some-key-1", Data: "some-datum-5"}, |
| // }, |
| // // Messages 2 and 3 are redelivered twice. |
| // receivedMsgs: []testutil.OrderedKeyMsg{ |
| // {Key: "some-key-1", Data: "some-datum-1"}, |
| // {Key: "some-key-1", Data: "some-datum-2"}, |
| // {Key: "some-key-1", Data: "some-datum-3"}, |
| // {Key: "some-key-1", Data: "some-datum-2"}, |
| // {Key: "some-key-1", Data: "some-datum-3"}, |
| // {Key: "some-key-1", Data: "some-datum-2"}, |
| // {Key: "some-key-1", Data: "some-datum-3"}, |
| // {Key: "some-key-1", Data: "some-datum-4"}, |
| // {Key: "some-key-1", Data: "some-datum-5"}, |
| // }, |
| // wantErr: true, |
| //}, |
| } { |
| t.Run(tc.name, func(t *testing.T) { |
| err := testutil.VerifyKeyOrdering(tc.publishedMsgs, tc.receivedMsgs) |
| if tc.wantErr { |
| if err == nil { |
| t.Fatal("wanted err, but got nil") |
| } |
| } else { |
| if err != nil { |
| t.Fatalf("wanted nil, got err:\n\t%v", err) |
| } |
| } |
| }) |
| } |
| } |