From 5e63c25039a62a32a7c7f1d73627a234538d95fe Mon Sep 17 00:00:00 2001 From: redwrasse Date: Mon, 23 Sep 2024 21:44:13 -0700 Subject: [PATCH 1/4] tests: wip errors.Is conversions Signed-off-by: redwrasse --- .../clientv3/connectivity/network_partition_test.go | 4 ++-- tests/integration/clientv3/maintenance_test.go | 3 ++- tests/integration/clientv3/txn_test.go | 3 ++- tests/integration/clientv3/user_test.go | 7 ++++--- tests/integration/v3_tls_test.go | 3 ++- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/tests/integration/clientv3/connectivity/network_partition_test.go b/tests/integration/clientv3/connectivity/network_partition_test.go index b72b7aea2..b46804d3a 100644 --- a/tests/integration/clientv3/connectivity/network_partition_test.go +++ b/tests/integration/clientv3/connectivity/network_partition_test.go @@ -267,7 +267,7 @@ func testBalancerUnderNetworkPartitionWatch(t *testing.T, isolateLeader bool) { if len(ev.Events) != 0 { t.Fatal("expected no event") } - if err = ev.Err(); err != rpctypes.ErrNoLeader { + if err = ev.Err(); !errors.Is(err, rpctypes.ErrNoLeader) { t.Fatalf("expected %v, got %v", rpctypes.ErrNoLeader, err) } case <-time.After(integration2.RequestWaitTimeout): // enough time to detect leader lost @@ -313,7 +313,7 @@ func TestDropReadUnderNetworkPartition(t *testing.T) { ctx, cancel := context.WithTimeout(context.TODO(), 10*time.Second) _, err = kvc.Get(ctx, "a") cancel() - if err != rpctypes.ErrLeaderChanged { + if !errors.Is(err, rpctypes.ErrLeaderChanged) { t.Fatalf("expected %v, got %v", rpctypes.ErrLeaderChanged, err) } diff --git a/tests/integration/clientv3/maintenance_test.go b/tests/integration/clientv3/maintenance_test.go index 7dc912a3a..475fc9e18 100644 --- a/tests/integration/clientv3/maintenance_test.go +++ b/tests/integration/clientv3/maintenance_test.go @@ -18,6 +18,7 @@ import ( "bytes" "context" "crypto/sha256" + "errors" "fmt" "io" "math" @@ -135,7 +136,7 @@ func TestMaintenanceMoveLeader(t *testing.T) { cli := clus.Client(targetIdx) _, err := cli.MoveLeader(context.Background(), target) - if err != rpctypes.ErrNotLeader { + if !errors.Is(err, rpctypes.ErrNotLeader) { t.Fatalf("error expected %v, got %v", rpctypes.ErrNotLeader, err) } diff --git a/tests/integration/clientv3/txn_test.go b/tests/integration/clientv3/txn_test.go index 84a56146d..d1517bda4 100644 --- a/tests/integration/clientv3/txn_test.go +++ b/tests/integration/clientv3/txn_test.go @@ -16,6 +16,7 @@ package clientv3test import ( "context" + "errors" "fmt" "testing" "time" @@ -36,7 +37,7 @@ func TestTxnError(t *testing.T) { ctx := context.TODO() _, err := kv.Txn(ctx).Then(clientv3.OpPut("foo", "bar1"), clientv3.OpPut("foo", "bar2")).Commit() - if err != rpctypes.ErrDuplicateKey { + if !errors.Is(err, rpctypes.ErrDuplicateKey) { t.Fatalf("expected %v, got %v", rpctypes.ErrDuplicateKey, err) } diff --git a/tests/integration/clientv3/user_test.go b/tests/integration/clientv3/user_test.go index 49b4c18ea..c0126915d 100644 --- a/tests/integration/clientv3/user_test.go +++ b/tests/integration/clientv3/user_test.go @@ -16,6 +16,7 @@ package clientv3test import ( "context" + "errors" "testing" "time" @@ -41,17 +42,17 @@ func TestUserError(t *testing.T) { } _, err = authapi.UserAdd(context.TODO(), "foo", "bar") - if err != rpctypes.ErrUserAlreadyExist { + if !errors.Is(err, rpctypes.ErrUserAlreadyExist) { t.Fatalf("expected %v, got %v", rpctypes.ErrUserAlreadyExist, err) } _, err = authapi.UserDelete(context.TODO(), "not-exist-user") - if err != rpctypes.ErrUserNotFound { + if !errors.Is(err, rpctypes.ErrUserNotFound) { t.Fatalf("expected %v, got %v", rpctypes.ErrUserNotFound, err) } _, err = authapi.UserGrantRole(context.TODO(), "foo", "test-role-does-not-exist") - if err != rpctypes.ErrRoleNotFound { + if !errors.Is(err, rpctypes.ErrRoleNotFound) { t.Fatalf("expected %v, got %v", rpctypes.ErrRoleNotFound, err) } } diff --git a/tests/integration/v3_tls_test.go b/tests/integration/v3_tls_test.go index a13ad5c0b..fbdf2bb8b 100644 --- a/tests/integration/v3_tls_test.go +++ b/tests/integration/v3_tls_test.go @@ -17,6 +17,7 @@ package integration import ( "context" "crypto/tls" + "errors" "testing" "time" @@ -72,7 +73,7 @@ func testTLSCipherSuites(t *testing.T, valid bool) { if cli != nil { cli.Close() } - if !valid && cerr != context.DeadlineExceeded { + if !valid && !errors.Is(cerr, context.DeadlineExceeded) { t.Fatalf("expected %v with TLS handshake failure, got %v", context.DeadlineExceeded, cerr) } if valid && cerr != nil { From e3319c595f06596bb0f2de805e17294eadfe3295 Mon Sep 17 00:00:00 2001 From: redwrasse Date: Mon, 23 Sep 2024 21:51:58 -0700 Subject: [PATCH 2/4] finish inequality conversions Signed-off-by: redwrasse --- .../clientv3/connectivity/network_partition_test.go | 2 +- .../experimental/recipes/v3_double_barrier_test.go | 3 ++- tests/integration/clientv3/lease/leasing_test.go | 7 ++++--- tests/integration/clientv3/maintenance_test.go | 2 +- tests/integration/clientv3/ordering_kv_test.go | 6 +++--- tests/integration/clientv3/ordering_util_test.go | 5 +++-- tests/integration/clientv3/txn_test.go | 2 +- tests/integration/clientv3/user_test.go | 6 +++--- tests/integration/v3_grpc_test.go | 5 +++-- 9 files changed, 21 insertions(+), 17 deletions(-) diff --git a/tests/integration/clientv3/connectivity/network_partition_test.go b/tests/integration/clientv3/connectivity/network_partition_test.go index b46804d3a..cb421a84e 100644 --- a/tests/integration/clientv3/connectivity/network_partition_test.go +++ b/tests/integration/clientv3/connectivity/network_partition_test.go @@ -145,7 +145,7 @@ func testBalancerUnderNetworkPartition(t *testing.T, op func(*clientv3.Client, c if err == nil { break } - if err != errExpected { + if !errors.Is(err, errExpected) { t.Errorf("#%d: expected '%v', got '%v'", i, errExpected, err) } // give enough time for endpoint switch diff --git a/tests/integration/clientv3/experimental/recipes/v3_double_barrier_test.go b/tests/integration/clientv3/experimental/recipes/v3_double_barrier_test.go index 120e4bed8..f4fbfcb24 100644 --- a/tests/integration/clientv3/experimental/recipes/v3_double_barrier_test.go +++ b/tests/integration/clientv3/experimental/recipes/v3_double_barrier_test.go @@ -16,6 +16,7 @@ package recipes_test import ( "context" + "errors" "sync" "testing" "time" @@ -149,7 +150,7 @@ func TestDoubleBarrierTooManyClients(t *testing.T) { // no any other client can enter the barrier. wgEntered.Wait() t.Log("Try to enter into double barrier") - if err = b.Enter(); err != recipe.ErrTooManyClients { + if err = b.Enter(); !errors.Is(err, recipe.ErrTooManyClients) { t.Errorf("Unexcepted error, expected: ErrTooManyClients, got: %v", err) } diff --git a/tests/integration/clientv3/lease/leasing_test.go b/tests/integration/clientv3/lease/leasing_test.go index 2164e8f5b..40113d0aa 100644 --- a/tests/integration/clientv3/lease/leasing_test.go +++ b/tests/integration/clientv3/lease/leasing_test.go @@ -16,6 +16,7 @@ package lease_test import ( "context" + "errors" "fmt" "math/rand" "reflect" @@ -895,7 +896,7 @@ func TestLeasingTxnCancel(t *testing.T) { time.Sleep(100 * time.Millisecond) cancel() }() - if _, err := lkv2.Txn(ctx).Then(clientv3.OpPut("k", "v")).Commit(); err != context.Canceled { + if _, err := lkv2.Txn(ctx).Then(clientv3.OpPut("k", "v")).Commit(); !errors.Is(err, context.Canceled) { t.Fatalf("expected %v, got %v", context.Canceled, err) } } @@ -2017,7 +2018,7 @@ func TestLeasingSessionExpireCancel(t *testing.T) { select { case err := <-errc: - if err != ctx.Err() { + if !errors.Is(err, ctx.Err()) { t.Errorf("#%d: expected %v of server unavailable, got %v", i, ctx.Err(), err) } case <-time.After(5 * time.Second): @@ -2048,7 +2049,7 @@ func waitForExpireAck(t *testing.T, kv clientv3.KV) { ctx, cancel := context.WithTimeout(context.TODO(), time.Second) _, err := kv.Get(ctx, "abc") cancel() - if err == ctx.Err() { + if errors.Is(err, ctx.Err()) { return } else if err != nil { t.Logf("current error: %v", err) diff --git a/tests/integration/clientv3/maintenance_test.go b/tests/integration/clientv3/maintenance_test.go index 475fc9e18..3de3d389c 100644 --- a/tests/integration/clientv3/maintenance_test.go +++ b/tests/integration/clientv3/maintenance_test.go @@ -187,7 +187,7 @@ func TestMaintenanceSnapshotCancel(t *testing.T) { cancel() _, err = io.Copy(io.Discard, rc1) - if err != context.Canceled { + if !errors.Is(err, context.Canceled) { t.Errorf("expected %v, got %v", context.Canceled, err) } } diff --git a/tests/integration/clientv3/ordering_kv_test.go b/tests/integration/clientv3/ordering_kv_test.go index c539199ff..1d667b44d 100644 --- a/tests/integration/clientv3/ordering_kv_test.go +++ b/tests/integration/clientv3/ordering_kv_test.go @@ -89,7 +89,7 @@ func TestDetectKvOrderViolation(t *testing.T) { t.Logf("Quering m2 after restart") v, err = orderingKv.Get(ctx, "foo", clientv3.WithSerializable()) t.Logf("Quering m2 returned: v:%v err:%v ", v, err) - if err != errOrderViolation { + if !errors.Is(err, errOrderViolation) { t.Fatalf("expected %v, got err:%v v:%v", errOrderViolation, err, v) } } @@ -155,7 +155,7 @@ func TestDetectTxnOrderViolation(t *testing.T) { cli.SetEndpoints(clus.Members[2].GRPCURL) time.Sleep(2 * time.Second) // FIXME: Figure out how pause SetEndpoints sufficiently that this is not needed _, err = orderingKv.Get(ctx, "foo", clientv3.WithSerializable()) - if err != errOrderViolation { + if !errors.Is(err, errOrderViolation) { t.Fatalf("expected %v, got %v", errOrderViolation, err) } orderingTxn = orderingKv.Txn(ctx) @@ -164,7 +164,7 @@ func TestDetectTxnOrderViolation(t *testing.T) { ).Then( clientv3.OpGet("foo", clientv3.WithSerializable()), ).Commit() - if err != errOrderViolation { + if !errors.Is(err, errOrderViolation) { t.Fatalf("expected %v, got %v", errOrderViolation, err) } } diff --git a/tests/integration/clientv3/ordering_util_test.go b/tests/integration/clientv3/ordering_util_test.go index ebac39981..6313957bf 100644 --- a/tests/integration/clientv3/ordering_util_test.go +++ b/tests/integration/clientv3/ordering_util_test.go @@ -16,6 +16,7 @@ package clientv3test import ( "context" + "errors" "testing" "time" @@ -78,7 +79,7 @@ func TestEndpointSwitchResolvesViolation(t *testing.T) { cli.SetEndpoints(clus.Members[2].GRPCURL) time.Sleep(1 * time.Second) // give enough time for the operation _, err = orderingKv.Get(ctx, "foo", clientv3.WithSerializable()) - if err != ordering.ErrNoGreaterRev { + if !errors.Is(err, ordering.ErrNoGreaterRev) { t.Fatal("While speaking to partitioned leader, we should get ErrNoGreaterRev error") } @@ -156,7 +157,7 @@ func TestUnresolvableOrderViolation(t *testing.T) { time.Sleep(1 * time.Second) // give enough time for operation _, err = OrderingKv.Get(ctx, "foo", clientv3.WithSerializable()) - if err != ordering.ErrNoGreaterRev { + if !errors.Is(err, ordering.ErrNoGreaterRev) { t.Fatalf("expected %v, got %v", ordering.ErrNoGreaterRev, err) } } diff --git a/tests/integration/clientv3/txn_test.go b/tests/integration/clientv3/txn_test.go index d1517bda4..221247d2f 100644 --- a/tests/integration/clientv3/txn_test.go +++ b/tests/integration/clientv3/txn_test.go @@ -46,7 +46,7 @@ func TestTxnError(t *testing.T) { ops[i] = clientv3.OpPut(fmt.Sprintf("foo%d", i), "") } _, err = kv.Txn(ctx).Then(ops...).Commit() - if err != rpctypes.ErrTooManyOps { + if !errors.Is(err, rpctypes.ErrTooManyOps) { t.Fatalf("expected %v, got %v", rpctypes.ErrTooManyOps, err) } } diff --git a/tests/integration/clientv3/user_test.go b/tests/integration/clientv3/user_test.go index c0126915d..7ed13e7ed 100644 --- a/tests/integration/clientv3/user_test.go +++ b/tests/integration/clientv3/user_test.go @@ -117,7 +117,7 @@ func TestUserErrorAuth(t *testing.T) { authSetupRoot(t, authapi.Auth) // unauthenticated client - if _, err := authapi.UserAdd(context.TODO(), "foo", "bar"); err != rpctypes.ErrUserEmpty { + if _, err := authapi.UserAdd(context.TODO(), "foo", "bar"); !errors.Is(err, rpctypes.ErrUserEmpty) { t.Fatalf("expected %v, got %v", rpctypes.ErrUserEmpty, err) } @@ -128,11 +128,11 @@ func TestUserErrorAuth(t *testing.T) { DialOptions: []grpc.DialOption{grpc.WithBlock()}, } cfg.Username, cfg.Password = "wrong-id", "123" - if _, err := integration2.NewClient(t, cfg); err != rpctypes.ErrAuthFailed { + if _, err := integration2.NewClient(t, cfg); !errors.Is(err, rpctypes.ErrAuthFailed) { t.Fatalf("expected %v, got %v", rpctypes.ErrAuthFailed, err) } cfg.Username, cfg.Password = "root", "wrong-pass" - if _, err := integration2.NewClient(t, cfg); err != rpctypes.ErrAuthFailed { + if _, err := integration2.NewClient(t, cfg); !errors.Is(err, rpctypes.ErrAuthFailed) { t.Fatalf("expected %v, got %v", rpctypes.ErrAuthFailed, err) } diff --git a/tests/integration/v3_grpc_test.go b/tests/integration/v3_grpc_test.go index 2cc4ab660..60b5eaccb 100644 --- a/tests/integration/v3_grpc_test.go +++ b/tests/integration/v3_grpc_test.go @@ -17,6 +17,7 @@ package integration import ( "bytes" "context" + "errors" "fmt" "math/rand" "os" @@ -1599,7 +1600,7 @@ func TestTLSGRPCRejectSecureClient(t *testing.T) { if client != nil || err == nil { client.Close() t.Fatalf("expected no client") - } else if err != context.DeadlineExceeded { + } else if !errors.Is(err, context.DeadlineExceeded) { t.Fatalf("unexpected error (%v)", err) } } @@ -1776,7 +1777,7 @@ func testTLSReload( // 5. expect dial time-out when loading expired certs select { case gerr := <-errc: - if gerr != context.DeadlineExceeded { + if !errors.Is(gerr, context.DeadlineExceeded) { t.Fatalf("expected %v, got %v", context.DeadlineExceeded, gerr) } case <-time.After(5 * time.Second): From 1af229b8668c73b616d5cc846b6222b15e8bb20d Mon Sep 17 00:00:00 2001 From: redwrasse Date: Mon, 23 Sep 2024 21:55:52 -0700 Subject: [PATCH 3/4] tests: finish errors.Is equality cases Signed-off-by: redwrasse --- tests/e2e/ctl_v3_member_test.go | 5 +++-- tests/e2e/ctl_v3_snapshot_test.go | 3 ++- .../clientv3/concurrency/example_mutex_test.go | 3 ++- .../clientv3/connectivity/black_hole_test.go | 11 ++++++----- .../clientv3/connectivity/network_partition_test.go | 4 ++-- .../clientv3/connectivity/server_shutdown_test.go | 3 ++- .../clientv3/experimental/recipes/v3_lock_test.go | 3 ++- tests/integration/v3_grpc_test.go | 2 +- 8 files changed, 20 insertions(+), 14 deletions(-) diff --git a/tests/e2e/ctl_v3_member_test.go b/tests/e2e/ctl_v3_member_test.go index bd045e5f6..08faf7419 100644 --- a/tests/e2e/ctl_v3_member_test.go +++ b/tests/e2e/ctl_v3_member_test.go @@ -17,6 +17,7 @@ package e2e import ( "context" "encoding/json" + "errors" "fmt" "io" "reflect" @@ -193,7 +194,7 @@ func getMemberList(cx ctlCtx, serializable bool) (etcdserverpb.MemberListRespons resp := etcdserverpb.MemberListResponse{} dec := json.NewDecoder(strings.NewReader(txt)) - if err := dec.Decode(&resp); err == io.EOF { + if err := dec.Decode(&resp); errors.Is(err, io.EOF) { return etcdserverpb.MemberListResponse{}, err } return resp, nil @@ -221,7 +222,7 @@ func memberListWithHexTest(cx ctlCtx) { } hexResp := etcdserverpb.MemberListResponse{} dec := json.NewDecoder(strings.NewReader(txt)) - if err := dec.Decode(&hexResp); err == io.EOF { + if err := dec.Decode(&hexResp); errors.Is(err, io.EOF) { cx.t.Fatalf("memberListWithHexTest error (%v)", err) } num := len(resp.Members) diff --git a/tests/e2e/ctl_v3_snapshot_test.go b/tests/e2e/ctl_v3_snapshot_test.go index bb3f1f06f..b9ef782ff 100644 --- a/tests/e2e/ctl_v3_snapshot_test.go +++ b/tests/e2e/ctl_v3_snapshot_test.go @@ -17,6 +17,7 @@ package e2e import ( "context" "encoding/json" + "errors" "fmt" "io" "os" @@ -156,7 +157,7 @@ func getSnapshotStatus(cx ctlCtx, fpath string) (snapshot.Status, error) { resp := snapshot.Status{} dec := json.NewDecoder(strings.NewReader(txt)) - if err := dec.Decode(&resp); err == io.EOF { + if err := dec.Decode(&resp); errors.Is(err, io.EOF) { return snapshot.Status{}, err } return resp, nil diff --git a/tests/integration/clientv3/concurrency/example_mutex_test.go b/tests/integration/clientv3/concurrency/example_mutex_test.go index c3b593aed..eba8c543f 100644 --- a/tests/integration/clientv3/concurrency/example_mutex_test.go +++ b/tests/integration/clientv3/concurrency/example_mutex_test.go @@ -16,6 +16,7 @@ package concurrency_test import ( "context" + "errors" "fmt" "log" @@ -64,7 +65,7 @@ func ExampleMutex_TryLock() { if err = m2.TryLock(context.TODO()); err == nil { log.Fatal("should not acquire lock") } - if err == concurrency.ErrLocked { + if errors.Is(err, concurrency.ErrLocked) { fmt.Println("cannot acquire lock for s2, as already locked in another session") } diff --git a/tests/integration/clientv3/connectivity/black_hole_test.go b/tests/integration/clientv3/connectivity/black_hole_test.go index c0e16aefe..e1fc1c57b 100644 --- a/tests/integration/clientv3/connectivity/black_hole_test.go +++ b/tests/integration/clientv3/connectivity/black_hole_test.go @@ -18,6 +18,7 @@ package connectivity_test import ( "context" + "errors" "testing" "time" @@ -113,7 +114,7 @@ func TestBalancerUnderBlackholeKeepAliveWatch(t *testing.T) { func TestBalancerUnderBlackholeNoKeepAlivePut(t *testing.T) { testBalancerUnderBlackholeNoKeepAlive(t, func(cli *clientv3.Client, ctx context.Context) error { _, err := cli.Put(ctx, "foo", "bar") - if clientv3test.IsClientTimeout(err) || clientv3test.IsServerCtxTimeout(err) || err == rpctypes.ErrTimeout { + if clientv3test.IsClientTimeout(err) || clientv3test.IsServerCtxTimeout(err) || errors.Is(err, rpctypes.ErrTimeout) { return errExpected } return err @@ -123,7 +124,7 @@ func TestBalancerUnderBlackholeNoKeepAlivePut(t *testing.T) { func TestBalancerUnderBlackholeNoKeepAliveDelete(t *testing.T) { testBalancerUnderBlackholeNoKeepAlive(t, func(cli *clientv3.Client, ctx context.Context) error { _, err := cli.Delete(ctx, "foo") - if clientv3test.IsClientTimeout(err) || clientv3test.IsServerCtxTimeout(err) || err == rpctypes.ErrTimeout { + if clientv3test.IsClientTimeout(err) || clientv3test.IsServerCtxTimeout(err) || errors.Is(err, rpctypes.ErrTimeout) { return errExpected } return err @@ -136,7 +137,7 @@ func TestBalancerUnderBlackholeNoKeepAliveTxn(t *testing.T) { If(clientv3.Compare(clientv3.Version("foo"), "=", 0)). Then(clientv3.OpPut("foo", "bar")). Else(clientv3.OpPut("foo", "baz")).Commit() - if clientv3test.IsClientTimeout(err) || clientv3test.IsServerCtxTimeout(err) || err == rpctypes.ErrTimeout { + if clientv3test.IsClientTimeout(err) || clientv3test.IsServerCtxTimeout(err) || errors.Is(err, rpctypes.ErrTimeout) { return errExpected } return err @@ -146,7 +147,7 @@ func TestBalancerUnderBlackholeNoKeepAliveTxn(t *testing.T) { func TestBalancerUnderBlackholeNoKeepAliveLinearizableGet(t *testing.T) { testBalancerUnderBlackholeNoKeepAlive(t, func(cli *clientv3.Client, ctx context.Context) error { _, err := cli.Get(ctx, "a") - if clientv3test.IsClientTimeout(err) || clientv3test.IsServerCtxTimeout(err) || err == rpctypes.ErrTimeout { + if clientv3test.IsClientTimeout(err) || clientv3test.IsServerCtxTimeout(err) || errors.Is(err, rpctypes.ErrTimeout) { return errExpected } return err @@ -207,7 +208,7 @@ func testBalancerUnderBlackholeNoKeepAlive(t *testing.T, op func(*clientv3.Clien cancel() if err == nil { break - } else if err == errExpected { + } else if errors.Is(err, errExpected) { t.Logf("#%d: current error %v", i, err) } else { t.Errorf("#%d: failed with error %v", i, err) diff --git a/tests/integration/clientv3/connectivity/network_partition_test.go b/tests/integration/clientv3/connectivity/network_partition_test.go index cb421a84e..6c99c32d0 100644 --- a/tests/integration/clientv3/connectivity/network_partition_test.go +++ b/tests/integration/clientv3/connectivity/network_partition_test.go @@ -35,7 +35,7 @@ var errExpected = errors.New("expected error") func isErrorExpected(err error) bool { return clientv3test.IsClientTimeout(err) || clientv3test.IsServerCtxTimeout(err) || - err == rpctypes.ErrTimeout || err == rpctypes.ErrTimeoutDueToLeaderFail + errors.Is(err, rpctypes.ErrTimeout) || errors.Is(err, rpctypes.ErrTimeoutDueToLeaderFail) } // TestBalancerUnderNetworkPartitionPut tests when one member becomes isolated, @@ -322,7 +322,7 @@ func TestDropReadUnderNetworkPartition(t *testing.T) { _, err = kvc.Get(ctx, "a") cancel() if err != nil { - if err == rpctypes.ErrTimeout { + if errors.Is(err, rpctypes.ErrTimeout) { <-time.After(time.Second) i++ continue diff --git a/tests/integration/clientv3/connectivity/server_shutdown_test.go b/tests/integration/clientv3/connectivity/server_shutdown_test.go index a75efa0f8..3afc8eb4c 100644 --- a/tests/integration/clientv3/connectivity/server_shutdown_test.go +++ b/tests/integration/clientv3/connectivity/server_shutdown_test.go @@ -17,6 +17,7 @@ package connectivity_test import ( "bytes" "context" + "errors" "fmt" "testing" "time" @@ -101,7 +102,7 @@ func TestBalancerUnderServerShutdownWatch(t *testing.T) { if err == nil { break } - if clientv3test.IsClientTimeout(err) || clientv3test.IsServerCtxTimeout(err) || err == rpctypes.ErrTimeout || err == rpctypes.ErrTimeoutDueToLeaderFail { + if clientv3test.IsClientTimeout(err) || clientv3test.IsServerCtxTimeout(err) || errors.Is(err, rpctypes.ErrTimeout) || errors.Is(err, rpctypes.ErrTimeoutDueToLeaderFail) { continue } t.Fatal(err) diff --git a/tests/integration/clientv3/experimental/recipes/v3_lock_test.go b/tests/integration/clientv3/experimental/recipes/v3_lock_test.go index 79f616620..1fcbc46e1 100644 --- a/tests/integration/clientv3/experimental/recipes/v3_lock_test.go +++ b/tests/integration/clientv3/experimental/recipes/v3_lock_test.go @@ -16,6 +16,7 @@ package recipes_test import ( "context" + "errors" "fmt" "math/rand" "sync" @@ -139,7 +140,7 @@ func testMutexTryLock(t *testing.T, lockers int, chooseClient func() *clientv3.C case <-ctx.Done(): t.Errorf("Thread: %v, Context failed: %v", i, err) } - } else if err == concurrency.ErrLocked { + } else if errors.Is(err, concurrency.ErrLocked) { select { case notlockedC <- m: case <-ctx.Done(): diff --git a/tests/integration/v3_grpc_test.go b/tests/integration/v3_grpc_test.go index 60b5eaccb..8efeb5d52 100644 --- a/tests/integration/v3_grpc_test.go +++ b/tests/integration/v3_grpc_test.go @@ -115,7 +115,7 @@ func TestV3PutRestart(t *testing.T) { defer cancel() reqput := &pb.PutRequest{Key: []byte("foo"), Value: []byte("bar")} _, err := kvc.Put(ctx, reqput) - if err != nil && err == ctx.Err() { + if err != nil && errors.Is(err, ctx.Err()) { t.Fatalf("expected grpc error, got local ctx error (%v)", err) } } From 26d26d0cecd39f72fd896eb0af102e3ad5fa61ac Mon Sep 17 00:00:00 2001 From: redwrasse Date: Tue, 24 Sep 2024 16:59:08 -0700 Subject: [PATCH 4/4] tests: additional remaining errors.Is Signed-off-by: redwrasse --- tests/integration/clientv3/maintenance_test.go | 2 +- tests/integration/clientv3/watch_test.go | 3 ++- tests/integration/v3_grpc_test.go | 2 +- tests/integration/v3_lease_test.go | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/integration/clientv3/maintenance_test.go b/tests/integration/clientv3/maintenance_test.go index 3de3d389c..f6702d3f7 100644 --- a/tests/integration/clientv3/maintenance_test.go +++ b/tests/integration/clientv3/maintenance_test.go @@ -304,7 +304,7 @@ func testMaintenanceSnapshotErrorInflight(t *testing.T, snapshot func(context.Co close(donec) }() _, err = io.Copy(io.Discard, rc1) - if err != nil && err != context.Canceled { + if err != nil && !errors.Is(err, context.Canceled) { t.Errorf("expected %v, got %v", context.Canceled, err) } <-donec diff --git a/tests/integration/clientv3/watch_test.go b/tests/integration/clientv3/watch_test.go index bc76c8187..aecfb6c68 100644 --- a/tests/integration/clientv3/watch_test.go +++ b/tests/integration/clientv3/watch_test.go @@ -16,6 +16,7 @@ package clientv3test import ( "context" + "errors" "fmt" "math/rand" "reflect" @@ -809,7 +810,7 @@ func TestWatchAfterClose(t *testing.T) { donec := make(chan struct{}) go func() { cli.Watch(context.TODO(), "foo") - if err := cli.Close(); err != nil && err != context.Canceled { + if err := cli.Close(); err != nil && !errors.Is(err, context.Canceled) { t.Errorf("expected %v, got %v", context.Canceled, err) } close(donec) diff --git a/tests/integration/v3_grpc_test.go b/tests/integration/v3_grpc_test.go index 8efeb5d52..5a0bdacd8 100644 --- a/tests/integration/v3_grpc_test.go +++ b/tests/integration/v3_grpc_test.go @@ -1562,7 +1562,7 @@ func TestTLSGRPCRejectInsecureClient(t *testing.T) { // nil out TLS field so client will use an insecure connection clus.Members[0].ClientTLSInfo = nil client, err := integration.NewClientV3(clus.Members[0]) - if err != nil && err != context.DeadlineExceeded { + if err != nil && !errors.Is(err, context.DeadlineExceeded) { t.Fatalf("unexpected error (%v)", err) } else if client == nil { // Ideally, no client would be returned. However, grpc will diff --git a/tests/integration/v3_lease_test.go b/tests/integration/v3_lease_test.go index d9d9a7423..c1288de0c 100644 --- a/tests/integration/v3_lease_test.go +++ b/tests/integration/v3_lease_test.go @@ -1086,7 +1086,7 @@ func testV3LeaseTimeToLiveWithLeaderChanged(t *testing.T, fpName string) { require.NoError(t, gofail.Enable(fpName, `sleep("3s")`)) t.Cleanup(func() { terr := gofail.Disable(fpName) - if terr != nil && terr != gofail.ErrDisabled { + if terr != nil && !errors.Is(terr, gofail.ErrDisabled) { t.Fatalf("failed to disable %s: %v", fpName, terr) } })