client/http: add additional tests
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
parent
9c457a0c5e
commit
d3a0375892
@ -75,6 +75,21 @@ func TestNative(t *testing.T) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNativeWithoutPath(t *testing.T) {
|
||||||
|
c := client.NewClientCallOptions(mhttp.NewClient(client.ContentType("application/json"), client.Codec("application/json", jsoncodec.NewCodec())), client.WithAddress("https://api.github.com/users"))
|
||||||
|
gh := pb.NewGithubClient("github", c)
|
||||||
|
|
||||||
|
rsp, err := gh.LookupUserWithoutPath(context.TODO(), &pb.LookupUserReq{Username: "vtolstov"})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if rsp.Name != "Vasiliy Tolstov" {
|
||||||
|
t.Fatalf("invalid rsp received: %#+v\n", rsp)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func TestHTTPClient(t *testing.T) {
|
func TestHTTPClient(t *testing.T) {
|
||||||
reg := register.NewRegister()
|
reg := register.NewRegister()
|
||||||
rtr := rrouter.NewRouter(router.Register(reg))
|
rtr := rrouter.NewRouter(router.Register(reg))
|
||||||
|
@ -178,7 +178,7 @@ var file_github_proto_rawDesc = []byte{
|
|||||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x21, 0x0a, 0x05,
|
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x21, 0x0a, 0x05,
|
||||||
0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
|
0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
|
||||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32,
|
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32,
|
||||||
0x9f, 0x01, 0x0a, 0x06, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x12, 0x94, 0x01, 0x0a, 0x0a, 0x4c,
|
0xc6, 0x02, 0x0a, 0x06, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x12, 0x94, 0x01, 0x0a, 0x0a, 0x4c,
|
||||||
0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x12, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x68,
|
0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x12, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x68,
|
||||||
0x75, 0x62, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71,
|
0x75, 0x62, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71,
|
||||||
0x1a, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70,
|
0x1a, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70,
|
||||||
@ -188,11 +188,21 @@ var file_github_proto_rawDesc = []byte{
|
|||||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x11, 0x0a, 0x0f, 0x1a, 0x0d, 0x2e, 0x67, 0x69, 0x74, 0x68,
|
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x11, 0x0a, 0x0f, 0x1a, 0x0d, 0x2e, 0x67, 0x69, 0x74, 0x68,
|
||||||
0x75, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11,
|
0x75, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11,
|
||||||
0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65,
|
0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65,
|
||||||
0x7d, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
|
0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x15, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72,
|
||||||
0x2f, 0x75, 0x6e, 0x69, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x6d, 0x69,
|
0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x15, 0x2e, 0x67, 0x69,
|
||||||
0x63, 0x72, 0x6f, 0x2d, 0x74, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
|
0x74, 0x68, 0x75, 0x62, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x52,
|
||||||
0x2f, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x62, 0x62, 0x06,
|
0x65, 0x71, 0x1a, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, 0x73, 0x70, 0x22, 0x5d, 0x92, 0x41, 0x47, 0x2a, 0x15,
|
||||||
|
0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75,
|
||||||
|
0x74, 0x50, 0x61, 0x74, 0x68, 0x4a, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
|
||||||
|
0x12, 0x23, 0x0a, 0x0e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||||
|
0x73, 0x65, 0x12, 0x11, 0x0a, 0x0f, 0x1a, 0x0d, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
|
||||||
|
0x45, 0x72, 0x72, 0x6f, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x7b, 0x75,
|
||||||
|
0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68,
|
||||||
|
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x2f, 0x75, 0x6e, 0x69, 0x73, 0x74, 0x61, 0x63, 0x6b,
|
||||||
|
0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x2d, 0x74, 0x65, 0x73, 0x74, 0x73,
|
||||||
|
0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x70, 0x72, 0x6f,
|
||||||
|
0x74, 0x6f, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -215,9 +225,11 @@ var file_github_proto_goTypes = []interface{}{
|
|||||||
}
|
}
|
||||||
var file_github_proto_depIdxs = []int32{
|
var file_github_proto_depIdxs = []int32{
|
||||||
0, // 0: github.Github.LookupUser:input_type -> github.LookupUserReq
|
0, // 0: github.Github.LookupUser:input_type -> github.LookupUserReq
|
||||||
1, // 1: github.Github.LookupUser:output_type -> github.LookupUserRsp
|
0, // 1: github.Github.LookupUserWithoutPath:input_type -> github.LookupUserReq
|
||||||
1, // [1:2] is the sub-list for method output_type
|
1, // 2: github.Github.LookupUser:output_type -> github.LookupUserRsp
|
||||||
0, // [0:1] is the sub-list for method input_type
|
1, // 3: github.Github.LookupUserWithoutPath:output_type -> github.LookupUserRsp
|
||||||
|
2, // [2:4] is the sub-list for method output_type
|
||||||
|
0, // [0:2] is the sub-list for method input_type
|
||||||
0, // [0:0] is the sub-list for extension type_name
|
0, // [0:0] is the sub-list for extension type_name
|
||||||
0, // [0:0] is the sub-list for extension extendee
|
0, // [0:0] is the sub-list for extension extendee
|
||||||
0, // [0:0] is the sub-list for field type_name
|
0, // [0:0] is the sub-list for field type_name
|
||||||
|
@ -20,6 +20,20 @@ service Github {
|
|||||||
};
|
};
|
||||||
option (micro.api.http) = { get: "/users/{username}"; };
|
option (micro.api.http) = { get: "/users/{username}"; };
|
||||||
};
|
};
|
||||||
|
rpc LookupUserWithoutPath(LookupUserReq) returns (LookupUserRsp) {
|
||||||
|
option (micro.openapiv2.openapiv2_operation) = {
|
||||||
|
operation_id: "LookupUserWithoutPath";
|
||||||
|
responses: {
|
||||||
|
key: "default";
|
||||||
|
value: {
|
||||||
|
description: "Error response";
|
||||||
|
schema: { json_schema: { ref: ".github.Error"; } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
option (micro.api.http) = { get: "/{username}"; };
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
message LookupUserReq {
|
message LookupUserReq {
|
||||||
|
@ -16,13 +16,21 @@ func NewGithubEndpoints() []*api.Endpoint {
|
|||||||
Method: []string{"GET"},
|
Method: []string{"GET"},
|
||||||
Handler: "rpc",
|
Handler: "rpc",
|
||||||
},
|
},
|
||||||
|
&api.Endpoint{
|
||||||
|
Name: "Github.LookupUserWithoutPath",
|
||||||
|
Path: []string{"/{username}"},
|
||||||
|
Method: []string{"GET"},
|
||||||
|
Handler: "rpc",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type GithubClient interface {
|
type GithubClient interface {
|
||||||
LookupUser(ctx context.Context, req *LookupUserReq, opts ...client.CallOption) (*LookupUserRsp, error)
|
LookupUser(ctx context.Context, req *LookupUserReq, opts ...client.CallOption) (*LookupUserRsp, error)
|
||||||
|
LookupUserWithoutPath(ctx context.Context, req *LookupUserReq, opts ...client.CallOption) (*LookupUserRsp, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type GithubServer interface {
|
type GithubServer interface {
|
||||||
LookupUser(ctx context.Context, req *LookupUserReq, rsp *LookupUserRsp) error
|
LookupUser(ctx context.Context, req *LookupUserReq, rsp *LookupUserRsp) error
|
||||||
|
LookupUserWithoutPath(ctx context.Context, req *LookupUserReq, rsp *LookupUserRsp) error
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
api "github.com/unistack-org/micro/v3/api"
|
api "github.com/unistack-org/micro/v3/api"
|
||||||
client "github.com/unistack-org/micro/v3/client"
|
client "github.com/unistack-org/micro/v3/client"
|
||||||
server "github.com/unistack-org/micro/v3/server"
|
server "github.com/unistack-org/micro/v3/server"
|
||||||
|
http "net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
type githubClient struct {
|
type githubClient struct {
|
||||||
@ -26,9 +27,8 @@ func (c *githubClient) LookupUser(ctx context.Context, req *LookupUserReq, opts
|
|||||||
v3.ErrorMap(errmap),
|
v3.ErrorMap(errmap),
|
||||||
)
|
)
|
||||||
opts = append(opts,
|
opts = append(opts,
|
||||||
v3.Method("GET"),
|
v3.Method(http.MethodGet),
|
||||||
v3.Path("/users/{username}"),
|
v3.Path("/users/{username}"),
|
||||||
v3.Body(""),
|
|
||||||
)
|
)
|
||||||
rsp := &LookupUserRsp{}
|
rsp := &LookupUserRsp{}
|
||||||
err := c.c.Call(ctx, c.c.NewRequest(c.name, "Github.LookupUser", req), rsp, opts...)
|
err := c.c.Call(ctx, c.c.NewRequest(c.name, "Github.LookupUser", req), rsp, opts...)
|
||||||
@ -38,6 +38,24 @@ func (c *githubClient) LookupUser(ctx context.Context, req *LookupUserReq, opts
|
|||||||
return rsp, nil
|
return rsp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *githubClient) LookupUserWithoutPath(ctx context.Context, req *LookupUserReq, opts ...client.CallOption) (*LookupUserRsp, error) {
|
||||||
|
errmap := make(map[string]interface{}, 1)
|
||||||
|
errmap["default"] = &Error{}
|
||||||
|
opts = append(opts,
|
||||||
|
v3.ErrorMap(errmap),
|
||||||
|
)
|
||||||
|
opts = append(opts,
|
||||||
|
v3.Method(http.MethodGet),
|
||||||
|
v3.Path("/{username}"),
|
||||||
|
)
|
||||||
|
rsp := &LookupUserRsp{}
|
||||||
|
err := c.c.Call(ctx, c.c.NewRequest(c.name, "Github.LookupUserWithoutPath", req), rsp, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return rsp, nil
|
||||||
|
}
|
||||||
|
|
||||||
type githubServer struct {
|
type githubServer struct {
|
||||||
GithubServer
|
GithubServer
|
||||||
}
|
}
|
||||||
@ -46,16 +64,22 @@ func (h *githubServer) LookupUser(ctx context.Context, req *LookupUserReq, rsp *
|
|||||||
return h.GithubServer.LookupUser(ctx, req, rsp)
|
return h.GithubServer.LookupUser(ctx, req, rsp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *githubServer) LookupUserWithoutPath(ctx context.Context, req *LookupUserReq, rsp *LookupUserRsp) error {
|
||||||
|
return h.GithubServer.LookupUserWithoutPath(ctx, req, rsp)
|
||||||
|
}
|
||||||
|
|
||||||
func RegisterGithubServer(s server.Server, sh GithubServer, opts ...server.HandlerOption) error {
|
func RegisterGithubServer(s server.Server, sh GithubServer, opts ...server.HandlerOption) error {
|
||||||
type github interface {
|
type github interface {
|
||||||
LookupUser(ctx context.Context, req *LookupUserReq, rsp *LookupUserRsp) error
|
LookupUser(ctx context.Context, req *LookupUserReq, rsp *LookupUserRsp) error
|
||||||
|
LookupUserWithoutPath(ctx context.Context, req *LookupUserReq, rsp *LookupUserRsp) error
|
||||||
}
|
}
|
||||||
type Github struct {
|
type Github struct {
|
||||||
github
|
github
|
||||||
}
|
}
|
||||||
h := &githubServer{sh}
|
h := &githubServer{sh}
|
||||||
|
var nopts []server.HandlerOption
|
||||||
for _, endpoint := range NewGithubEndpoints() {
|
for _, endpoint := range NewGithubEndpoints() {
|
||||||
opts = append(opts, api.WithEndpoint(endpoint))
|
nopts = append(nopts, api.WithEndpoint(endpoint))
|
||||||
}
|
}
|
||||||
return s.Handle(s.NewHandler(&Github{h}, opts...))
|
return s.Handle(s.NewHandler(&Github{h}, append(nopts, opts...)...))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user