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 scheduler
18
19import (
20	emptypb "github.com/golang/protobuf/ptypes/empty"
21	schedulerpb "google.golang.org/genproto/googleapis/cloud/scheduler/v1"
22	field_maskpb "google.golang.org/genproto/protobuf/field_mask"
23)
24
25import (
26	"context"
27	"flag"
28	"fmt"
29	"io"
30	"log"
31	"net"
32	"os"
33	"strings"
34	"testing"
35
36	"github.com/golang/protobuf/proto"
37	"github.com/golang/protobuf/ptypes"
38	"google.golang.org/api/option"
39	status "google.golang.org/genproto/googleapis/rpc/status"
40	"google.golang.org/grpc"
41	"google.golang.org/grpc/codes"
42	"google.golang.org/grpc/metadata"
43	gstatus "google.golang.org/grpc/status"
44)
45
46var _ = io.EOF
47var _ = ptypes.MarshalAny
48var _ status.Status
49
50type mockCloudSchedulerServer struct {
51	// Embed for forward compatibility.
52	// Tests will keep working if more methods are added
53	// in the future.
54	schedulerpb.CloudSchedulerServer
55
56	reqs []proto.Message
57
58	// If set, all calls return this error.
59	err error
60
61	// responses to return if err == nil
62	resps []proto.Message
63}
64
65func (s *mockCloudSchedulerServer) ListJobs(ctx context.Context, req *schedulerpb.ListJobsRequest) (*schedulerpb.ListJobsResponse, error) {
66	md, _ := metadata.FromIncomingContext(ctx)
67	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
68		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
69	}
70	s.reqs = append(s.reqs, req)
71	if s.err != nil {
72		return nil, s.err
73	}
74	return s.resps[0].(*schedulerpb.ListJobsResponse), nil
75}
76
77func (s *mockCloudSchedulerServer) GetJob(ctx context.Context, req *schedulerpb.GetJobRequest) (*schedulerpb.Job, error) {
78	md, _ := metadata.FromIncomingContext(ctx)
79	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
80		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
81	}
82	s.reqs = append(s.reqs, req)
83	if s.err != nil {
84		return nil, s.err
85	}
86	return s.resps[0].(*schedulerpb.Job), nil
87}
88
89func (s *mockCloudSchedulerServer) CreateJob(ctx context.Context, req *schedulerpb.CreateJobRequest) (*schedulerpb.Job, error) {
90	md, _ := metadata.FromIncomingContext(ctx)
91	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
92		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
93	}
94	s.reqs = append(s.reqs, req)
95	if s.err != nil {
96		return nil, s.err
97	}
98	return s.resps[0].(*schedulerpb.Job), nil
99}
100
101func (s *mockCloudSchedulerServer) UpdateJob(ctx context.Context, req *schedulerpb.UpdateJobRequest) (*schedulerpb.Job, error) {
102	md, _ := metadata.FromIncomingContext(ctx)
103	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
104		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
105	}
106	s.reqs = append(s.reqs, req)
107	if s.err != nil {
108		return nil, s.err
109	}
110	return s.resps[0].(*schedulerpb.Job), nil
111}
112
113func (s *mockCloudSchedulerServer) DeleteJob(ctx context.Context, req *schedulerpb.DeleteJobRequest) (*emptypb.Empty, error) {
114	md, _ := metadata.FromIncomingContext(ctx)
115	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
116		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
117	}
118	s.reqs = append(s.reqs, req)
119	if s.err != nil {
120		return nil, s.err
121	}
122	return s.resps[0].(*emptypb.Empty), nil
123}
124
125func (s *mockCloudSchedulerServer) PauseJob(ctx context.Context, req *schedulerpb.PauseJobRequest) (*schedulerpb.Job, error) {
126	md, _ := metadata.FromIncomingContext(ctx)
127	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
128		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
129	}
130	s.reqs = append(s.reqs, req)
131	if s.err != nil {
132		return nil, s.err
133	}
134	return s.resps[0].(*schedulerpb.Job), nil
135}
136
137func (s *mockCloudSchedulerServer) ResumeJob(ctx context.Context, req *schedulerpb.ResumeJobRequest) (*schedulerpb.Job, error) {
138	md, _ := metadata.FromIncomingContext(ctx)
139	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
140		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
141	}
142	s.reqs = append(s.reqs, req)
143	if s.err != nil {
144		return nil, s.err
145	}
146	return s.resps[0].(*schedulerpb.Job), nil
147}
148
149func (s *mockCloudSchedulerServer) RunJob(ctx context.Context, req *schedulerpb.RunJobRequest) (*schedulerpb.Job, error) {
150	md, _ := metadata.FromIncomingContext(ctx)
151	if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
152		return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
153	}
154	s.reqs = append(s.reqs, req)
155	if s.err != nil {
156		return nil, s.err
157	}
158	return s.resps[0].(*schedulerpb.Job), nil
159}
160
161// clientOpt is the option tests should use to connect to the test server.
162// It is initialized by TestMain.
163var clientOpt option.ClientOption
164
165var (
166	mockCloudScheduler mockCloudSchedulerServer
167)
168
169func TestMain(m *testing.M) {
170	flag.Parse()
171
172	serv := grpc.NewServer()
173	schedulerpb.RegisterCloudSchedulerServer(serv, &mockCloudScheduler)
174
175	lis, err := net.Listen("tcp", "localhost:0")
176	if err != nil {
177		log.Fatal(err)
178	}
179	go serv.Serve(lis)
180
181	conn, err := grpc.Dial(lis.Addr().String(), grpc.WithInsecure())
182	if err != nil {
183		log.Fatal(err)
184	}
185	clientOpt = option.WithGRPCConn(conn)
186
187	os.Exit(m.Run())
188}
189
190func TestCloudSchedulerListJobs(t *testing.T) {
191	var nextPageToken string = ""
192	var jobsElement *schedulerpb.Job = &schedulerpb.Job{}
193	var jobs = []*schedulerpb.Job{jobsElement}
194	var expectedResponse = &schedulerpb.ListJobsResponse{
195		NextPageToken: nextPageToken,
196		Jobs:          jobs,
197	}
198
199	mockCloudScheduler.err = nil
200	mockCloudScheduler.reqs = nil
201
202	mockCloudScheduler.resps = append(mockCloudScheduler.resps[:0], expectedResponse)
203
204	var formattedParent string = fmt.Sprintf("projects/%s/locations/%s", "[PROJECT]", "[LOCATION]")
205	var request = &schedulerpb.ListJobsRequest{
206		Parent: formattedParent,
207	}
208
209	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
210	if err != nil {
211		t.Fatal(err)
212	}
213
214	resp, err := c.ListJobs(context.Background(), request).Next()
215
216	if err != nil {
217		t.Fatal(err)
218	}
219
220	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
221		t.Errorf("wrong request %q, want %q", got, want)
222	}
223
224	want := (interface{})(expectedResponse.Jobs[0])
225	got := (interface{})(resp)
226	var ok bool
227
228	switch want := (want).(type) {
229	case proto.Message:
230		ok = proto.Equal(want, got.(proto.Message))
231	default:
232		ok = want == got
233	}
234	if !ok {
235		t.Errorf("wrong response %q, want %q)", got, want)
236	}
237}
238
239func TestCloudSchedulerListJobsError(t *testing.T) {
240	errCode := codes.PermissionDenied
241	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
242
243	var formattedParent string = fmt.Sprintf("projects/%s/locations/%s", "[PROJECT]", "[LOCATION]")
244	var request = &schedulerpb.ListJobsRequest{
245		Parent: formattedParent,
246	}
247
248	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
249	if err != nil {
250		t.Fatal(err)
251	}
252
253	resp, err := c.ListJobs(context.Background(), request).Next()
254
255	if st, ok := gstatus.FromError(err); !ok {
256		t.Errorf("got error %v, expected grpc error", err)
257	} else if c := st.Code(); c != errCode {
258		t.Errorf("got error code %q, want %q", c, errCode)
259	}
260	_ = resp
261}
262func TestCloudSchedulerGetJob(t *testing.T) {
263	var name2 string = "name2-1052831874"
264	var description string = "description-1724546052"
265	var schedule string = "schedule-697920873"
266	var timeZone string = "timeZone36848094"
267	var expectedResponse = &schedulerpb.Job{
268		Name:        name2,
269		Description: description,
270		Schedule:    schedule,
271		TimeZone:    timeZone,
272	}
273
274	mockCloudScheduler.err = nil
275	mockCloudScheduler.reqs = nil
276
277	mockCloudScheduler.resps = append(mockCloudScheduler.resps[:0], expectedResponse)
278
279	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
280	var request = &schedulerpb.GetJobRequest{
281		Name: formattedName,
282	}
283
284	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
285	if err != nil {
286		t.Fatal(err)
287	}
288
289	resp, err := c.GetJob(context.Background(), request)
290
291	if err != nil {
292		t.Fatal(err)
293	}
294
295	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
296		t.Errorf("wrong request %q, want %q", got, want)
297	}
298
299	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
300		t.Errorf("wrong response %q, want %q)", got, want)
301	}
302}
303
304func TestCloudSchedulerGetJobError(t *testing.T) {
305	errCode := codes.PermissionDenied
306	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
307
308	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
309	var request = &schedulerpb.GetJobRequest{
310		Name: formattedName,
311	}
312
313	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
314	if err != nil {
315		t.Fatal(err)
316	}
317
318	resp, err := c.GetJob(context.Background(), request)
319
320	if st, ok := gstatus.FromError(err); !ok {
321		t.Errorf("got error %v, expected grpc error", err)
322	} else if c := st.Code(); c != errCode {
323		t.Errorf("got error code %q, want %q", c, errCode)
324	}
325	_ = resp
326}
327func TestCloudSchedulerCreateJob(t *testing.T) {
328	var name string = "name3373707"
329	var description string = "description-1724546052"
330	var schedule string = "schedule-697920873"
331	var timeZone string = "timeZone36848094"
332	var expectedResponse = &schedulerpb.Job{
333		Name:        name,
334		Description: description,
335		Schedule:    schedule,
336		TimeZone:    timeZone,
337	}
338
339	mockCloudScheduler.err = nil
340	mockCloudScheduler.reqs = nil
341
342	mockCloudScheduler.resps = append(mockCloudScheduler.resps[:0], expectedResponse)
343
344	var formattedParent string = fmt.Sprintf("projects/%s/locations/%s", "[PROJECT]", "[LOCATION]")
345	var job *schedulerpb.Job = &schedulerpb.Job{}
346	var request = &schedulerpb.CreateJobRequest{
347		Parent: formattedParent,
348		Job:    job,
349	}
350
351	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
352	if err != nil {
353		t.Fatal(err)
354	}
355
356	resp, err := c.CreateJob(context.Background(), request)
357
358	if err != nil {
359		t.Fatal(err)
360	}
361
362	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
363		t.Errorf("wrong request %q, want %q", got, want)
364	}
365
366	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
367		t.Errorf("wrong response %q, want %q)", got, want)
368	}
369}
370
371func TestCloudSchedulerCreateJobError(t *testing.T) {
372	errCode := codes.PermissionDenied
373	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
374
375	var formattedParent string = fmt.Sprintf("projects/%s/locations/%s", "[PROJECT]", "[LOCATION]")
376	var job *schedulerpb.Job = &schedulerpb.Job{}
377	var request = &schedulerpb.CreateJobRequest{
378		Parent: formattedParent,
379		Job:    job,
380	}
381
382	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
383	if err != nil {
384		t.Fatal(err)
385	}
386
387	resp, err := c.CreateJob(context.Background(), request)
388
389	if st, ok := gstatus.FromError(err); !ok {
390		t.Errorf("got error %v, expected grpc error", err)
391	} else if c := st.Code(); c != errCode {
392		t.Errorf("got error code %q, want %q", c, errCode)
393	}
394	_ = resp
395}
396func TestCloudSchedulerUpdateJob(t *testing.T) {
397	var name string = "name3373707"
398	var description string = "description-1724546052"
399	var schedule string = "schedule-697920873"
400	var timeZone string = "timeZone36848094"
401	var expectedResponse = &schedulerpb.Job{
402		Name:        name,
403		Description: description,
404		Schedule:    schedule,
405		TimeZone:    timeZone,
406	}
407
408	mockCloudScheduler.err = nil
409	mockCloudScheduler.reqs = nil
410
411	mockCloudScheduler.resps = append(mockCloudScheduler.resps[:0], expectedResponse)
412
413	var job *schedulerpb.Job = &schedulerpb.Job{}
414	var updateMask *field_maskpb.FieldMask = &field_maskpb.FieldMask{}
415	var request = &schedulerpb.UpdateJobRequest{
416		Job:        job,
417		UpdateMask: updateMask,
418	}
419
420	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
421	if err != nil {
422		t.Fatal(err)
423	}
424
425	resp, err := c.UpdateJob(context.Background(), request)
426
427	if err != nil {
428		t.Fatal(err)
429	}
430
431	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
432		t.Errorf("wrong request %q, want %q", got, want)
433	}
434
435	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
436		t.Errorf("wrong response %q, want %q)", got, want)
437	}
438}
439
440func TestCloudSchedulerUpdateJobError(t *testing.T) {
441	errCode := codes.PermissionDenied
442	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
443
444	var job *schedulerpb.Job = &schedulerpb.Job{}
445	var updateMask *field_maskpb.FieldMask = &field_maskpb.FieldMask{}
446	var request = &schedulerpb.UpdateJobRequest{
447		Job:        job,
448		UpdateMask: updateMask,
449	}
450
451	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
452	if err != nil {
453		t.Fatal(err)
454	}
455
456	resp, err := c.UpdateJob(context.Background(), request)
457
458	if st, ok := gstatus.FromError(err); !ok {
459		t.Errorf("got error %v, expected grpc error", err)
460	} else if c := st.Code(); c != errCode {
461		t.Errorf("got error code %q, want %q", c, errCode)
462	}
463	_ = resp
464}
465func TestCloudSchedulerDeleteJob(t *testing.T) {
466	var expectedResponse *emptypb.Empty = &emptypb.Empty{}
467
468	mockCloudScheduler.err = nil
469	mockCloudScheduler.reqs = nil
470
471	mockCloudScheduler.resps = append(mockCloudScheduler.resps[:0], expectedResponse)
472
473	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
474	var request = &schedulerpb.DeleteJobRequest{
475		Name: formattedName,
476	}
477
478	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
479	if err != nil {
480		t.Fatal(err)
481	}
482
483	err = c.DeleteJob(context.Background(), request)
484
485	if err != nil {
486		t.Fatal(err)
487	}
488
489	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
490		t.Errorf("wrong request %q, want %q", got, want)
491	}
492
493}
494
495func TestCloudSchedulerDeleteJobError(t *testing.T) {
496	errCode := codes.PermissionDenied
497	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
498
499	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
500	var request = &schedulerpb.DeleteJobRequest{
501		Name: formattedName,
502	}
503
504	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
505	if err != nil {
506		t.Fatal(err)
507	}
508
509	err = c.DeleteJob(context.Background(), request)
510
511	if st, ok := gstatus.FromError(err); !ok {
512		t.Errorf("got error %v, expected grpc error", err)
513	} else if c := st.Code(); c != errCode {
514		t.Errorf("got error code %q, want %q", c, errCode)
515	}
516}
517func TestCloudSchedulerPauseJob(t *testing.T) {
518	var name2 string = "name2-1052831874"
519	var description string = "description-1724546052"
520	var schedule string = "schedule-697920873"
521	var timeZone string = "timeZone36848094"
522	var expectedResponse = &schedulerpb.Job{
523		Name:        name2,
524		Description: description,
525		Schedule:    schedule,
526		TimeZone:    timeZone,
527	}
528
529	mockCloudScheduler.err = nil
530	mockCloudScheduler.reqs = nil
531
532	mockCloudScheduler.resps = append(mockCloudScheduler.resps[:0], expectedResponse)
533
534	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
535	var request = &schedulerpb.PauseJobRequest{
536		Name: formattedName,
537	}
538
539	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
540	if err != nil {
541		t.Fatal(err)
542	}
543
544	resp, err := c.PauseJob(context.Background(), request)
545
546	if err != nil {
547		t.Fatal(err)
548	}
549
550	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
551		t.Errorf("wrong request %q, want %q", got, want)
552	}
553
554	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
555		t.Errorf("wrong response %q, want %q)", got, want)
556	}
557}
558
559func TestCloudSchedulerPauseJobError(t *testing.T) {
560	errCode := codes.PermissionDenied
561	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
562
563	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
564	var request = &schedulerpb.PauseJobRequest{
565		Name: formattedName,
566	}
567
568	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
569	if err != nil {
570		t.Fatal(err)
571	}
572
573	resp, err := c.PauseJob(context.Background(), request)
574
575	if st, ok := gstatus.FromError(err); !ok {
576		t.Errorf("got error %v, expected grpc error", err)
577	} else if c := st.Code(); c != errCode {
578		t.Errorf("got error code %q, want %q", c, errCode)
579	}
580	_ = resp
581}
582func TestCloudSchedulerResumeJob(t *testing.T) {
583	var name2 string = "name2-1052831874"
584	var description string = "description-1724546052"
585	var schedule string = "schedule-697920873"
586	var timeZone string = "timeZone36848094"
587	var expectedResponse = &schedulerpb.Job{
588		Name:        name2,
589		Description: description,
590		Schedule:    schedule,
591		TimeZone:    timeZone,
592	}
593
594	mockCloudScheduler.err = nil
595	mockCloudScheduler.reqs = nil
596
597	mockCloudScheduler.resps = append(mockCloudScheduler.resps[:0], expectedResponse)
598
599	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
600	var request = &schedulerpb.ResumeJobRequest{
601		Name: formattedName,
602	}
603
604	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
605	if err != nil {
606		t.Fatal(err)
607	}
608
609	resp, err := c.ResumeJob(context.Background(), request)
610
611	if err != nil {
612		t.Fatal(err)
613	}
614
615	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
616		t.Errorf("wrong request %q, want %q", got, want)
617	}
618
619	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
620		t.Errorf("wrong response %q, want %q)", got, want)
621	}
622}
623
624func TestCloudSchedulerResumeJobError(t *testing.T) {
625	errCode := codes.PermissionDenied
626	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
627
628	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
629	var request = &schedulerpb.ResumeJobRequest{
630		Name: formattedName,
631	}
632
633	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
634	if err != nil {
635		t.Fatal(err)
636	}
637
638	resp, err := c.ResumeJob(context.Background(), request)
639
640	if st, ok := gstatus.FromError(err); !ok {
641		t.Errorf("got error %v, expected grpc error", err)
642	} else if c := st.Code(); c != errCode {
643		t.Errorf("got error code %q, want %q", c, errCode)
644	}
645	_ = resp
646}
647func TestCloudSchedulerRunJob(t *testing.T) {
648	var name2 string = "name2-1052831874"
649	var description string = "description-1724546052"
650	var schedule string = "schedule-697920873"
651	var timeZone string = "timeZone36848094"
652	var expectedResponse = &schedulerpb.Job{
653		Name:        name2,
654		Description: description,
655		Schedule:    schedule,
656		TimeZone:    timeZone,
657	}
658
659	mockCloudScheduler.err = nil
660	mockCloudScheduler.reqs = nil
661
662	mockCloudScheduler.resps = append(mockCloudScheduler.resps[:0], expectedResponse)
663
664	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
665	var request = &schedulerpb.RunJobRequest{
666		Name: formattedName,
667	}
668
669	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
670	if err != nil {
671		t.Fatal(err)
672	}
673
674	resp, err := c.RunJob(context.Background(), request)
675
676	if err != nil {
677		t.Fatal(err)
678	}
679
680	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
681		t.Errorf("wrong request %q, want %q", got, want)
682	}
683
684	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
685		t.Errorf("wrong response %q, want %q)", got, want)
686	}
687}
688
689func TestCloudSchedulerRunJobError(t *testing.T) {
690	errCode := codes.PermissionDenied
691	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
692
693	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
694	var request = &schedulerpb.RunJobRequest{
695		Name: formattedName,
696	}
697
698	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
699	if err != nil {
700		t.Fatal(err)
701	}
702
703	resp, err := c.RunJob(context.Background(), request)
704
705	if st, ok := gstatus.FromError(err); !ok {
706		t.Errorf("got error %v, expected grpc error", err)
707	} else if c := st.Code(); c != errCode {
708		t.Errorf("got error code %q, want %q", c, errCode)
709	}
710	_ = resp
711}
712