github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/kv/kvserver/batcheval/result/result_test.go (about) 1 // Copyright 2017 The Cockroach Authors. 2 // 3 // Use of this software is governed by the Business Source License 4 // included in the file licenses/BSL.txt. 5 // 6 // As of the Change Date specified in that file, in accordance with 7 // the Business Source License, use of this software will be governed 8 // by the Apache License, Version 2.0, included in the file 9 // licenses/APL.txt. 10 11 package result 12 13 import ( 14 "reflect" 15 "testing" 16 17 "github.com/cockroachdb/cockroach/pkg/kv/kvserver/kvserverpb" 18 "github.com/cockroachdb/cockroach/pkg/util/leaktest" 19 ) 20 21 func TestEvalResultIsZero(t *testing.T) { 22 defer leaktest.AfterTest(t)() 23 24 var p Result 25 if !p.IsZero() { 26 t.Fatalf("%v unexpectedly non-zero", p) 27 } 28 29 v := reflect.ValueOf(&p).Elem() 30 for i := 0; i < v.NumField(); i++ { 31 func() { 32 vf := v.Field(i) 33 if vf.CanAddr() { 34 vf = vf.Addr() 35 } 36 switch f := vf.Interface().(type) { 37 case *LocalResult: 38 f.GossipFirstRange = true 39 defer func() { f.GossipFirstRange = false }() 40 case *kvserverpb.ReplicatedEvalResult: 41 f.IsLeaseRequest = true 42 defer func() { f.IsLeaseRequest = false }() 43 case **kvserverpb.WriteBatch: 44 *f = new(kvserverpb.WriteBatch) 45 defer func() { *f = nil }() 46 case **kvserverpb.LogicalOpLog: 47 *f = new(kvserverpb.LogicalOpLog) 48 defer func() { *f = nil }() 49 default: 50 tf := v.Type().Field(i) 51 t.Fatalf("unknown field %s of type %s on %T", tf.Name, tf.Type, p) 52 } 53 54 if p.IsZero() { 55 t.Fatalf("%#v unexpectedly zero", p) 56 } 57 }() 58 59 if !p.IsZero() { 60 t.Fatalf("%v unexpectedly non-zero", p) 61 } 62 } 63 } 64 65 func TestMergeAndDestroy(t *testing.T) { 66 var r0, r1, r2 Result 67 r1.Local.Metrics = new(Metrics) 68 r2.Local.Metrics = new(Metrics) 69 70 r1.Local.Metrics.LeaseRequestSuccess = 7 71 72 r2.Local.Metrics.ResolveAbort = 13 73 r2.Local.Metrics.LeaseRequestSuccess = 2 74 75 if err := r0.MergeAndDestroy(r1); err != nil { 76 t.Fatal(err) 77 } 78 79 if err := r0.MergeAndDestroy(r2); err != nil { 80 t.Fatal(err) 81 } 82 83 if f, exp := *r1.Local.Metrics, (Metrics{LeaseRequestSuccess: 9, ResolveAbort: 13}); f != exp { 84 t.Fatalf("expected %d, got %d", exp, f) 85 } 86 }