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