etcd/client/v3/watch_test.go
Benjamin Wang 19dc0cb413 client: enhance the function shouldRetryWatch and added unit test
Signed-off-by: Benjamin Wang <wachao@vmware.com>
2022-12-13 06:05:02 +08:00

95 lines
2.3 KiB
Go

// Copyright 2016 The etcd Authors
//
// 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 clientv3
import (
"testing"
"github.com/stretchr/testify/assert"
"go.etcd.io/etcd/api/v3/mvccpb"
"go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
)
func TestEvent(t *testing.T) {
tests := []struct {
ev *Event
isCreate bool
isModify bool
}{{
ev: &Event{
Type: EventTypePut,
Kv: &mvccpb.KeyValue{
CreateRevision: 3,
ModRevision: 3,
},
},
isCreate: true,
}, {
ev: &Event{
Type: EventTypePut,
Kv: &mvccpb.KeyValue{
CreateRevision: 3,
ModRevision: 4,
},
},
isModify: true,
}}
for i, tt := range tests {
if tt.isCreate && !tt.ev.IsCreate() {
t.Errorf("#%d: event should be Create event", i)
}
if tt.isModify && !tt.ev.IsModify() {
t.Errorf("#%d: event should be Modify event", i)
}
}
}
func TestShouldRetryWatch(t *testing.T) {
testCases := []struct {
name string
msg string
expectedRetry bool
}{
{
name: "equal to ErrGRPCInvalidAuthToken",
msg: rpctypes.ErrGRPCInvalidAuthToken.Error(),
expectedRetry: true,
},
{
name: "equal to ErrGRPCAuthOldRevision",
msg: rpctypes.ErrGRPCAuthOldRevision.Error(),
expectedRetry: true,
},
{
name: "valid grpc error but not equal to ErrGRPCInvalidAuthToken or ErrGRPCAuthOldRevision",
msg: rpctypes.ErrGRPCUserEmpty.Error(),
expectedRetry: false,
},
{
name: "invalid grpc error and not equal to ErrGRPCInvalidAuthToken or ErrGRPCAuthOldRevision",
msg: "whatever error message",
expectedRetry: false,
},
}
for _, tc := range testCases {
tc := tc
t.Run(tc.name, func(t *testing.T) {
assert.Equal(t, tc.expectedRetry, shouldRetryWatch(tc.msg))
})
}
}