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
15// Code generated by gapic-generator. DO NOT EDIT.
16
17package trace
18
19import (
20	emptypb "github.com/golang/protobuf/ptypes/empty"
21	cloudtracepb "google.golang.org/genproto/googleapis/devtools/cloudtrace/v1"
22)
23
24import (
25	"context"
26	"flag"
27	"fmt"
28	"io"
29	"log"
30	"net"
31	"os"
32	"strings"
33	"testing"
34
35	"github.com/golang/protobuf/proto"
36	"github.com/golang/protobuf/ptypes"
37	"google.golang.org/api/option"
38	status "google.golang.org/genproto/googleapis/rpc/status"
39	"google.golang.org/grpc"
40	"google.golang.org/grpc/codes"
41	"google.golang.org/grpc/metadata"
42	gstatus "google.golang.org/grpc/status"
43)
44
45var _ = io.EOF
46var _ = ptypes.MarshalAny
47var _ status.Status
48
49type mockTraceServer struct {
50	// Embed for forward compatibility.
51	// Tests will keep working if more methods are added
52	// in the future.
53	cloudtracepb.TraceServiceServer
54
55	reqs []proto.Message
56
57	// If set, all calls return this error.
58	err error
59
60	// responses to return if err == nil
61	resps []proto.Message
62}
63
64func (s *mockTraceServer) ListTraces(ctx context.Context, req *cloudtracepb.ListTracesRequest) (*cloudtracepb.ListTracesResponse, error) {
65	md, _ := metadata.FromIncomingContext(ctx)
66	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
67		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
68	}
69	s.reqs = append(s.reqs, req)
70	if s.err != nil {
71		return nil, s.err
72	}
73	return s.resps[0].(*cloudtracepb.ListTracesResponse), nil
74}
75
76func (s *mockTraceServer) GetTrace(ctx context.Context, req *cloudtracepb.GetTraceRequest) (*cloudtracepb.Trace, error) {
77	md, _ := metadata.FromIncomingContext(ctx)
78	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
79		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
80	}
81	s.reqs = append(s.reqs, req)
82	if s.err != nil {
83		return nil, s.err
84	}
85	return s.resps[0].(*cloudtracepb.Trace), nil
86}
87
88func (s *mockTraceServer) PatchTraces(ctx context.Context, req *cloudtracepb.PatchTracesRequest) (*emptypb.Empty, error) {
89	md, _ := metadata.FromIncomingContext(ctx)
90	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
91		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
92	}
93	s.reqs = append(s.reqs, req)
94	if s.err != nil {
95		return nil, s.err
96	}
97	return s.resps[0].(*emptypb.Empty), nil
98}
99
100// clientOpt is the option tests should use to connect to the test server.
101// It is initialized by TestMain.
102var clientOpt option.ClientOption
103
104var (
105	mockTrace mockTraceServer
106)
107
108func TestMain(m *testing.M) {
109	flag.Parse()
110
111	serv := grpc.NewServer()
112	cloudtracepb.RegisterTraceServiceServer(serv, &mockTrace)
113
114	lis, err := net.Listen("tcp", "localhost:0")
115	if err != nil {
116		log.Fatal(err)
117	}
118	go serv.Serve(lis)
119
120	conn, err := grpc.Dial(lis.Addr().String(), grpc.WithInsecure())
121	if err != nil {
122		log.Fatal(err)
123	}
124	clientOpt = option.WithGRPCConn(conn)
125
126	os.Exit(m.Run())
127}
128
129func TestTraceServicePatchTraces(t *testing.T) {
130	var expectedResponse *emptypb.Empty = &emptypb.Empty{}
131
132	mockTrace.err = nil
133	mockTrace.reqs = nil
134
135	mockTrace.resps = append(mockTrace.resps[:0], expectedResponse)
136
137	var projectId string = "projectId-1969970175"
138	var traces *cloudtracepb.Traces = &cloudtracepb.Traces{}
139	var request = &cloudtracepb.PatchTracesRequest{
140		ProjectId: projectId,
141		Traces:    traces,
142	}
143
144	c, err := NewClient(context.Background(), clientOpt)
145	if err != nil {
146		t.Fatal(err)
147	}
148
149	err = c.PatchTraces(context.Background(), request)
150
151	if err != nil {
152		t.Fatal(err)
153	}
154
155	if want, got := request, mockTrace.reqs[0]; !proto.Equal(want, got) {
156		t.Errorf("wrong request %q, want %q", got, want)
157	}
158
159}
160
161func TestTraceServicePatchTracesError(t *testing.T) {
162	errCode := codes.PermissionDenied
163	mockTrace.err = gstatus.Error(errCode, "test error")
164
165	var projectId string = "projectId-1969970175"
166	var traces *cloudtracepb.Traces = &cloudtracepb.Traces{}
167	var request = &cloudtracepb.PatchTracesRequest{
168		ProjectId: projectId,
169		Traces:    traces,
170	}
171
172	c, err := NewClient(context.Background(), clientOpt)
173	if err != nil {
174		t.Fatal(err)
175	}
176
177	err = c.PatchTraces(context.Background(), request)
178
179	if st, ok := gstatus.FromError(err); !ok {
180		t.Errorf("got error %v, expected grpc error", err)
181	} else if c := st.Code(); c != errCode {
182		t.Errorf("got error code %q, want %q", c, errCode)
183	}
184}
185func TestTraceServiceGetTrace(t *testing.T) {
186	var projectId2 string = "projectId2939242356"
187	var traceId2 string = "traceId2987826376"
188	var expectedResponse = &cloudtracepb.Trace{
189		ProjectId: projectId2,
190		TraceId:   traceId2,
191	}
192
193	mockTrace.err = nil
194	mockTrace.reqs = nil
195
196	mockTrace.resps = append(mockTrace.resps[:0], expectedResponse)
197
198	var projectId string = "projectId-1969970175"
199	var traceId string = "traceId1270300245"
200	var request = &cloudtracepb.GetTraceRequest{
201		ProjectId: projectId,
202		TraceId:   traceId,
203	}
204
205	c, err := NewClient(context.Background(), clientOpt)
206	if err != nil {
207		t.Fatal(err)
208	}
209
210	resp, err := c.GetTrace(context.Background(), request)
211
212	if err != nil {
213		t.Fatal(err)
214	}
215
216	if want, got := request, mockTrace.reqs[0]; !proto.Equal(want, got) {
217		t.Errorf("wrong request %q, want %q", got, want)
218	}
219
220	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
221		t.Errorf("wrong response %q, want %q)", got, want)
222	}
223}
224
225func TestTraceServiceGetTraceError(t *testing.T) {
226	errCode := codes.PermissionDenied
227	mockTrace.err = gstatus.Error(errCode, "test error")
228
229	var projectId string = "projectId-1969970175"
230	var traceId string = "traceId1270300245"
231	var request = &cloudtracepb.GetTraceRequest{
232		ProjectId: projectId,
233		TraceId:   traceId,
234	}
235
236	c, err := NewClient(context.Background(), clientOpt)
237	if err != nil {
238		t.Fatal(err)
239	}
240
241	resp, err := c.GetTrace(context.Background(), request)
242
243	if st, ok := gstatus.FromError(err); !ok {
244		t.Errorf("got error %v, expected grpc error", err)
245	} else if c := st.Code(); c != errCode {
246		t.Errorf("got error code %q, want %q", c, errCode)
247	}
248	_ = resp
249}
250func TestTraceServiceListTraces(t *testing.T) {
251	var nextPageToken string = ""
252	var tracesElement *cloudtracepb.Trace = &cloudtracepb.Trace{}
253	var traces = []*cloudtracepb.Trace{tracesElement}
254	var expectedResponse = &cloudtracepb.ListTracesResponse{
255		NextPageToken: nextPageToken,
256		Traces:        traces,
257	}
258
259	mockTrace.err = nil
260	mockTrace.reqs = nil
261
262	mockTrace.resps = append(mockTrace.resps[:0], expectedResponse)
263
264	var projectId string = "projectId-1969970175"
265	var request = &cloudtracepb.ListTracesRequest{
266		ProjectId: projectId,
267	}
268
269	c, err := NewClient(context.Background(), clientOpt)
270	if err != nil {
271		t.Fatal(err)
272	}
273
274	resp, err := c.ListTraces(context.Background(), request).Next()
275
276	if err != nil {
277		t.Fatal(err)
278	}
279
280	if want, got := request, mockTrace.reqs[0]; !proto.Equal(want, got) {
281		t.Errorf("wrong request %q, want %q", got, want)
282	}
283
284	want := (interface{})(expectedResponse.Traces[0])
285	got := (interface{})(resp)
286	var ok bool
287
288	switch want := (want).(type) {
289	case proto.Message:
290		ok = proto.Equal(want, got.(proto.Message))
291	default:
292		ok = want == got
293	}
294	if !ok {
295		t.Errorf("wrong response %q, want %q)", got, want)
296	}
297}
298
299func TestTraceServiceListTracesError(t *testing.T) {
300	errCode := codes.PermissionDenied
301	mockTrace.err = gstatus.Error(errCode, "test error")
302
303	var projectId string = "projectId-1969970175"
304	var request = &cloudtracepb.ListTracesRequest{
305		ProjectId: projectId,
306	}
307
308	c, err := NewClient(context.Background(), clientOpt)
309	if err != nil {
310		t.Fatal(err)
311	}
312
313	resp, err := c.ListTraces(context.Background(), request).Next()
314
315	if st, ok := gstatus.FromError(err); !ok {
316		t.Errorf("got error %v, expected grpc error", err)
317	} else if c := st.Code(); c != errCode {
318		t.Errorf("got error code %q, want %q", c, errCode)
319	}
320	_ = resp
321}
322