Skip to content

Commit f4b5237

Browse files
authored
status: add Code convenience function (grpc#1754)
1 parent 47bddd7 commit f4b5237

File tree

11 files changed

+164
-170
lines changed

11 files changed

+164
-170
lines changed

balancer/roundrobin/roundrobin_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ import (
3030
"google.golang.org/grpc/balancer"
3131
"google.golang.org/grpc/codes"
3232
_ "google.golang.org/grpc/grpclog/glogger"
33-
"google.golang.org/grpc/internal"
3433
"google.golang.org/grpc/peer"
3534
"google.golang.org/grpc/resolver"
3635
"google.golang.org/grpc/resolver/manual"
36+
"google.golang.org/grpc/status"
3737
testpb "google.golang.org/grpc/test/grpc_testing"
3838
"google.golang.org/grpc/test/leakcheck"
3939
)
@@ -112,7 +112,7 @@ func TestOneBackend(t *testing.T) {
112112
// The first RPC should fail because there's no address.
113113
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond)
114114
defer cancel()
115-
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || internal.Code(err) != codes.DeadlineExceeded {
115+
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || status.Code(err) != codes.DeadlineExceeded {
116116
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
117117
}
118118

@@ -144,7 +144,7 @@ func TestBackendsRoundRobin(t *testing.T) {
144144
// The first RPC should fail because there's no address.
145145
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond)
146146
defer cancel()
147-
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || internal.Code(err) != codes.DeadlineExceeded {
147+
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || status.Code(err) != codes.DeadlineExceeded {
148148
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
149149
}
150150

@@ -203,7 +203,7 @@ func TestAddressesRemoved(t *testing.T) {
203203
// The first RPC should fail because there's no address.
204204
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond)
205205
defer cancel()
206-
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || internal.Code(err) != codes.DeadlineExceeded {
206+
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || status.Code(err) != codes.DeadlineExceeded {
207207
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
208208
}
209209

@@ -217,7 +217,7 @@ func TestAddressesRemoved(t *testing.T) {
217217
for i := 0; i < 1000; i++ {
218218
ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
219219
defer cancel()
220-
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); internal.Code(err) == codes.DeadlineExceeded {
220+
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); status.Code(err) == codes.DeadlineExceeded {
221221
return
222222
}
223223
time.Sleep(time.Millisecond)
@@ -249,7 +249,7 @@ func TestCloseWithPendingRPC(t *testing.T) {
249249
defer wg.Done()
250250
// This RPC blocks until cc is closed.
251251
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
252-
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); internal.Code(err) == codes.DeadlineExceeded {
252+
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); status.Code(err) == codes.DeadlineExceeded {
253253
t.Errorf("RPC failed because of deadline after cc is closed; want error the client connection is closing")
254254
}
255255
cancel()
@@ -279,7 +279,7 @@ func TestNewAddressWhileBlocking(t *testing.T) {
279279
// The first RPC should fail because there's no address.
280280
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond)
281281
defer cancel()
282-
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || internal.Code(err) != codes.DeadlineExceeded {
282+
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || status.Code(err) != codes.DeadlineExceeded {
283283
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
284284
}
285285

@@ -328,7 +328,7 @@ func TestOneServerDown(t *testing.T) {
328328
// The first RPC should fail because there's no address.
329329
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond)
330330
defer cancel()
331-
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || internal.Code(err) != codes.DeadlineExceeded {
331+
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || status.Code(err) != codes.DeadlineExceeded {
332332
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
333333
}
334334

@@ -426,7 +426,7 @@ func TestAllServersDown(t *testing.T) {
426426
// The first RPC should fail because there's no address.
427427
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond)
428428
defer cancel()
429-
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || internal.Code(err) != codes.DeadlineExceeded {
429+
if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || status.Code(err) != codes.DeadlineExceeded {
430430
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
431431
}
432432

@@ -470,7 +470,7 @@ func TestAllServersDown(t *testing.T) {
470470
}
471471
time.Sleep(100 * time.Millisecond)
472472
for i := 0; i < 1000; i++ {
473-
if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}); internal.Code(err) == codes.Unavailable {
473+
if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) == codes.Unavailable {
474474
return
475475
}
476476
time.Sleep(time.Millisecond)

balancer_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,12 @@ import (
3030
"google.golang.org/grpc/codes"
3131
_ "google.golang.org/grpc/grpclog/glogger"
3232
"google.golang.org/grpc/naming"
33+
"google.golang.org/grpc/status"
3334
"google.golang.org/grpc/test/leakcheck"
3435

3536
// V1 balancer tests use passthrough resolver instead of dns.
3637
// TODO(bar) remove this when removing v1 balaner entirely.
37-
"google.golang.org/grpc/internal"
38+
3839
_ "google.golang.org/grpc/resolver/passthrough"
3940
)
4041

@@ -253,7 +254,7 @@ func TestCloseWithPendingRPC(t *testing.T) {
253254
// Loop until the above update applies.
254255
for {
255256
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond)
256-
if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); internal.Code(err) == codes.DeadlineExceeded {
257+
if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); status.Code(err) == codes.DeadlineExceeded {
257258
cancel()
258259
break
259260
}
@@ -301,7 +302,7 @@ func TestGetOnWaitChannel(t *testing.T) {
301302
for {
302303
var reply string
303304
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond)
304-
if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); internal.Code(err) == codes.DeadlineExceeded {
305+
if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); status.Code(err) == codes.DeadlineExceeded {
305306
cancel()
306307
break
307308
}
@@ -512,7 +513,7 @@ func TestPickFirstCloseWithPendingRPC(t *testing.T) {
512513
// Loop until the above update applies.
513514
for {
514515
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond)
515-
if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); internal.Code(err) == codes.DeadlineExceeded {
516+
if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); status.Code(err) == codes.DeadlineExceeded {
516517
cancel()
517518
break
518519
}

call_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import (
3131

3232
"golang.org/x/net/context"
3333
"google.golang.org/grpc/codes"
34-
"google.golang.org/grpc/internal"
3534
"google.golang.org/grpc/status"
3635
"google.golang.org/grpc/test/leakcheck"
3736
"google.golang.org/grpc/transport"
@@ -234,7 +233,7 @@ func TestInvokeLargeErr(t *testing.T) {
234233
if _, ok := status.FromError(err); !ok {
235234
t.Fatalf("grpc.Invoke(_, _, _, _, _) receives non rpc error.")
236235
}
237-
if internal.Code(err) != codes.Internal || len(errorDesc(err)) != sizeLargeErr {
236+
if status.Code(err) != codes.Internal || len(errorDesc(err)) != sizeLargeErr {
238237
t.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, want an error of code %d and desc size %d", err, codes.Internal, sizeLargeErr)
239238
}
240239
cc.Close()

grpclb/grpclb_test.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ import (
3434
"time"
3535

3636
"github.com/golang/protobuf/proto"
37-
"google.golang.org/grpc/internal"
38-
3937
"golang.org/x/net/context"
4038
"google.golang.org/grpc"
4139
"google.golang.org/grpc/codes"
@@ -483,7 +481,7 @@ func TestDropRequest(t *testing.T) {
483481
for i := 0; i < 3; i++ {
484482
// Even RPCs should fail, because the 2st backend has
485483
// DropForLoadBalancing set to true.
486-
if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(failfast)); internal.Code(err) != codes.Unavailable {
484+
if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(failfast)); status.Code(err) != codes.Unavailable {
487485
t.Errorf("%v.EmptyCall(_, _) = _, %v, want _, %s", testC, err, codes.Unavailable)
488486
}
489487
// Odd RPCs should succeed since they choose the non-drop-request

internal/internal.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,9 @@
1919
// the godoc of the top-level grpc package.
2020
package internal
2121

22-
import (
23-
"google.golang.org/grpc/codes"
24-
"google.golang.org/grpc/status"
25-
)
26-
2722
// TestingUseHandlerImpl enables the http.Handler-based server implementation.
2823
// It must be called before Serve and requires TLS credentials.
2924
//
3025
// The provided grpcServer must be of type *grpc.Server. It is untyped
3126
// for circular dependency reasons.
3227
var TestingUseHandlerImpl func(grpcServer interface{})
33-
34-
// Code returns the error code for err if it was produced by the rpc system.
35-
// Otherwise, it returns codes.Unknown.
36-
func Code(err error) codes.Code {
37-
if s, ok := status.FromError(err); ok {
38-
return s.Code()
39-
}
40-
return codes.Unknown
41-
}

interop/http2/negative_http2_client.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ import (
3434
"google.golang.org/grpc"
3535
"google.golang.org/grpc/codes"
3636
"google.golang.org/grpc/grpclog"
37-
"google.golang.org/grpc/internal"
3837
"google.golang.org/grpc/interop"
3938
testpb "google.golang.org/grpc/interop/grpc_testing"
39+
"google.golang.org/grpc/status"
4040
)
4141

4242
var (
@@ -78,8 +78,8 @@ func rstAfterHeader(tc testpb.TestServiceClient) {
7878
if reply != nil {
7979
grpclog.Fatalf("Client received reply despite server sending rst stream after header")
8080
}
81-
if internal.Code(err) != codes.Internal {
82-
grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, internal.Code(err), codes.Internal)
81+
if status.Code(err) != codes.Internal {
82+
grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, status.Code(err), codes.Internal)
8383
}
8484
}
8585

@@ -89,8 +89,8 @@ func rstDuringData(tc testpb.TestServiceClient) {
8989
if reply != nil {
9090
grpclog.Fatalf("Client received reply despite server sending rst stream during data")
9191
}
92-
if internal.Code(err) != codes.Unknown {
93-
grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, internal.Code(err), codes.Unknown)
92+
if status.Code(err) != codes.Unknown {
93+
grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, status.Code(err), codes.Unknown)
9494
}
9595
}
9696

@@ -100,8 +100,8 @@ func rstAfterData(tc testpb.TestServiceClient) {
100100
if reply != nil {
101101
grpclog.Fatalf("Client received reply despite server sending rst stream after data")
102102
}
103-
if internal.Code(err) != codes.Internal {
104-
grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, internal.Code(err), codes.Internal)
103+
if status.Code(err) != codes.Internal {
104+
grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, status.Code(err), codes.Internal)
105105
}
106106
}
107107

interop/test_utils.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import (
3434
"google.golang.org/grpc"
3535
"google.golang.org/grpc/codes"
3636
"google.golang.org/grpc/grpclog"
37-
"google.golang.org/grpc/internal"
3837
testpb "google.golang.org/grpc/interop/grpc_testing"
3938
"google.golang.org/grpc/metadata"
4039
"google.golang.org/grpc/status"
@@ -232,7 +231,7 @@ func DoTimeoutOnSleepingServer(tc testpb.TestServiceClient, args ...grpc.CallOpt
232231
defer cancel()
233232
stream, err := tc.FullDuplexCall(ctx, args...)
234233
if err != nil {
235-
if internal.Code(err) == codes.DeadlineExceeded {
234+
if status.Code(err) == codes.DeadlineExceeded {
236235
return
237236
}
238237
grpclog.Fatalf("%v.FullDuplexCall(_) = _, %v", tc, err)
@@ -243,11 +242,11 @@ func DoTimeoutOnSleepingServer(tc testpb.TestServiceClient, args ...grpc.CallOpt
243242
Payload: pl,
244243
}
245244
if err := stream.Send(req); err != nil {
246-
if internal.Code(err) != codes.DeadlineExceeded {
245+
if status.Code(err) != codes.DeadlineExceeded {
247246
grpclog.Fatalf("%v.Send(_) = %v", stream, err)
248247
}
249248
}
250-
if _, err := stream.Recv(); internal.Code(err) != codes.DeadlineExceeded {
249+
if _, err := stream.Recv(); status.Code(err) != codes.DeadlineExceeded {
251250
grpclog.Fatalf("%v.Recv() = _, %v, want error code %d", stream, err, codes.DeadlineExceeded)
252251
}
253252
}
@@ -410,8 +409,8 @@ func DoCancelAfterBegin(tc testpb.TestServiceClient, args ...grpc.CallOption) {
410409
}
411410
cancel()
412411
_, err = stream.CloseAndRecv()
413-
if internal.Code(err) != codes.Canceled {
414-
grpclog.Fatalf("%v.CloseAndRecv() got error code %d, want %d", stream, internal.Code(err), codes.Canceled)
412+
if status.Code(err) != codes.Canceled {
413+
grpclog.Fatalf("%v.CloseAndRecv() got error code %d, want %d", stream, status.Code(err), codes.Canceled)
415414
}
416415
}
417416

@@ -440,8 +439,8 @@ func DoCancelAfterFirstResponse(tc testpb.TestServiceClient, args ...grpc.CallOp
440439
grpclog.Fatalf("%v.Recv() = %v", stream, err)
441440
}
442441
cancel()
443-
if _, err := stream.Recv(); internal.Code(err) != codes.Canceled {
444-
grpclog.Fatalf("%v compleled with error code %d, want %d", stream, internal.Code(err), codes.Canceled)
442+
if _, err := stream.Recv(); status.Code(err) != codes.Canceled {
443+
grpclog.Fatalf("%v compleled with error code %d, want %d", stream, status.Code(err), codes.Canceled)
445444
}
446445
}
447446

@@ -569,15 +568,15 @@ func DoStatusCodeAndMessage(tc testpb.TestServiceClient, args ...grpc.CallOption
569568
// DoUnimplementedService attempts to call a method from an unimplemented service.
570569
func DoUnimplementedService(tc testpb.UnimplementedServiceClient) {
571570
_, err := tc.UnimplementedCall(context.Background(), &testpb.Empty{})
572-
if internal.Code(err) != codes.Unimplemented {
573-
grpclog.Fatalf("%v.UnimplementedCall() = _, %v, want _, %v", tc, internal.Code(err), codes.Unimplemented)
571+
if status.Code(err) != codes.Unimplemented {
572+
grpclog.Fatalf("%v.UnimplementedCall() = _, %v, want _, %v", tc, status.Code(err), codes.Unimplemented)
574573
}
575574
}
576575

577576
// DoUnimplementedMethod attempts to call an unimplemented method.
578577
func DoUnimplementedMethod(cc *grpc.ClientConn) {
579578
var req, reply proto.Message
580-
if err := grpc.Invoke(context.Background(), "/grpc.testing.TestService/UnimplementedCall", req, reply, cc); err == nil || internal.Code(err) != codes.Unimplemented {
579+
if err := grpc.Invoke(context.Background(), "/grpc.testing.TestService/UnimplementedCall", req, reply, cc); err == nil || status.Code(err) != codes.Unimplemented {
581580
grpclog.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, want error code %s", err, codes.Unimplemented)
582581
}
583582
}

pickfirst_test.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626

2727
"golang.org/x/net/context"
2828
"google.golang.org/grpc/codes"
29-
"google.golang.org/grpc/internal"
3029
"google.golang.org/grpc/resolver"
3130
"google.golang.org/grpc/resolver/manual"
3231
"google.golang.org/grpc/status"
@@ -59,7 +58,7 @@ func TestOneBackendPickfirst(t *testing.T) {
5958
defer cancel()
6059
req := "port"
6160
var reply string
62-
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || internal.Code(err) != codes.DeadlineExceeded {
61+
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded {
6362
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
6463
}
6564

@@ -93,7 +92,7 @@ func TestBackendsPickfirst(t *testing.T) {
9392
defer cancel()
9493
req := "port"
9594
var reply string
96-
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || internal.Code(err) != codes.DeadlineExceeded {
95+
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded {
9796
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
9897
}
9998

@@ -127,7 +126,7 @@ func TestNewAddressWhileBlockingPickfirst(t *testing.T) {
127126
defer cancel()
128127
req := "port"
129128
var reply string
130-
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || internal.Code(err) != codes.DeadlineExceeded {
129+
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded {
131130
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
132131
}
133132

@@ -164,7 +163,7 @@ func TestCloseWithPendingRPCPickfirst(t *testing.T) {
164163
defer cancel()
165164
req := "port"
166165
var reply string
167-
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || internal.Code(err) != codes.DeadlineExceeded {
166+
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded {
168167
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
169168
}
170169

@@ -201,7 +200,7 @@ func TestOneServerDownPickfirst(t *testing.T) {
201200
defer cancel()
202201
req := "port"
203202
var reply string
204-
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || internal.Code(err) != codes.DeadlineExceeded {
203+
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded {
205204
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
206205
}
207206

@@ -243,7 +242,7 @@ func TestAllServersDownPickfirst(t *testing.T) {
243242
defer cancel()
244243
req := "port"
245244
var reply string
246-
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || internal.Code(err) != codes.DeadlineExceeded {
245+
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded {
247246
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
248247
}
249248

@@ -260,7 +259,7 @@ func TestAllServersDownPickfirst(t *testing.T) {
260259
servers[i].stop()
261260
}
262261
for i := 0; i < 1000; i++ {
263-
if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); internal.Code(err) == codes.Unavailable {
262+
if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); status.Code(err) == codes.Unavailable {
264263
return
265264
}
266265
time.Sleep(time.Millisecond)
@@ -287,7 +286,7 @@ func TestAddressesRemovedPickfirst(t *testing.T) {
287286
defer cancel()
288287
req := "port"
289288
var reply string
290-
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || internal.Code(err) != codes.DeadlineExceeded {
289+
if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded {
291290
t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err)
292291
}
293292

0 commit comments

Comments
 (0)