parse_req_test.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package codegenerator_test
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io"
  6. "strings"
  7. "testing"
  8. "git.ikuban.com/server/swagger-api/protoc-gen-openapiv2/internal/codegenerator"
  9. "github.com/google/go-cmp/cmp"
  10. "google.golang.org/protobuf/proto"
  11. "google.golang.org/protobuf/testing/protocmp"
  12. "google.golang.org/protobuf/types/pluginpb"
  13. )
  14. var parseReqTests = []struct {
  15. name string
  16. in io.Reader
  17. out *pluginpb.CodeGeneratorRequest
  18. expectErr bool
  19. }{
  20. {
  21. "Empty input should produce empty output",
  22. mustGetReader(&pluginpb.CodeGeneratorRequest{}),
  23. &pluginpb.CodeGeneratorRequest{},
  24. false,
  25. },
  26. {
  27. "Invalid reader should produce error",
  28. &invalidReader{},
  29. nil,
  30. true,
  31. },
  32. {
  33. "Invalid proto message should produce error",
  34. strings.NewReader("{}"),
  35. nil,
  36. true,
  37. },
  38. }
  39. func TestParseRequest(t *testing.T) {
  40. for _, tt := range parseReqTests {
  41. t.Run(tt.name, func(t *testing.T) {
  42. out, err := codegenerator.ParseRequest(tt.in)
  43. if tt.expectErr && err == nil {
  44. t.Error("did not error as expected")
  45. }
  46. if diff := cmp.Diff(out, tt.out, protocmp.Transform()); diff != "" {
  47. t.Errorf(diff)
  48. }
  49. })
  50. }
  51. }
  52. func mustGetReader(pb proto.Message) io.Reader {
  53. b, err := proto.Marshal(pb)
  54. if err != nil {
  55. panic(err)
  56. }
  57. return bytes.NewBuffer(b)
  58. }
  59. type invalidReader struct {
  60. }
  61. func (*invalidReader) Read(p []byte) (int, error) {
  62. return 0, fmt.Errorf("invalid reader")
  63. }