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 recommender
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	"google.golang.org/api/option"
33	recommenderpb "google.golang.org/genproto/googleapis/cloud/recommender/v1beta1"
34
35	status "google.golang.org/genproto/googleapis/rpc/status"
36	"google.golang.org/grpc"
37	"google.golang.org/grpc/codes"
38	"google.golang.org/grpc/metadata"
39
40	gstatus "google.golang.org/grpc/status"
41)
42
43var _ = io.EOF
44var _ = ptypes.MarshalAny
45var _ status.Status
46
47type mockRecommenderServer struct {
48	// Embed for forward compatibility.
49	// Tests will keep working if more methods are added
50	// in the future.
51	recommenderpb.RecommenderServer
52
53	reqs []proto.Message
54
55	// If set, all calls return this error.
56	err error
57
58	// responses to return if err == nil
59	resps []proto.Message
60}
61
62func (s *mockRecommenderServer) ListRecommendations(ctx context.Context, req *recommenderpb.ListRecommendationsRequest) (*recommenderpb.ListRecommendationsResponse, error) {
63	md, _ := metadata.FromIncomingContext(ctx)
64	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
65		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
66	}
67	s.reqs = append(s.reqs, req)
68	if s.err != nil {
69		return nil, s.err
70	}
71	return s.resps[0].(*recommenderpb.ListRecommendationsResponse), nil
72}
73
74func (s *mockRecommenderServer) GetRecommendation(ctx context.Context, req *recommenderpb.GetRecommendationRequest) (*recommenderpb.Recommendation, error) {
75	md, _ := metadata.FromIncomingContext(ctx)
76	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
77		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
78	}
79	s.reqs = append(s.reqs, req)
80	if s.err != nil {
81		return nil, s.err
82	}
83	return s.resps[0].(*recommenderpb.Recommendation), nil
84}
85
86func (s *mockRecommenderServer) MarkRecommendationClaimed(ctx context.Context, req *recommenderpb.MarkRecommendationClaimedRequest) (*recommenderpb.Recommendation, error) {
87	md, _ := metadata.FromIncomingContext(ctx)
88	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
89		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
90	}
91	s.reqs = append(s.reqs, req)
92	if s.err != nil {
93		return nil, s.err
94	}
95	return s.resps[0].(*recommenderpb.Recommendation), nil
96}
97
98func (s *mockRecommenderServer) MarkRecommendationSucceeded(ctx context.Context, req *recommenderpb.MarkRecommendationSucceededRequest) (*recommenderpb.Recommendation, error) {
99	md, _ := metadata.FromIncomingContext(ctx)
100	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
101		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
102	}
103	s.reqs = append(s.reqs, req)
104	if s.err != nil {
105		return nil, s.err
106	}
107	return s.resps[0].(*recommenderpb.Recommendation), nil
108}
109
110func (s *mockRecommenderServer) MarkRecommendationFailed(ctx context.Context, req *recommenderpb.MarkRecommendationFailedRequest) (*recommenderpb.Recommendation, error) {
111	md, _ := metadata.FromIncomingContext(ctx)
112	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
113		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
114	}
115	s.reqs = append(s.reqs, req)
116	if s.err != nil {
117		return nil, s.err
118	}
119	return s.resps[0].(*recommenderpb.Recommendation), nil
120}
121
122// clientOpt is the option tests should use to connect to the test server.
123// It is initialized by TestMain.
124var clientOpt option.ClientOption
125
126var (
127	mockRecommender mockRecommenderServer
128)
129
130func TestMain(m *testing.M) {
131	flag.Parse()
132
133	serv := grpc.NewServer()
134	recommenderpb.RegisterRecommenderServer(serv, &mockRecommender)
135
136	lis, err := net.Listen("tcp", "localhost:0")
137	if err != nil {
138		log.Fatal(err)
139	}
140	go serv.Serve(lis)
141
142	conn, err := grpc.Dial(lis.Addr().String(), grpc.WithInsecure())
143	if err != nil {
144		log.Fatal(err)
145	}
146	clientOpt = option.WithGRPCConn(conn)
147
148	os.Exit(m.Run())
149}
150
151func TestRecommenderListRecommendations(t *testing.T) {
152	var nextPageToken string = ""
153	var recommendationsElement *recommenderpb.Recommendation = &recommenderpb.Recommendation{}
154	var recommendations = []*recommenderpb.Recommendation{recommendationsElement}
155	var expectedResponse = &recommenderpb.ListRecommendationsResponse{
156		NextPageToken:   nextPageToken,
157		Recommendations: recommendations,
158	}
159
160	mockRecommender.err = nil
161	mockRecommender.reqs = nil
162
163	mockRecommender.resps = append(mockRecommender.resps[:0], expectedResponse)
164
165	var formattedParent string = fmt.Sprintf("projects/%s/locations/%s/recommenders/%s", "[PROJECT]", "[LOCATION]", "[RECOMMENDER]")
166	var request = &recommenderpb.ListRecommendationsRequest{
167		Parent: formattedParent,
168	}
169
170	c, err := NewClient(context.Background(), clientOpt)
171	if err != nil {
172		t.Fatal(err)
173	}
174
175	resp, err := c.ListRecommendations(context.Background(), request).Next()
176
177	if err != nil {
178		t.Fatal(err)
179	}
180
181	if want, got := request, mockRecommender.reqs[0]; !proto.Equal(want, got) {
182		t.Errorf("wrong request %q, want %q", got, want)
183	}
184
185	want := (interface{})(expectedResponse.Recommendations[0])
186	got := (interface{})(resp)
187	var ok bool
188
189	switch want := (want).(type) {
190	case proto.Message:
191		ok = proto.Equal(want, got.(proto.Message))
192	default:
193		ok = want == got
194	}
195	if !ok {
196		t.Errorf("wrong response %q, want %q)", got, want)
197	}
198}
199
200func TestRecommenderListRecommendationsError(t *testing.T) {
201	errCode := codes.PermissionDenied
202	mockRecommender.err = gstatus.Error(errCode, "test error")
203
204	var formattedParent string = fmt.Sprintf("projects/%s/locations/%s/recommenders/%s", "[PROJECT]", "[LOCATION]", "[RECOMMENDER]")
205	var request = &recommenderpb.ListRecommendationsRequest{
206		Parent: formattedParent,
207	}
208
209	c, err := NewClient(context.Background(), clientOpt)
210	if err != nil {
211		t.Fatal(err)
212	}
213
214	resp, err := c.ListRecommendations(context.Background(), request).Next()
215
216	if st, ok := gstatus.FromError(err); !ok {
217		t.Errorf("got error %v, expected grpc error", err)
218	} else if c := st.Code(); c != errCode {
219		t.Errorf("got error code %q, want %q", c, errCode)
220	}
221	_ = resp
222}
223func TestRecommenderGetRecommendation(t *testing.T) {
224	var name2 string = "name2-1052831874"
225	var description string = "description-1724546052"
226	var recommenderSubtype string = "recommenderSubtype-1488504412"
227	var etag string = "etag3123477"
228	var expectedResponse = &recommenderpb.Recommendation{
229		Name:               name2,
230		Description:        description,
231		RecommenderSubtype: recommenderSubtype,
232		Etag:               etag,
233	}
234
235	mockRecommender.err = nil
236	mockRecommender.reqs = nil
237
238	mockRecommender.resps = append(mockRecommender.resps[:0], expectedResponse)
239
240	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/recommenders/%s/recommendations/%s", "[PROJECT]", "[LOCATION]", "[RECOMMENDER]", "[RECOMMENDATION]")
241	var request = &recommenderpb.GetRecommendationRequest{
242		Name: formattedName,
243	}
244
245	c, err := NewClient(context.Background(), clientOpt)
246	if err != nil {
247		t.Fatal(err)
248	}
249
250	resp, err := c.GetRecommendation(context.Background(), request)
251
252	if err != nil {
253		t.Fatal(err)
254	}
255
256	if want, got := request, mockRecommender.reqs[0]; !proto.Equal(want, got) {
257		t.Errorf("wrong request %q, want %q", got, want)
258	}
259
260	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
261		t.Errorf("wrong response %q, want %q)", got, want)
262	}
263}
264
265func TestRecommenderGetRecommendationError(t *testing.T) {
266	errCode := codes.PermissionDenied
267	mockRecommender.err = gstatus.Error(errCode, "test error")
268
269	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/recommenders/%s/recommendations/%s", "[PROJECT]", "[LOCATION]", "[RECOMMENDER]", "[RECOMMENDATION]")
270	var request = &recommenderpb.GetRecommendationRequest{
271		Name: formattedName,
272	}
273
274	c, err := NewClient(context.Background(), clientOpt)
275	if err != nil {
276		t.Fatal(err)
277	}
278
279	resp, err := c.GetRecommendation(context.Background(), request)
280
281	if st, ok := gstatus.FromError(err); !ok {
282		t.Errorf("got error %v, expected grpc error", err)
283	} else if c := st.Code(); c != errCode {
284		t.Errorf("got error code %q, want %q", c, errCode)
285	}
286	_ = resp
287}
288func TestRecommenderMarkRecommendationClaimed(t *testing.T) {
289	var name2 string = "name2-1052831874"
290	var description string = "description-1724546052"
291	var recommenderSubtype string = "recommenderSubtype-1488504412"
292	var etag2 string = "etag2-1293302904"
293	var expectedResponse = &recommenderpb.Recommendation{
294		Name:               name2,
295		Description:        description,
296		RecommenderSubtype: recommenderSubtype,
297		Etag:               etag2,
298	}
299
300	mockRecommender.err = nil
301	mockRecommender.reqs = nil
302
303	mockRecommender.resps = append(mockRecommender.resps[:0], expectedResponse)
304
305	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/recommenders/%s/recommendations/%s", "[PROJECT]", "[LOCATION]", "[RECOMMENDER]", "[RECOMMENDATION]")
306	var etag string = "etag3123477"
307	var request = &recommenderpb.MarkRecommendationClaimedRequest{
308		Name: formattedName,
309		Etag: etag,
310	}
311
312	c, err := NewClient(context.Background(), clientOpt)
313	if err != nil {
314		t.Fatal(err)
315	}
316
317	resp, err := c.MarkRecommendationClaimed(context.Background(), request)
318
319	if err != nil {
320		t.Fatal(err)
321	}
322
323	if want, got := request, mockRecommender.reqs[0]; !proto.Equal(want, got) {
324		t.Errorf("wrong request %q, want %q", got, want)
325	}
326
327	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
328		t.Errorf("wrong response %q, want %q)", got, want)
329	}
330}
331
332func TestRecommenderMarkRecommendationClaimedError(t *testing.T) {
333	errCode := codes.PermissionDenied
334	mockRecommender.err = gstatus.Error(errCode, "test error")
335
336	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/recommenders/%s/recommendations/%s", "[PROJECT]", "[LOCATION]", "[RECOMMENDER]", "[RECOMMENDATION]")
337	var etag string = "etag3123477"
338	var request = &recommenderpb.MarkRecommendationClaimedRequest{
339		Name: formattedName,
340		Etag: etag,
341	}
342
343	c, err := NewClient(context.Background(), clientOpt)
344	if err != nil {
345		t.Fatal(err)
346	}
347
348	resp, err := c.MarkRecommendationClaimed(context.Background(), request)
349
350	if st, ok := gstatus.FromError(err); !ok {
351		t.Errorf("got error %v, expected grpc error", err)
352	} else if c := st.Code(); c != errCode {
353		t.Errorf("got error code %q, want %q", c, errCode)
354	}
355	_ = resp
356}
357func TestRecommenderMarkRecommendationSucceeded(t *testing.T) {
358	var name2 string = "name2-1052831874"
359	var description string = "description-1724546052"
360	var recommenderSubtype string = "recommenderSubtype-1488504412"
361	var etag2 string = "etag2-1293302904"
362	var expectedResponse = &recommenderpb.Recommendation{
363		Name:               name2,
364		Description:        description,
365		RecommenderSubtype: recommenderSubtype,
366		Etag:               etag2,
367	}
368
369	mockRecommender.err = nil
370	mockRecommender.reqs = nil
371
372	mockRecommender.resps = append(mockRecommender.resps[:0], expectedResponse)
373
374	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/recommenders/%s/recommendations/%s", "[PROJECT]", "[LOCATION]", "[RECOMMENDER]", "[RECOMMENDATION]")
375	var etag string = "etag3123477"
376	var request = &recommenderpb.MarkRecommendationSucceededRequest{
377		Name: formattedName,
378		Etag: etag,
379	}
380
381	c, err := NewClient(context.Background(), clientOpt)
382	if err != nil {
383		t.Fatal(err)
384	}
385
386	resp, err := c.MarkRecommendationSucceeded(context.Background(), request)
387
388	if err != nil {
389		t.Fatal(err)
390	}
391
392	if want, got := request, mockRecommender.reqs[0]; !proto.Equal(want, got) {
393		t.Errorf("wrong request %q, want %q", got, want)
394	}
395
396	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
397		t.Errorf("wrong response %q, want %q)", got, want)
398	}
399}
400
401func TestRecommenderMarkRecommendationSucceededError(t *testing.T) {
402	errCode := codes.PermissionDenied
403	mockRecommender.err = gstatus.Error(errCode, "test error")
404
405	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/recommenders/%s/recommendations/%s", "[PROJECT]", "[LOCATION]", "[RECOMMENDER]", "[RECOMMENDATION]")
406	var etag string = "etag3123477"
407	var request = &recommenderpb.MarkRecommendationSucceededRequest{
408		Name: formattedName,
409		Etag: etag,
410	}
411
412	c, err := NewClient(context.Background(), clientOpt)
413	if err != nil {
414		t.Fatal(err)
415	}
416
417	resp, err := c.MarkRecommendationSucceeded(context.Background(), request)
418
419	if st, ok := gstatus.FromError(err); !ok {
420		t.Errorf("got error %v, expected grpc error", err)
421	} else if c := st.Code(); c != errCode {
422		t.Errorf("got error code %q, want %q", c, errCode)
423	}
424	_ = resp
425}
426func TestRecommenderMarkRecommendationFailed(t *testing.T) {
427	var name2 string = "name2-1052831874"
428	var description string = "description-1724546052"
429	var recommenderSubtype string = "recommenderSubtype-1488504412"
430	var etag2 string = "etag2-1293302904"
431	var expectedResponse = &recommenderpb.Recommendation{
432		Name:               name2,
433		Description:        description,
434		RecommenderSubtype: recommenderSubtype,
435		Etag:               etag2,
436	}
437
438	mockRecommender.err = nil
439	mockRecommender.reqs = nil
440
441	mockRecommender.resps = append(mockRecommender.resps[:0], expectedResponse)
442
443	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/recommenders/%s/recommendations/%s", "[PROJECT]", "[LOCATION]", "[RECOMMENDER]", "[RECOMMENDATION]")
444	var etag string = "etag3123477"
445	var request = &recommenderpb.MarkRecommendationFailedRequest{
446		Name: formattedName,
447		Etag: etag,
448	}
449
450	c, err := NewClient(context.Background(), clientOpt)
451	if err != nil {
452		t.Fatal(err)
453	}
454
455	resp, err := c.MarkRecommendationFailed(context.Background(), request)
456
457	if err != nil {
458		t.Fatal(err)
459	}
460
461	if want, got := request, mockRecommender.reqs[0]; !proto.Equal(want, got) {
462		t.Errorf("wrong request %q, want %q", got, want)
463	}
464
465	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
466		t.Errorf("wrong response %q, want %q)", got, want)
467	}
468}
469
470func TestRecommenderMarkRecommendationFailedError(t *testing.T) {
471	errCode := codes.PermissionDenied
472	mockRecommender.err = gstatus.Error(errCode, "test error")
473
474	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/recommenders/%s/recommendations/%s", "[PROJECT]", "[LOCATION]", "[RECOMMENDER]", "[RECOMMENDATION]")
475	var etag string = "etag3123477"
476	var request = &recommenderpb.MarkRecommendationFailedRequest{
477		Name: formattedName,
478		Etag: etag,
479	}
480
481	c, err := NewClient(context.Background(), clientOpt)
482	if err != nil {
483		t.Fatal(err)
484	}
485
486	resp, err := c.MarkRecommendationFailed(context.Background(), request)
487
488	if st, ok := gstatus.FromError(err); !ok {
489		t.Errorf("got error %v, expected grpc error", err)
490	} else if c := st.Code(); c != errCode {
491		t.Errorf("got error code %q, want %q", c, errCode)
492	}
493	_ = resp
494}
495