MCPcopy
hub / github.com/grpc/grpc-go / TestDecompress

Method TestDecompress

rpc_util_test.go:464–558  ·  view source on GitHub ↗

TestDecompress tests the decompress function behaves correctly for following scenarios decompress successfully when message is <= maxReceiveMessageSize errors when message > maxReceiveMessageSize decompress successfully when maxReceiveMessageSize is MaxInt errors when the decompressed message has an

(t *testing.T)

Source from the content-addressed store, hash-verified

462// errors when the decompressed message has an invalid format
463// errors when the decompressed message exceeds the maxReceiveMessageSize.
464func (s) TestDecompress(t *testing.T) {
465 compressor := encoding.GetCompressor("gzip")
466 validDecompressor := &MockDecompressor{ShouldError: false}
467 invalidFormatDecompressor := &MockDecompressor{ShouldError: true}
468
469 testCases := []struct {
470 name string
471 input mem.BufferSlice
472 dc Decompressor
473 maxReceiveMessageSize int
474 want []byte
475 wantErr error
476 }{
477 {
478 name: "Decompresses successfully with sufficient buffer size",
479 input: mustCompress(t, []byte("decompressed data")),
480 dc: nil,
481 maxReceiveMessageSize: 50,
482 want: []byte("decompressed data"),
483 wantErr: nil,
484 },
485 {
486 name: "Fails due to exceeding maxReceiveMessageSize",
487 input: mustCompress(t, []byte("message that is too large")),
488 dc: nil,
489 maxReceiveMessageSize: len("message that is too large") - 1,
490 want: nil,
491 wantErr: status.Errorf(codes.ResourceExhausted, "grpc: received message after decompression larger than max %d", len("message that is too large")-1),
492 },
493 {
494 name: "Decompresses to exactly maxReceiveMessageSize",
495 input: mustCompress(t, []byte("exact size message")),
496 dc: nil,
497 maxReceiveMessageSize: len("exact size message"),
498 want: []byte("exact size message"),
499 wantErr: nil,
500 },
501 {
502 name: "Decompresses successfully with maxReceiveMessageSize MaxInt",
503 input: mustCompress(t, []byte("large message")),
504 dc: nil,
505 maxReceiveMessageSize: math.MaxInt,
506 want: []byte("large message"),
507 wantErr: nil,
508 },
509 {
510 name: "Fails with decompression error due to invalid format",
511 input: mustCompress(t, []byte("invalid compressed data")),
512 dc: invalidFormatDecompressor,
513 maxReceiveMessageSize: 50,
514 want: nil,
515 wantErr: status.Errorf(codes.Internal, "grpc: failed to decompress the received message: %v", errors.New(decompressionErrorMsg)),
516 },
517 {
518 name: "Fails with resourceExhausted error when decompressed message exceeds maxReceiveMessageSize",
519 input: mustCompress(t, []byte("large compressed data")),
520 dc: validDecompressor,
521 maxReceiveMessageSize: 20,

Callers

nothing calls this directly

Calls 9

GetCompressorFunction · 0.92
ErrorfFunction · 0.92
DefaultBufferPoolFunction · 0.92
mustCompressFunction · 0.85
NewGZIPDecompressorFunction · 0.85
decompressFunction · 0.85
MaterializeMethod · 0.80
EqualMethod · 0.65
FatalfMethod · 0.65

Tested by

no test coverage detected