| // Copyright 2017 Google Inc. All Rights Reserved. |
| // |
| // 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 pubsub |
| |
| import ( |
| "reflect" |
| "testing" |
| |
| pb "google.golang.org/genproto/googleapis/pubsub/v1" |
| ) |
| |
| func TestSplitRequest(t *testing.T) { |
| split := func(a []string, i int) ([]string, []string) { |
| if len(a) < i { |
| return a, nil |
| } |
| return a[:i], a[i:] |
| } |
| ackIDs := []string{"aaaa", "bbbb", "cccc", "dddd", "eeee"} |
| modDeadlines := []int32{1, 2, 3, 4, 5} |
| for i, test := range []struct { |
| ackIDs []string |
| modAckIDs []string |
| splitIndex int |
| }{ |
| {ackIDs, ackIDs, 2}, |
| {nil, ackIDs, 3}, |
| {ackIDs, nil, 5}, |
| {nil, ackIDs[:1], 1}, |
| } { |
| req := &pb.StreamingPullRequest{ |
| AckIds: test.ackIDs, |
| ModifyDeadlineAckIds: test.modAckIDs, |
| ModifyDeadlineSeconds: modDeadlines[:len(test.modAckIDs)], |
| } |
| a1, a2 := split(test.ackIDs, test.splitIndex) |
| m1, m2 := split(test.modAckIDs, test.splitIndex) |
| want1 := &pb.StreamingPullRequest{ |
| AckIds: a1, |
| ModifyDeadlineAckIds: m1, |
| ModifyDeadlineSeconds: modDeadlines[:len(m1)], |
| } |
| want2 := &pb.StreamingPullRequest{ |
| AckIds: a2, |
| ModifyDeadlineAckIds: m2, |
| ModifyDeadlineSeconds: modDeadlines[len(m1) : len(m1)+len(m2)], |
| } |
| got1, got2 := splitRequest(req, reqFixedOverhead+40) |
| if !reflect.DeepEqual(got1, want1) { |
| t.Errorf("#%d: first:\ngot %+v\nwant %+v", i, got1, want1) |
| } |
| if !reflect.DeepEqual(got2, want2) { |
| t.Errorf("#%d: second:\ngot %+v\nwant %+v", i, got2, want2) |
| } |
| } |
| } |