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 credentials
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	credentialspb "google.golang.org/genproto/googleapis/iam/credentials/v1"
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 mockIamCredentialsServer struct {
48	// Embed for forward compatibility.
49	// Tests will keep working if more methods are added
50	// in the future.
51	credentialspb.IAMCredentialsServer
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 *mockIamCredentialsServer) GenerateAccessToken(ctx context.Context, req *credentialspb.GenerateAccessTokenRequest) (*credentialspb.GenerateAccessTokenResponse, 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].(*credentialspb.GenerateAccessTokenResponse), nil
72}
73
74func (s *mockIamCredentialsServer) GenerateIdToken(ctx context.Context, req *credentialspb.GenerateIdTokenRequest) (*credentialspb.GenerateIdTokenResponse, 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].(*credentialspb.GenerateIdTokenResponse), nil
84}
85
86func (s *mockIamCredentialsServer) SignBlob(ctx context.Context, req *credentialspb.SignBlobRequest) (*credentialspb.SignBlobResponse, 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].(*credentialspb.SignBlobResponse), nil
96}
97
98func (s *mockIamCredentialsServer) SignJwt(ctx context.Context, req *credentialspb.SignJwtRequest) (*credentialspb.SignJwtResponse, 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].(*credentialspb.SignJwtResponse), nil
108}
109
110// clientOpt is the option tests should use to connect to the test server.
111// It is initialized by TestMain.
112var clientOpt option.ClientOption
113
114var (
115	mockIamCredentials mockIamCredentialsServer
116)
117
118func TestMain(m *testing.M) {
119	flag.Parse()
120
121	serv := grpc.NewServer()
122	credentialspb.RegisterIAMCredentialsServer(serv, &mockIamCredentials)
123
124	lis, err := net.Listen("tcp", "localhost:0")
125	if err != nil {
126		log.Fatal(err)
127	}
128	go serv.Serve(lis)
129
130	conn, err := grpc.Dial(lis.Addr().String(), grpc.WithInsecure())
131	if err != nil {
132		log.Fatal(err)
133	}
134	clientOpt = option.WithGRPCConn(conn)
135
136	os.Exit(m.Run())
137}
138
139func TestIamCredentialsGenerateAccessToken(t *testing.T) {
140	var accessToken string = "accessToken-1938933922"
141	var expectedResponse = &credentialspb.GenerateAccessTokenResponse{
142		AccessToken: accessToken,
143	}
144
145	mockIamCredentials.err = nil
146	mockIamCredentials.reqs = nil
147
148	mockIamCredentials.resps = append(mockIamCredentials.resps[:0], expectedResponse)
149
150	var formattedName string = fmt.Sprintf("projects/%s/serviceAccounts/%s", "[PROJECT]", "[SERVICE_ACCOUNT]")
151	var scope []string = nil
152	var request = &credentialspb.GenerateAccessTokenRequest{
153		Name:  formattedName,
154		Scope: scope,
155	}
156
157	c, err := NewIamCredentialsClient(context.Background(), clientOpt)
158	if err != nil {
159		t.Fatal(err)
160	}
161
162	resp, err := c.GenerateAccessToken(context.Background(), request)
163
164	if err != nil {
165		t.Fatal(err)
166	}
167
168	if want, got := request, mockIamCredentials.reqs[0]; !proto.Equal(want, got) {
169		t.Errorf("wrong request %q, want %q", got, want)
170	}
171
172	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
173		t.Errorf("wrong response %q, want %q)", got, want)
174	}
175}
176
177func TestIamCredentialsGenerateAccessTokenError(t *testing.T) {
178	errCode := codes.PermissionDenied
179	mockIamCredentials.err = gstatus.Error(errCode, "test error")
180
181	var formattedName string = fmt.Sprintf("projects/%s/serviceAccounts/%s", "[PROJECT]", "[SERVICE_ACCOUNT]")
182	var scope []string = nil
183	var request = &credentialspb.GenerateAccessTokenRequest{
184		Name:  formattedName,
185		Scope: scope,
186	}
187
188	c, err := NewIamCredentialsClient(context.Background(), clientOpt)
189	if err != nil {
190		t.Fatal(err)
191	}
192
193	resp, err := c.GenerateAccessToken(context.Background(), request)
194
195	if st, ok := gstatus.FromError(err); !ok {
196		t.Errorf("got error %v, expected grpc error", err)
197	} else if c := st.Code(); c != errCode {
198		t.Errorf("got error code %q, want %q", c, errCode)
199	}
200	_ = resp
201}
202func TestIamCredentialsGenerateIdToken(t *testing.T) {
203	var token string = "token110541305"
204	var expectedResponse = &credentialspb.GenerateIdTokenResponse{
205		Token: token,
206	}
207
208	mockIamCredentials.err = nil
209	mockIamCredentials.reqs = nil
210
211	mockIamCredentials.resps = append(mockIamCredentials.resps[:0], expectedResponse)
212
213	var formattedName string = fmt.Sprintf("projects/%s/serviceAccounts/%s", "[PROJECT]", "[SERVICE_ACCOUNT]")
214	var audience string = "audience975628804"
215	var request = &credentialspb.GenerateIdTokenRequest{
216		Name:     formattedName,
217		Audience: audience,
218	}
219
220	c, err := NewIamCredentialsClient(context.Background(), clientOpt)
221	if err != nil {
222		t.Fatal(err)
223	}
224
225	resp, err := c.GenerateIdToken(context.Background(), request)
226
227	if err != nil {
228		t.Fatal(err)
229	}
230
231	if want, got := request, mockIamCredentials.reqs[0]; !proto.Equal(want, got) {
232		t.Errorf("wrong request %q, want %q", got, want)
233	}
234
235	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
236		t.Errorf("wrong response %q, want %q)", got, want)
237	}
238}
239
240func TestIamCredentialsGenerateIdTokenError(t *testing.T) {
241	errCode := codes.PermissionDenied
242	mockIamCredentials.err = gstatus.Error(errCode, "test error")
243
244	var formattedName string = fmt.Sprintf("projects/%s/serviceAccounts/%s", "[PROJECT]", "[SERVICE_ACCOUNT]")
245	var audience string = "audience975628804"
246	var request = &credentialspb.GenerateIdTokenRequest{
247		Name:     formattedName,
248		Audience: audience,
249	}
250
251	c, err := NewIamCredentialsClient(context.Background(), clientOpt)
252	if err != nil {
253		t.Fatal(err)
254	}
255
256	resp, err := c.GenerateIdToken(context.Background(), request)
257
258	if st, ok := gstatus.FromError(err); !ok {
259		t.Errorf("got error %v, expected grpc error", err)
260	} else if c := st.Code(); c != errCode {
261		t.Errorf("got error code %q, want %q", c, errCode)
262	}
263	_ = resp
264}
265func TestIamCredentialsSignBlob(t *testing.T) {
266	var keyId string = "keyId-1134673157"
267	var signedBlob []byte = []byte("-32")
268	var expectedResponse = &credentialspb.SignBlobResponse{
269		KeyId:      keyId,
270		SignedBlob: signedBlob,
271	}
272
273	mockIamCredentials.err = nil
274	mockIamCredentials.reqs = nil
275
276	mockIamCredentials.resps = append(mockIamCredentials.resps[:0], expectedResponse)
277
278	var formattedName string = fmt.Sprintf("projects/%s/serviceAccounts/%s", "[PROJECT]", "[SERVICE_ACCOUNT]")
279	var payload []byte = []byte("-114")
280	var request = &credentialspb.SignBlobRequest{
281		Name:    formattedName,
282		Payload: payload,
283	}
284
285	c, err := NewIamCredentialsClient(context.Background(), clientOpt)
286	if err != nil {
287		t.Fatal(err)
288	}
289
290	resp, err := c.SignBlob(context.Background(), request)
291
292	if err != nil {
293		t.Fatal(err)
294	}
295
296	if want, got := request, mockIamCredentials.reqs[0]; !proto.Equal(want, got) {
297		t.Errorf("wrong request %q, want %q", got, want)
298	}
299
300	if want, got := expectedResponse, resp; !proto.Equal(want, got) {
301		t.Errorf("wrong response %q, want %q)", got, want)
302	}
303}
304
305func TestIamCredentialsSignBlobError(t *testing.T) {
306	errCode := codes.PermissionDenied
307	mockIamCredentials.err = gstatus.Error(errCode, "test error")
308
309	var formattedName string = fmt.Sprintf("projects/%s/serviceAccounts/%s", "[PROJECT]", "[SERVICE_ACCOUNT]")
310	var payload []byte = []byte("-114")
311	var request = &credentialspb.SignBlobRequest{
312		Name:    formattedName,
313		Payload: payload,
314	}
315
316	c, err := NewIamCredentialsClient(context.Background(), clientOpt)
317	if err != nil {
318		t.Fatal(err)
319	}
320
321	resp, err := c.SignBlob(context.Background(), request)
322
323	if st, ok := gstatus.FromError(err); !ok {
324		t.Errorf("got error %v, expected grpc error", err)
325	} else if c := st.Code(); c != errCode {
326		t.Errorf("got error code %q, want %q", c, errCode)
327	}
328	_ = resp
329}
330func TestIamCredentialsSignJwt(t *testing.T) {
331	var keyId string = "keyId-1134673157"
332	var signedJwt string = "signedJwt-979546844"
333	var expectedResponse = &credentialspb.SignJwtResponse{
334		KeyId:     keyId,
335		SignedJwt: signedJwt,
336	}
337
338	mockIamCredentials.err = nil
339	mockIamCredentials.reqs = nil
340
341	mockIamCredentials.resps = append(mockIamCredentials.resps[:0], expectedResponse)
342
343	var formattedName string = fmt.Sprintf("projects/%s/serviceAccounts/%s", "[PROJECT]", "[SERVICE_ACCOUNT]")
344	var payload string = "-114"
345	var request = &credentialspb.SignJwtRequest{
346		Name:    formattedName,
347		Payload: payload,
348	}
349
350	c, err := NewIamCredentialsClient(context.Background(), clientOpt)
351	if err != nil {
352		t.Fatal(err)
353	}
354
355	resp, err := c.SignJwt(context.Background(), request)
356
357	if err != nil {
358		t.Fatal(err)
359	}
360
361	if want, got := request, mockIamCredentials.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 TestIamCredentialsSignJwtError(t *testing.T) {
371	errCode := codes.PermissionDenied
372	mockIamCredentials.err = gstatus.Error(errCode, "test error")
373
374	var formattedName string = fmt.Sprintf("projects/%s/serviceAccounts/%s", "[PROJECT]", "[SERVICE_ACCOUNT]")
375	var payload string = "-114"
376	var request = &credentialspb.SignJwtRequest{
377		Name:    formattedName,
378		Payload: payload,
379	}
380
381	c, err := NewIamCredentialsClient(context.Background(), clientOpt)
382	if err != nil {
383		t.Fatal(err)
384	}
385
386	resp, err := c.SignJwt(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}
395