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