You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

193 line
5.2 KiB

  1. // Copyright 2019 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // https://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. // Code generated by gapic-generator. DO NOT EDIT.
  15. package videointelligence
  16. import (
  17. videointelligencepb "google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta1"
  18. longrunningpb "google.golang.org/genproto/googleapis/longrunning"
  19. )
  20. import (
  21. "context"
  22. "flag"
  23. "fmt"
  24. "io"
  25. "log"
  26. "net"
  27. "os"
  28. "strings"
  29. "testing"
  30. "github.com/golang/protobuf/proto"
  31. "github.com/golang/protobuf/ptypes"
  32. "google.golang.org/api/option"
  33. status "google.golang.org/genproto/googleapis/rpc/status"
  34. "google.golang.org/grpc"
  35. "google.golang.org/grpc/codes"
  36. "google.golang.org/grpc/metadata"
  37. gstatus "google.golang.org/grpc/status"
  38. )
  39. var _ = io.EOF
  40. var _ = ptypes.MarshalAny
  41. var _ status.Status
  42. type mockVideoIntelligenceServer struct {
  43. // Embed for forward compatibility.
  44. // Tests will keep working if more methods are added
  45. // in the future.
  46. videointelligencepb.VideoIntelligenceServiceServer
  47. reqs []proto.Message
  48. // If set, all calls return this error.
  49. err error
  50. // responses to return if err == nil
  51. resps []proto.Message
  52. }
  53. func (s *mockVideoIntelligenceServer) AnnotateVideo(ctx context.Context, req *videointelligencepb.AnnotateVideoRequest) (*longrunningpb.Operation, error) {
  54. md, _ := metadata.FromIncomingContext(ctx)
  55. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  56. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  57. }
  58. s.reqs = append(s.reqs, req)
  59. if s.err != nil {
  60. return nil, s.err
  61. }
  62. return s.resps[0].(*longrunningpb.Operation), nil
  63. }
  64. // clientOpt is the option tests should use to connect to the test server.
  65. // It is initialized by TestMain.
  66. var clientOpt option.ClientOption
  67. var (
  68. mockVideoIntelligence mockVideoIntelligenceServer
  69. )
  70. func TestMain(m *testing.M) {
  71. flag.Parse()
  72. serv := grpc.NewServer()
  73. videointelligencepb.RegisterVideoIntelligenceServiceServer(serv, &mockVideoIntelligence)
  74. lis, err := net.Listen("tcp", "localhost:0")
  75. if err != nil {
  76. log.Fatal(err)
  77. }
  78. go serv.Serve(lis)
  79. conn, err := grpc.Dial(lis.Addr().String(), grpc.WithInsecure())
  80. if err != nil {
  81. log.Fatal(err)
  82. }
  83. clientOpt = option.WithGRPCConn(conn)
  84. os.Exit(m.Run())
  85. }
  86. func TestVideoIntelligenceServiceAnnotateVideo(t *testing.T) {
  87. var expectedResponse *videointelligencepb.AnnotateVideoResponse = &videointelligencepb.AnnotateVideoResponse{}
  88. mockVideoIntelligence.err = nil
  89. mockVideoIntelligence.reqs = nil
  90. any, err := ptypes.MarshalAny(expectedResponse)
  91. if err != nil {
  92. t.Fatal(err)
  93. }
  94. mockVideoIntelligence.resps = append(mockVideoIntelligence.resps[:0], &longrunningpb.Operation{
  95. Name: "longrunning-test",
  96. Done: true,
  97. Result: &longrunningpb.Operation_Response{Response: any},
  98. })
  99. var inputUri string = "gs://demomaker/cat.mp4"
  100. var featuresElement videointelligencepb.Feature = videointelligencepb.Feature_LABEL_DETECTION
  101. var features = []videointelligencepb.Feature{featuresElement}
  102. var request = &videointelligencepb.AnnotateVideoRequest{
  103. InputUri: inputUri,
  104. Features: features,
  105. }
  106. c, err := NewClient(context.Background(), clientOpt)
  107. if err != nil {
  108. t.Fatal(err)
  109. }
  110. respLRO, err := c.AnnotateVideo(context.Background(), request)
  111. if err != nil {
  112. t.Fatal(err)
  113. }
  114. resp, err := respLRO.Wait(context.Background())
  115. if err != nil {
  116. t.Fatal(err)
  117. }
  118. if want, got := request, mockVideoIntelligence.reqs[0]; !proto.Equal(want, got) {
  119. t.Errorf("wrong request %q, want %q", got, want)
  120. }
  121. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  122. t.Errorf("wrong response %q, want %q)", got, want)
  123. }
  124. }
  125. func TestVideoIntelligenceServiceAnnotateVideoError(t *testing.T) {
  126. errCode := codes.PermissionDenied
  127. mockVideoIntelligence.err = nil
  128. mockVideoIntelligence.resps = append(mockVideoIntelligence.resps[:0], &longrunningpb.Operation{
  129. Name: "longrunning-test",
  130. Done: true,
  131. Result: &longrunningpb.Operation_Error{
  132. Error: &status.Status{
  133. Code: int32(errCode),
  134. Message: "test error",
  135. },
  136. },
  137. })
  138. var inputUri string = "gs://demomaker/cat.mp4"
  139. var featuresElement videointelligencepb.Feature = videointelligencepb.Feature_LABEL_DETECTION
  140. var features = []videointelligencepb.Feature{featuresElement}
  141. var request = &videointelligencepb.AnnotateVideoRequest{
  142. InputUri: inputUri,
  143. Features: features,
  144. }
  145. c, err := NewClient(context.Background(), clientOpt)
  146. if err != nil {
  147. t.Fatal(err)
  148. }
  149. respLRO, err := c.AnnotateVideo(context.Background(), request)
  150. if err != nil {
  151. t.Fatal(err)
  152. }
  153. resp, err := respLRO.Wait(context.Background())
  154. if st, ok := gstatus.FromError(err); !ok {
  155. t.Errorf("got error %v, expected grpc error", err)
  156. } else if c := st.Code(); c != errCode {
  157. t.Errorf("got error code %q, want %q", c, errCode)
  158. }
  159. _ = resp
  160. }