util_test.go (etcd-3.5.6) | : | util_test.go (etcd-3.5.7) | ||
---|---|---|---|---|
skipping to change at line 23 | skipping to change at line 23 | |||
// limitations under the License. | // limitations under the License. | |||
package etcdserver | package etcdserver | |||
import ( | import ( | |||
"net/http" | "net/http" | |||
"testing" | "testing" | |||
"time" | "time" | |||
"go.uber.org/zap" | "go.uber.org/zap" | |||
"go.uber.org/zap/zaptest" | ||||
pb "go.etcd.io/etcd/api/v3/etcdserverpb" | ||||
"go.etcd.io/etcd/client/pkg/v3/types" | "go.etcd.io/etcd/client/pkg/v3/types" | |||
"go.etcd.io/etcd/raft/v3/raftpb" | "go.etcd.io/etcd/raft/v3/raftpb" | |||
"go.etcd.io/etcd/server/v3/etcdserver/api/membership" | "go.etcd.io/etcd/server/v3/etcdserver/api/membership" | |||
"go.etcd.io/etcd/server/v3/etcdserver/api/rafthttp" | "go.etcd.io/etcd/server/v3/etcdserver/api/rafthttp" | |||
"go.etcd.io/etcd/server/v3/etcdserver/api/snap" | "go.etcd.io/etcd/server/v3/etcdserver/api/snap" | |||
) | ) | |||
func TestLongestConnected(t *testing.T) { | func TestLongestConnected(t *testing.T) { | |||
umap, err := types.NewURLsMap("mem1=http://10.1:2379,mem2=http://10.2:237 9,mem3=http://10.3:2379") | umap, err := types.NewURLsMap("mem1=http://10.1:2379,mem2=http://10.2:237 9,mem3=http://10.3:2379") | |||
if err != nil { | if err != nil { | |||
skipping to change at line 113 | skipping to change at line 115 | |||
if s := p.String(); s != "test" { | if s := p.String(); s != "test" { | |||
t.Fatalf("expected 'test', got %q", s) | t.Fatalf("expected 'test', got %q", s) | |||
} | } | |||
} | } | |||
type testStringerFunc func() string | type testStringerFunc func() string | |||
func (s testStringerFunc) String() string { | func (s testStringerFunc) String() string { | |||
return s() | return s() | |||
} | } | |||
// TestWarnOfExpensiveReadOnlyTxnRequest verifies WarnOfExpensiveReadOnlyTxnRequ | ||||
est | ||||
// never panic no matter what data the txnResponse contains. | ||||
func TestWarnOfExpensiveReadOnlyTxnRequest(t *testing.T) { | ||||
testCases := []struct { | ||||
name string | ||||
txnResp *pb.TxnResponse | ||||
}{ | ||||
{ | ||||
name: "all readonly responses", | ||||
txnResp: &pb.TxnResponse{ | ||||
Responses: []*pb.ResponseOp{ | ||||
{ | ||||
Response: &pb.ResponseOp_Response | ||||
Range{ | ||||
ResponseRange: &pb.RangeR | ||||
esponse{}, | ||||
}, | ||||
}, | ||||
{ | ||||
Response: &pb.ResponseOp_Response | ||||
Range{ | ||||
ResponseRange: &pb.RangeR | ||||
esponse{}, | ||||
}, | ||||
}, | ||||
}, | ||||
}, | ||||
}, | ||||
{ | ||||
name: "all readonly responses with partial nil responses" | ||||
, | ||||
txnResp: &pb.TxnResponse{ | ||||
Responses: []*pb.ResponseOp{ | ||||
{ | ||||
Response: &pb.ResponseOp_Response | ||||
Range{ | ||||
ResponseRange: &pb.RangeR | ||||
esponse{}, | ||||
}, | ||||
}, | ||||
{ | ||||
Response: &pb.ResponseOp_Response | ||||
Range{ | ||||
ResponseRange: nil, | ||||
}, | ||||
}, | ||||
}, | ||||
}, | ||||
}, | ||||
{ | ||||
name: "all readonly responses with all nil responses", | ||||
txnResp: &pb.TxnResponse{ | ||||
Responses: []*pb.ResponseOp{ | ||||
{ | ||||
Response: &pb.ResponseOp_Response | ||||
Range{ | ||||
ResponseRange: nil, | ||||
}, | ||||
}, | ||||
{ | ||||
Response: &pb.ResponseOp_Response | ||||
Range{ | ||||
ResponseRange: nil, | ||||
}, | ||||
}, | ||||
}, | ||||
}, | ||||
}, | ||||
{ | ||||
name: "partial non readonly responses", | ||||
txnResp: &pb.TxnResponse{ | ||||
Responses: []*pb.ResponseOp{ | ||||
{ | ||||
Response: &pb.ResponseOp_Response | ||||
Range{ | ||||
ResponseRange: nil, | ||||
}, | ||||
}, | ||||
{ | ||||
Response: &pb.ResponseOp_Response | ||||
Put{}, | ||||
}, | ||||
{ | ||||
Response: &pb.ResponseOp_Response | ||||
DeleteRange{}, | ||||
}, | ||||
}, | ||||
}, | ||||
}, | ||||
{ | ||||
name: "all non readonly responses", | ||||
txnResp: &pb.TxnResponse{ | ||||
Responses: []*pb.ResponseOp{ | ||||
{ | ||||
Response: &pb.ResponseOp_Response | ||||
Put{}, | ||||
}, | ||||
{ | ||||
Response: &pb.ResponseOp_Response | ||||
DeleteRange{}, | ||||
}, | ||||
}, | ||||
}, | ||||
}, | ||||
} | ||||
for _, tc := range testCases { | ||||
tc := tc | ||||
t.Run(tc.name, func(t *testing.T) { | ||||
lg := zaptest.NewLogger(t) | ||||
start := time.Now().Add(-1 * time.Second) | ||||
// WarnOfExpensiveReadOnlyTxnRequest shouldn't panic. | ||||
warnOfExpensiveReadOnlyTxnRequest(lg, 0, start, &pb.TxnRe | ||||
quest{}, tc.txnResp, nil) | ||||
}) | ||||
} | ||||
} | ||||
End of changes. 3 change blocks. | ||||
0 lines changed or deleted | 2 lines changed or added |