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