func TestChain(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() req := &transport.Request{ Caller: "somecaller", Service: "someservice", Encoding: transport.Encoding("raw"), Procedure: "hello", Body: bytes.NewReader([]byte{1, 2, 3}), } resw := new(transporttest.FakeResponseWriter) h := transporttest.NewMockUnaryHandler(mockCtrl) h.EXPECT().Handle(ctx, req, resw).After( h.EXPECT().Handle(ctx, req, resw).Return(errors.New("great sadness")), ).Return(nil) before := &countInterceptor{} after := &countInterceptor{} err := transport.ApplyInterceptor( h, Chain(before, retryInterceptor, after), ).Handle(ctx, req, resw) assert.NoError(t, err, "expected success") assert.Equal(t, 1, before.Count, "expected outer interceptor to be called once") assert.Equal(t, 2, after.Count, "expected inner interceptor to be called twice") }
func (d dispatcher) Register(rs []transport.Registrant) { registrants := make([]transport.Registrant, 0, len(rs)) for _, r := range rs { switch r.HandlerSpec.Type() { case transport.Unary: h := transport.ApplyInterceptor(r.HandlerSpec.Unary(), d.Interceptor) r.HandlerSpec = transport.NewUnaryHandlerSpec(h) case transport.Oneway: //TODO(apb): add oneway interceptors https://github.com/yarpc/yarpc-go/issues/413 default: panic(fmt.Sprintf("unknown handler type %q for service %q, procedure %q", r.HandlerSpec.Type(), r.Service, r.Procedure)) } registrants = append(registrants, r) } d.Registrar.Register(registrants) }
func TestNopInterceptor(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() h := transporttest.NewMockUnaryHandler(mockCtrl) wrappedH := transport.ApplyInterceptor(h, transport.NopInterceptor) ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() req := &transport.Request{ Caller: "somecaller", Service: "someservice", Encoding: raw.Encoding, Procedure: "hello", Body: bytes.NewReader([]byte{1, 2, 3}), } resw := new(transporttest.FakeResponseWriter) err := errors.New("great sadness") h.EXPECT().Handle(ctx, req, resw).Return(err) assert.Equal(t, err, wrappedH.Handle(ctx, req, resw)) }