test: misc cleanups

* test header and metadata separately
* fix an incorrect error message
* ignore optional header fields in response (date, trailer)
This commit is contained in:
Brad Fitzpatrick
2016-02-10 21:37:18 +00:00
parent 51d644aca6
commit a62244ef28

View File

@ -61,10 +61,16 @@ import (
) )
var ( var (
// For headers:
testMetadata = metadata.MD{ testMetadata = metadata.MD{
"key1": []string{"value1"}, "key1": []string{"value1"},
"key2": []string{"value2"}, "key2": []string{"value2"},
} }
// For trailers:
testTrailerMetadata = metadata.MD{
"tkey1": []string{"trailerValue1"},
"tkey2": []string{"trailerValue2"},
}
testAppUA = "myApp1/1.0 myApp2/0.9" testAppUA = "myApp1/1.0 myApp2/0.9"
) )
@ -77,7 +83,7 @@ func (s *testServer) EmptyCall(ctx context.Context, in *testpb.Empty) (*testpb.E
// For testing purpose, returns an error if there is attached metadata other than // For testing purpose, returns an error if there is attached metadata other than
// the user agent set by the client application. // the user agent set by the client application.
if _, ok := md["user-agent"]; !ok { if _, ok := md["user-agent"]; !ok {
return nil, grpc.Errorf(codes.DataLoss, "got extra metadata") return nil, grpc.Errorf(codes.DataLoss, "missing expected user-agent")
} }
var str []string var str []string
for _, entry := range md["user-agent"] { for _, entry := range md["user-agent"] {
@ -112,7 +118,7 @@ func (s *testServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (*
if err := grpc.SendHeader(ctx, md); err != nil { if err := grpc.SendHeader(ctx, md); err != nil {
return nil, fmt.Errorf("grpc.SendHeader(%v, %v) = %v, want %v", ctx, md, err, nil) return nil, fmt.Errorf("grpc.SendHeader(%v, %v) = %v, want %v", ctx, md, err, nil)
} }
grpc.SetTrailer(ctx, md) grpc.SetTrailer(ctx, testTrailerMetadata)
} }
pr, ok := peer.FromContext(ctx) pr, ok := peer.FromContext(ctx)
if !ok { if !ok {
@ -631,8 +637,9 @@ func testFailedEmptyUnary(t *testing.T, e env) {
tc := testpb.NewTestServiceClient(cc) tc := testpb.NewTestServiceClient(cc)
defer tearDown(s, cc) defer tearDown(s, cc)
ctx := metadata.NewContext(context.Background(), testMetadata) ctx := metadata.NewContext(context.Background(), testMetadata)
if _, err := tc.EmptyCall(ctx, &testpb.Empty{}); err != grpc.Errorf(codes.DataLoss, "got extra metadata") { wantErr := grpc.Errorf(codes.DataLoss, "missing expected user-agent")
t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %v", err, grpc.Errorf(codes.DataLoss, "got extra metadata")) if _, err := tc.EmptyCall(ctx, &testpb.Empty{}); err != wantErr {
t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %v", err, wantErr)
} }
} }
@ -702,10 +709,15 @@ func testMetadataUnaryRPC(t *testing.T, e env) {
if _, err := tc.UnaryCall(ctx, req, grpc.Header(&header), grpc.Trailer(&trailer)); err != nil { if _, err := tc.UnaryCall(ctx, req, grpc.Header(&header), grpc.Trailer(&trailer)); err != nil {
t.Fatalf("TestService.UnaryCall(%v, _, _, _) = _, %v; want _, <nil>", ctx, err) t.Fatalf("TestService.UnaryCall(%v, _, _, _) = _, %v; want _, <nil>", ctx, err)
} }
// Ignore optional response headers that Servers may set:
if header != nil {
delete(header, "trailer") // RFC 2616 says server SHOULD (but optional) declare trailers
delete(header, "date") // the Date header is also optional
}
if !reflect.DeepEqual(header, testMetadata) { if !reflect.DeepEqual(header, testMetadata) {
t.Fatalf("Received header metadata %v, want %v", header, testMetadata) t.Fatalf("Received header metadata %v, want %v", header, testMetadata)
} }
if !reflect.DeepEqual(trailer, testMetadata) { if !reflect.DeepEqual(trailer, testTrailerMetadata) {
t.Fatalf("Received trailer metadata %v, want %v", trailer, testMetadata) t.Fatalf("Received trailer metadata %v, want %v", trailer, testMetadata)
} }
} }