@@ -3249,6 +3249,7 @@ func testMetadataUnaryRPC(t *testing.T, e env) {
32493249 delete (header , "date" ) // the Date header is also optional
32503250 delete (header , "user-agent" )
32513251 delete (header , "content-type" )
3252+ delete (header , "grpc-accept-encoding" )
32523253 }
32533254 if ! reflect .DeepEqual (header , testMetadata ) {
32543255 t .Fatalf ("Received header metadata %v, want %v" , header , testMetadata )
@@ -3288,6 +3289,7 @@ func testMetadataOrderUnaryRPC(t *testing.T, e env) {
32883289 delete (header , "date" ) // the Date header is also optional
32893290 delete (header , "user-agent" )
32903291 delete (header , "content-type" )
3292+ delete (header , "grpc-accept-encoding" )
32913293 }
32923294
32933295 if ! reflect .DeepEqual (header , newMetadata ) {
@@ -3400,6 +3402,8 @@ func testSetAndSendHeaderUnaryRPC(t *testing.T, e env) {
34003402 }
34013403 delete (header , "user-agent" )
34023404 delete (header , "content-type" )
3405+ delete (header , "grpc-accept-encoding" )
3406+
34033407 expectedHeader := metadata .Join (testMetadata , testMetadata2 )
34043408 if ! reflect .DeepEqual (header , expectedHeader ) {
34053409 t .Fatalf ("Received header metadata %v, want %v" , header , expectedHeader )
@@ -3444,6 +3448,7 @@ func testMultipleSetHeaderUnaryRPC(t *testing.T, e env) {
34443448 }
34453449 delete (header , "user-agent" )
34463450 delete (header , "content-type" )
3451+ delete (header , "grpc-accept-encoding" )
34473452 expectedHeader := metadata .Join (testMetadata , testMetadata2 )
34483453 if ! reflect .DeepEqual (header , expectedHeader ) {
34493454 t .Fatalf ("Received header metadata %v, want %v" , header , expectedHeader )
@@ -3487,6 +3492,7 @@ func testMultipleSetHeaderUnaryRPCError(t *testing.T, e env) {
34873492 }
34883493 delete (header , "user-agent" )
34893494 delete (header , "content-type" )
3495+ delete (header , "grpc-accept-encoding" )
34903496 expectedHeader := metadata .Join (testMetadata , testMetadata2 )
34913497 if ! reflect .DeepEqual (header , expectedHeader ) {
34923498 t .Fatalf ("Received header metadata %v, want %v" , header , expectedHeader )
@@ -3527,6 +3533,7 @@ func testSetAndSendHeaderStreamingRPC(t *testing.T, e env) {
35273533 }
35283534 delete (header , "user-agent" )
35293535 delete (header , "content-type" )
3536+ delete (header , "grpc-accept-encoding" )
35303537 expectedHeader := metadata .Join (testMetadata , testMetadata2 )
35313538 if ! reflect .DeepEqual (header , expectedHeader ) {
35323539 t .Fatalf ("Received header metadata %v, want %v" , header , expectedHeader )
@@ -3590,6 +3597,7 @@ func testMultipleSetHeaderStreamingRPC(t *testing.T, e env) {
35903597 }
35913598 delete (header , "user-agent" )
35923599 delete (header , "content-type" )
3600+ delete (header , "grpc-accept-encoding" )
35933601 expectedHeader := metadata .Join (testMetadata , testMetadata2 )
35943602 if ! reflect .DeepEqual (header , expectedHeader ) {
35953603 t .Fatalf ("Received header metadata %v, want %v" , header , expectedHeader )
@@ -3650,6 +3658,7 @@ func testMultipleSetHeaderStreamingRPCError(t *testing.T, e env) {
36503658 }
36513659 delete (header , "user-agent" )
36523660 delete (header , "content-type" )
3661+ delete (header , "grpc-accept-encoding" )
36533662 expectedHeader := metadata .Join (testMetadata , testMetadata2 )
36543663 if ! reflect .DeepEqual (header , expectedHeader ) {
36553664 t .Fatalf ("Received header metadata %v, want %v" , header , expectedHeader )
@@ -3981,6 +3990,7 @@ func testMetadataStreamingRPC(t *testing.T, e env) {
39813990 delete (headerMD , "trailer" ) // ignore if present
39823991 delete (headerMD , "user-agent" )
39833992 delete (headerMD , "content-type" )
3993+ delete (headerMD , "grpc-accept-encoding" )
39843994 if err != nil || ! reflect .DeepEqual (testMetadata , headerMD ) {
39853995 t .Errorf ("#1 %v.Header() = %v, %v, want %v, <nil>" , stream , headerMD , err , testMetadata )
39863996 }
@@ -3989,6 +3999,7 @@ func testMetadataStreamingRPC(t *testing.T, e env) {
39893999 delete (headerMD , "trailer" ) // ignore if present
39904000 delete (headerMD , "user-agent" )
39914001 delete (headerMD , "content-type" )
4002+ delete (headerMD , "grpc-accept-encoding" )
39924003 if err != nil || ! reflect .DeepEqual (testMetadata , headerMD ) {
39934004 t .Errorf ("#2 %v.Header() = %v, %v, want %v, <nil>" , stream , headerMD , err , testMetadata )
39944005 }
@@ -5431,6 +5442,72 @@ func (s) TestForceServerCodec(t *testing.T) {
54315442 }
54325443}
54335444
5445+ // renameCompressor is a grpc.Compressor wrapper that allows customizing the
5446+ // Type() of another compressor.
5447+ type renameCompressor struct {
5448+ grpc.Compressor
5449+ name string
5450+ }
5451+
5452+ func (r * renameCompressor ) Type () string { return r .name }
5453+
5454+ // renameDecompressor is a grpc.Decompressor wrapper that allows customizing the
5455+ // Type() of another Decompressor.
5456+ type renameDecompressor struct {
5457+ grpc.Decompressor
5458+ name string
5459+ }
5460+
5461+ func (r * renameDecompressor ) Type () string { return r .name }
5462+
5463+ func (s ) TestClientForwardsGrpcAcceptEncodingHeader (t * testing.T ) {
5464+ wantGrpcAcceptEncodingCh := make (chan []string , 1 )
5465+ defer close (wantGrpcAcceptEncodingCh )
5466+
5467+ compressor := renameCompressor {Compressor : grpc .NewGZIPCompressor (), name : "testgzip" }
5468+ decompressor := renameDecompressor {Decompressor : grpc .NewGZIPDecompressor (), name : "testgzip" }
5469+
5470+ ss := & stubserver.StubServer {
5471+ EmptyCallF : func (ctx context.Context , in * testpb.Empty ) (* testpb.Empty , error ) {
5472+ md , ok := metadata .FromIncomingContext (ctx )
5473+ if ! ok {
5474+ return nil , status .Errorf (codes .Internal , "no metadata in context" )
5475+ }
5476+ if got , want := md ["grpc-accept-encoding" ], <- wantGrpcAcceptEncodingCh ; ! reflect .DeepEqual (got , want ) {
5477+ return nil , status .Errorf (codes .Internal , "got grpc-accept-encoding=%q; want [%q]" , got , want )
5478+ }
5479+ return & testpb.Empty {}, nil
5480+ },
5481+ }
5482+ if err := ss .Start ([]grpc.ServerOption {grpc .RPCDecompressor (& decompressor )}); err != nil {
5483+ t .Fatalf ("Error starting endpoint server: %v" , err )
5484+ }
5485+ defer ss .Stop ()
5486+
5487+ ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
5488+ defer cancel ()
5489+
5490+ wantGrpcAcceptEncodingCh <- []string {"gzip" }
5491+ if _ , err := ss .Client .EmptyCall (ctx , & testpb.Empty {}); err != nil {
5492+ t .Fatalf ("ss.Client.EmptyCall(_, _) = _, %v; want _, nil" , err )
5493+ }
5494+
5495+ wantGrpcAcceptEncodingCh <- []string {"gzip" }
5496+ if _ , err := ss .Client .EmptyCall (ctx , & testpb.Empty {}, grpc .UseCompressor ("gzip" )); err != nil {
5497+ t .Fatalf ("ss.Client.EmptyCall(_, _) = _, %v; want _, nil" , err )
5498+ }
5499+
5500+ // Use compressor directly which is not registered via
5501+ // encoding.RegisterCompressor.
5502+ if err := ss .StartClient (grpc .WithCompressor (& compressor )); err != nil {
5503+ t .Fatalf ("Error starting client: %v" , err )
5504+ }
5505+ wantGrpcAcceptEncodingCh <- []string {"gzip,testgzip" }
5506+ if _ , err := ss .Client .EmptyCall (ctx , & testpb.Empty {}); err != nil {
5507+ t .Fatalf ("ss.Client.EmptyCall(_, _) = _, %v; want _, nil" , err )
5508+ }
5509+ }
5510+
54345511func (s ) TestUnaryProxyDoesNotForwardMetadata (t * testing.T ) {
54355512 const mdkey = "somedata"
54365513
0 commit comments