integration: test large request response back from server
Address https://github.com/coreos/etcd/issues/9043. Won't fix it, but we need test coverage on response back from server as well. Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
This commit is contained in:
@ -1845,31 +1845,39 @@ func TestGRPCStreamRequireLeader(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestV3PutLargeRequests ensures that configurable MaxRequestBytes works as intended.
|
// TestV3LargeRequests ensures that configurable MaxRequestBytes works as intended.
|
||||||
func TestV3PutLargeRequests(t *testing.T) {
|
func TestV3LargeRequests(t *testing.T) {
|
||||||
defer testutil.AfterTest(t)
|
defer testutil.AfterTest(t)
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
key string
|
|
||||||
maxRequestBytes uint
|
maxRequestBytes uint
|
||||||
valueSize int
|
valueSize int
|
||||||
expectError error
|
expectError error
|
||||||
}{
|
}{
|
||||||
// don't set to 0. use 0 as the default.
|
// don't set to 0. use 0 as the default.
|
||||||
{"foo", 1, 1024, rpctypes.ErrGRPCRequestTooLarge},
|
{1, 1024, rpctypes.ErrGRPCRequestTooLarge},
|
||||||
{"foo", 10 * 1024 * 1024, 9 * 1024 * 1024, nil},
|
{10 * 1024 * 1024, 9 * 1024 * 1024, nil},
|
||||||
{"foo", 10 * 1024 * 1024, 10 * 1024 * 1024, rpctypes.ErrGRPCRequestTooLarge},
|
{10 * 1024 * 1024, 10 * 1024 * 1024, rpctypes.ErrGRPCRequestTooLarge},
|
||||||
{"foo", 10 * 1024 * 1024, 10*1024*1024 + 5, rpctypes.ErrGRPCRequestTooLarge},
|
{10 * 1024 * 1024, 10*1024*1024 + 5, rpctypes.ErrGRPCRequestTooLarge},
|
||||||
}
|
}
|
||||||
for i, test := range tests {
|
for i, test := range tests {
|
||||||
clus := NewClusterV3(t, &ClusterConfig{Size: 1, MaxRequestBytes: test.maxRequestBytes})
|
clus := NewClusterV3(t, &ClusterConfig{Size: 1, MaxRequestBytes: test.maxRequestBytes})
|
||||||
kvcli := toGRPC(clus.Client(0)).KV
|
kvcli := toGRPC(clus.Client(0)).KV
|
||||||
reqput := &pb.PutRequest{Key: []byte(test.key), Value: make([]byte, test.valueSize)}
|
reqput := &pb.PutRequest{Key: []byte("foo"), Value: make([]byte, test.valueSize)}
|
||||||
_, err := kvcli.Put(context.TODO(), reqput)
|
_, err := kvcli.Put(context.TODO(), reqput)
|
||||||
|
|
||||||
if !eqErrGRPC(err, test.expectError) {
|
if !eqErrGRPC(err, test.expectError) {
|
||||||
t.Errorf("#%d: expected error %v, got %v", i, test.expectError, err)
|
t.Errorf("#%d: expected error %v, got %v", i, test.expectError, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// request went through, expect large response back from server
|
||||||
|
if test.expectError == nil {
|
||||||
|
reqget := &pb.RangeRequest{Key: []byte("foo")}
|
||||||
|
// limit receive call size with original value + gRPC overhead bytes
|
||||||
|
_, err = kvcli.Range(context.TODO(), reqget, grpc.MaxCallRecvMsgSize(test.valueSize+512*1024))
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("#%d: range expected no error , got %v", i, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
clus.Terminate(t)
|
clus.Terminate(t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user