1 package gengateway
2
3 import (
4 "testing"
5
6 "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor"
7 "google.golang.org/protobuf/proto"
8 "google.golang.org/protobuf/types/descriptorpb"
9 )
10
11 func newExampleFileDescriptorWithGoPkg(gp *descriptor.GoPackage, filenamePrefix string) *descriptor.File {
12 msgdesc := &descriptorpb.DescriptorProto{
13 Name: proto.String("ExampleMessage"),
14 }
15 msg := &descriptor.Message{
16 DescriptorProto: msgdesc,
17 }
18 msg1 := &descriptor.Message{
19 DescriptorProto: msgdesc,
20 File: &descriptor.File{
21 GoPkg: descriptor.GoPackage{
22 Path: "github.com/golang/protobuf/ptypes/empty",
23 Name: "emptypb",
24 },
25 },
26 }
27 meth := &descriptorpb.MethodDescriptorProto{
28 Name: proto.String("Example"),
29 InputType: proto.String("ExampleMessage"),
30 OutputType: proto.String("ExampleMessage"),
31 }
32 meth1 := &descriptorpb.MethodDescriptorProto{
33 Name: proto.String("ExampleWithoutBindings"),
34 InputType: proto.String("empty.Empty"),
35 OutputType: proto.String("empty.Empty"),
36 }
37 svc := &descriptorpb.ServiceDescriptorProto{
38 Name: proto.String("ExampleService"),
39 Method: []*descriptorpb.MethodDescriptorProto{meth, meth1},
40 }
41 return &descriptor.File{
42 FileDescriptorProto: &descriptorpb.FileDescriptorProto{
43 Name: proto.String("example.proto"),
44 Package: proto.String("example"),
45 Dependency: []string{"a.example/b/c.proto", "a.example/d/e.proto"},
46 MessageType: []*descriptorpb.DescriptorProto{msgdesc},
47 Service: []*descriptorpb.ServiceDescriptorProto{svc},
48 },
49 GoPkg: *gp,
50 GeneratedFilenamePrefix: filenamePrefix,
51 Messages: []*descriptor.Message{msg},
52 Services: []*descriptor.Service{
53 {
54 ServiceDescriptorProto: svc,
55 Methods: []*descriptor.Method{
56 {
57 MethodDescriptorProto: meth,
58 RequestType: msg,
59 ResponseType: msg,
60 Bindings: []*descriptor.Binding{
61 {
62 HTTPMethod: "GET",
63 Body: &descriptor.Body{FieldPath: nil},
64 },
65 },
66 },
67 {
68 MethodDescriptorProto: meth1,
69 RequestType: msg1,
70 ResponseType: msg1,
71 },
72 },
73 },
74 },
75 }
76 }
77
78 func TestGenerator_Generate(t *testing.T) {
79 g := new(generator)
80 g.reg = descriptor.NewRegistry()
81 result, err := g.Generate([]*descriptor.File{
82 crossLinkFixture(newExampleFileDescriptorWithGoPkg(&descriptor.GoPackage{
83 Path: "example.com/path/to/example",
84 Name: "example_pb",
85 }, "path/to/example")),
86 })
87 if err != nil {
88 t.Fatalf("failed to generate stubs: %v", err)
89 }
90 if len(result) != 1 {
91 t.Fatalf("expected to generate one file, got: %d", len(result))
92 }
93 expectedName := "path/to/example.pb.gw.go"
94 gotName := result[0].GetName()
95 if gotName != expectedName {
96 t.Fatalf("invalid name %q, expected %q", gotName, expectedName)
97 }
98 }
99
View as plain text