From f00394e384b138caea4eff7de637687a885dcac5 Mon Sep 17 00:00:00 2001 From: Ziheng Liu Date: Thu, 30 Jan 2020 15:17:56 -0500 Subject: [PATCH] integration/clientv3: fix 4 API misusage in test functions --- clientv3/integration/lease_test.go | 13 +++++++++---- clientv3/integration/leasing_test.go | 13 +++++++++++-- integration/v3_election_test.go | 13 +++++++------ integration/v3_grpc_test.go | 7 ++++++- 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/clientv3/integration/lease_test.go b/clientv3/integration/lease_test.go index 439e683f4..e0b48c6ac 100644 --- a/clientv3/integration/lease_test.go +++ b/clientv3/integration/lease_test.go @@ -16,6 +16,7 @@ package integration import ( "context" + "fmt" "reflect" "sort" "sync" @@ -392,18 +393,22 @@ func TestLeaseRevokeNewAfterClose(t *testing.T) { t.Fatal(err) } - donec := make(chan struct{}) + errMsgCh := make(chan string, 1) go func() { _, err := cli.Revoke(context.TODO(), leaseID) if !clientv3.IsConnCanceled(err) { - t.Fatalf("expected %v or server unavailable, got %v", context.Canceled, err) + errMsgCh <- fmt.Sprintf("expected %v or server unavailable, got %v", context.Canceled, err) + } else { + errMsgCh <- "" } - close(donec) }() select { case <-time.After(integration.RequestWaitTimeout): t.Fatal("le.Revoke took too long") - case <-donec: + case errMsg := <-errMsgCh: + if errMsg != "" { + t.Fatalf(errMsg) + } } } diff --git a/clientv3/integration/leasing_test.go b/clientv3/integration/leasing_test.go index bf45bed78..2f79e656b 100644 --- a/clientv3/integration/leasing_test.go +++ b/clientv3/integration/leasing_test.go @@ -1575,12 +1575,16 @@ func TestLeasingTxnAtomicCache(t *testing.T) { var wgPutters, wgGetters sync.WaitGroup wgPutters.Add(numPutters) wgGetters.Add(numGetters) + txnerrCh := make(chan error, 1) f := func() { defer wgPutters.Done() for i := 0; i < 10; i++ { - if _, txnerr := lkv.Txn(context.TODO()).Then(puts...).Commit(); err != nil { - t.Fatal(txnerr) + if _, txnerr := lkv.Txn(context.TODO()).Then(puts...).Commit(); txnerr != nil { + select { + case txnerrCh <- txnerr: + default: + } } } } @@ -1619,6 +1623,11 @@ func TestLeasingTxnAtomicCache(t *testing.T) { } wgPutters.Wait() + select { + case txnerr := <-txnerrCh: + t.Fatal(txnerr) + default: + } close(donec) wgGetters.Wait() } diff --git a/integration/v3_election_test.go b/integration/v3_election_test.go index 835d3ebc0..b90d5f2a1 100644 --- a/integration/v3_election_test.go +++ b/integration/v3_election_test.go @@ -140,13 +140,11 @@ func TestElectionFailover(t *testing.T) { } // next leader - electedc := make(chan struct{}) + electedErrC := make(chan error, 1) go func() { ee := concurrency.NewElection(ss[1], "test-election") - if eer := ee.Campaign(context.TODO(), "bar"); eer != nil { - t.Fatal(eer) - } - electedc <- struct{}{} + eer := ee.Campaign(context.TODO(), "bar") + electedErrC <- eer // If eer != nil, the test will fail by calling t.Fatal(eer) }() // invoke leader failover @@ -166,7 +164,10 @@ func TestElectionFailover(t *testing.T) { } // leader must ack election (otherwise, Campaign may see closed conn) - <-electedc + eer := <-electedErrC + if eer != nil { + t.Fatal(eer) + } } // TestElectionSessionRelock ensures that campaigning twice on the same election diff --git a/integration/v3_grpc_test.go b/integration/v3_grpc_test.go index 64b94d490..70f12af7d 100644 --- a/integration/v3_grpc_test.go +++ b/integration/v3_grpc_test.go @@ -456,12 +456,14 @@ func TestV3TxnCmpHeaderRev(t *testing.T) { for i := 0; i < 10; i++ { // Concurrently put a key with a txn comparing on it. revc := make(chan int64, 1) + errCh := make(chan error, 1) go func() { defer close(revc) pr := &pb.PutRequest{Key: []byte("k"), Value: []byte("v")} presp, err := kvc.Put(context.TODO(), pr) + errCh <- err if err != nil { - t.Fatal(err) + return } revc <- presp.Header.Revision }() @@ -485,6 +487,9 @@ func TestV3TxnCmpHeaderRev(t *testing.T) { } prev := <-revc + if err := <-errCh; err != nil { + t.Fatal(err) + } // put followed txn; should eval to false if prev > tresp.Header.Revision && !tresp.Succeeded { t.Errorf("#%d: got else but put rev %d followed txn rev (%+v)", i, prev, tresp)