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/v1beta1"
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 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 request = &schedulerpb.UpdateJobRequest{
414		Job: job,
415	}
416
417	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
418	if err != nil {
419		t.Fatal(err)
420	}
421
422	resp, err := c.UpdateJob(context.Background(), request)
423
424	if err != nil {
425		t.Fatal(err)
426	}
427
428	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
429		t.Errorf("wrong request %q, want %q", got, want)
430	}
431
432	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
433		t.Errorf("wrong response %q, want %q)", got, want)
434	}
435}
436
437func TestCloudSchedulerUpdateJobError(t *testing.T) {
438	errCode := codes.PermissionDenied
439	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
440
441	var job *schedulerpb.Job = &schedulerpb.Job{}
442	var request = &schedulerpb.UpdateJobRequest{
443		Job: job,
444	}
445
446	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
447	if err != nil {
448		t.Fatal(err)
449	}
450
451	resp, err := c.UpdateJob(context.Background(), request)
452
453	if st, ok := gstatus.FromError(err); !ok {
454		t.Errorf("got error %v, expected grpc error", err)
455	} else if c := st.Code(); c != errCode {
456		t.Errorf("got error code %q, want %q", c, errCode)
457	}
458	_ = resp
459}
460func TestCloudSchedulerDeleteJob(t *testing.T) {
461	var expectedResponse *emptypb.Empty = &emptypb.Empty{}
462
463	mockCloudScheduler.err = nil
464	mockCloudScheduler.reqs = nil
465
466	mockCloudScheduler.resps = append(mockCloudScheduler.resps[:0], expectedResponse)
467
468	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
469	var request = &schedulerpb.DeleteJobRequest{
470		Name: formattedName,
471	}
472
473	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
474	if err != nil {
475		t.Fatal(err)
476	}
477
478	err = c.DeleteJob(context.Background(), request)
479
480	if err != nil {
481		t.Fatal(err)
482	}
483
484	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
485		t.Errorf("wrong request %q, want %q", got, want)
486	}
487
488}
489
490func TestCloudSchedulerDeleteJobError(t *testing.T) {
491	errCode := codes.PermissionDenied
492	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
493
494	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
495	var request = &schedulerpb.DeleteJobRequest{
496		Name: formattedName,
497	}
498
499	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
500	if err != nil {
501		t.Fatal(err)
502	}
503
504	err = c.DeleteJob(context.Background(), request)
505
506	if st, ok := gstatus.FromError(err); !ok {
507		t.Errorf("got error %v, expected grpc error", err)
508	} else if c := st.Code(); c != errCode {
509		t.Errorf("got error code %q, want %q", c, errCode)
510	}
511}
512func TestCloudSchedulerPauseJob(t *testing.T) {
513	var name2 string = "name2-1052831874"
514	var description string = "description-1724546052"
515	var schedule string = "schedule-697920873"
516	var timeZone string = "timeZone36848094"
517	var expectedResponse = &schedulerpb.Job{
518		Name:        name2,
519		Description: description,
520		Schedule:    schedule,
521		TimeZone:    timeZone,
522	}
523
524	mockCloudScheduler.err = nil
525	mockCloudScheduler.reqs = nil
526
527	mockCloudScheduler.resps = append(mockCloudScheduler.resps[:0], expectedResponse)
528
529	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
530	var request = &schedulerpb.PauseJobRequest{
531		Name: formattedName,
532	}
533
534	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
535	if err != nil {
536		t.Fatal(err)
537	}
538
539	resp, err := c.PauseJob(context.Background(), request)
540
541	if err != nil {
542		t.Fatal(err)
543	}
544
545	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
546		t.Errorf("wrong request %q, want %q", got, want)
547	}
548
549	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
550		t.Errorf("wrong response %q, want %q)", got, want)
551	}
552}
553
554func TestCloudSchedulerPauseJobError(t *testing.T) {
555	errCode := codes.PermissionDenied
556	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
557
558	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
559	var request = &schedulerpb.PauseJobRequest{
560		Name: formattedName,
561	}
562
563	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
564	if err != nil {
565		t.Fatal(err)
566	}
567
568	resp, err := c.PauseJob(context.Background(), request)
569
570	if st, ok := gstatus.FromError(err); !ok {
571		t.Errorf("got error %v, expected grpc error", err)
572	} else if c := st.Code(); c != errCode {
573		t.Errorf("got error code %q, want %q", c, errCode)
574	}
575	_ = resp
576}
577func TestCloudSchedulerResumeJob(t *testing.T) {
578	var name2 string = "name2-1052831874"
579	var description string = "description-1724546052"
580	var schedule string = "schedule-697920873"
581	var timeZone string = "timeZone36848094"
582	var expectedResponse = &schedulerpb.Job{
583		Name:        name2,
584		Description: description,
585		Schedule:    schedule,
586		TimeZone:    timeZone,
587	}
588
589	mockCloudScheduler.err = nil
590	mockCloudScheduler.reqs = nil
591
592	mockCloudScheduler.resps = append(mockCloudScheduler.resps[:0], expectedResponse)
593
594	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
595	var request = &schedulerpb.ResumeJobRequest{
596		Name: formattedName,
597	}
598
599	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
600	if err != nil {
601		t.Fatal(err)
602	}
603
604	resp, err := c.ResumeJob(context.Background(), request)
605
606	if err != nil {
607		t.Fatal(err)
608	}
609
610	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
611		t.Errorf("wrong request %q, want %q", got, want)
612	}
613
614	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
615		t.Errorf("wrong response %q, want %q)", got, want)
616	}
617}
618
619func TestCloudSchedulerResumeJobError(t *testing.T) {
620	errCode := codes.PermissionDenied
621	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
622
623	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
624	var request = &schedulerpb.ResumeJobRequest{
625		Name: formattedName,
626	}
627
628	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
629	if err != nil {
630		t.Fatal(err)
631	}
632
633	resp, err := c.ResumeJob(context.Background(), request)
634
635	if st, ok := gstatus.FromError(err); !ok {
636		t.Errorf("got error %v, expected grpc error", err)
637	} else if c := st.Code(); c != errCode {
638		t.Errorf("got error code %q, want %q", c, errCode)
639	}
640	_ = resp
641}
642func TestCloudSchedulerRunJob(t *testing.T) {
643	var name2 string = "name2-1052831874"
644	var description string = "description-1724546052"
645	var schedule string = "schedule-697920873"
646	var timeZone string = "timeZone36848094"
647	var expectedResponse = &schedulerpb.Job{
648		Name:        name2,
649		Description: description,
650		Schedule:    schedule,
651		TimeZone:    timeZone,
652	}
653
654	mockCloudScheduler.err = nil
655	mockCloudScheduler.reqs = nil
656
657	mockCloudScheduler.resps = append(mockCloudScheduler.resps[:0], expectedResponse)
658
659	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
660	var request = &schedulerpb.RunJobRequest{
661		Name: formattedName,
662	}
663
664	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
665	if err != nil {
666		t.Fatal(err)
667	}
668
669	resp, err := c.RunJob(context.Background(), request)
670
671	if err != nil {
672		t.Fatal(err)
673	}
674
675	if want, got := request, mockCloudScheduler.reqs[0]; !proto.Equal(want, got) {
676		t.Errorf("wrong request %q, want %q", got, want)
677	}
678
679	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
680		t.Errorf("wrong response %q, want %q)", got, want)
681	}
682}
683
684func TestCloudSchedulerRunJobError(t *testing.T) {
685	errCode := codes.PermissionDenied
686	mockCloudScheduler.err = gstatus.Error(errCode, "test error")
687
688	var formattedName string = fmt.Sprintf("projects/%s/locations/%s/jobs/%s", "[PROJECT]", "[LOCATION]", "[JOB]")
689	var request = &schedulerpb.RunJobRequest{
690		Name: formattedName,
691	}
692
693	c, err := NewCloudSchedulerClient(context.Background(), clientOpt)
694	if err != nil {
695		t.Fatal(err)
696	}
697
698	resp, err := c.RunJob(context.Background(), request)
699
700	if st, ok := gstatus.FromError(err); !ok {
701		t.Errorf("got error %v, expected grpc error", err)
702	} else if c := st.Code(); c != errCode {
703		t.Errorf("got error code %q, want %q", c, errCode)
704	}
705	_ = resp
706}
707