Skip to content

Commit 57461ab

Browse files
committed
test cleanup
1 parent db877a1 commit 57461ab

File tree

1 file changed

+115
-104
lines changed

1 file changed

+115
-104
lines changed

googleapis_auth/test/auth_client_signing_extension_test.dart

Lines changed: 115 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,24 @@ import 'package:test/test.dart';
1414

1515
import 'test_utils.dart';
1616

17+
http.Response? _mockMetadataResponse(http.Request request) {
18+
if (request.url.host == 'metadata.google.internal') {
19+
if (request.url.path.contains('universe_domain')) {
20+
return http.Response(
21+
'googleapis.com',
22+
200,
23+
headers: {'Metadata-Flavor': 'Google'},
24+
);
25+
}
26+
return http.Response(
27+
'test@test.iam.gserviceaccount.com',
28+
200,
29+
headers: {'Metadata-Flavor': 'Google'},
30+
);
31+
}
32+
return null;
33+
}
34+
1735
void main() {
1836
final dataToSign = utf8.encode('data to sign');
1937

@@ -58,40 +76,38 @@ void main() {
5876

5977
test('sign with impersonated client uses IAM API', () async {
6078
var requestCount = 0;
61-
final baseClient = mockClient(
62-
expectAsync1((request) async {
63-
requestCount++;
64-
65-
if (requestCount == 1) {
66-
// Initial generateAccessToken for impersonated client
67-
final expireTime = DateTime.now().toUtc().add(
68-
const Duration(hours: 1),
69-
);
70-
return http.Response(
71-
jsonEncode({
72-
'accessToken': 'impersonated-token',
73-
'expireTime': expireTime.toIso8601String(),
74-
}),
75-
200,
76-
headers: jsonContentType,
77-
);
78-
} else {
79-
// signBlob request via ImpersonatedAuthClient.sign()
80-
expect(request.method, equals('POST'));
81-
expect(request.url.toString(), contains(':signBlob'));
82-
83-
return http.Response(
84-
jsonEncode({
85-
'signedBlob': base64Encode([1, 2, 3, 4, 5]),
86-
'keyId': 'key-id',
87-
}),
88-
200,
89-
headers: jsonContentType,
90-
);
91-
}
92-
}, count: 2),
93-
expectClose: false,
94-
);
79+
final baseClient = mockClient((request) async {
80+
final metadataResponse = _mockMetadataResponse(request);
81+
if (metadataResponse != null) return metadataResponse;
82+
83+
requestCount++;
84+
85+
if (requestCount == 1) {
86+
// Initial generateAccessToken for impersonated client
87+
final expireTime = DateTime.now().toUtc().add(const Duration(hours: 1));
88+
return http.Response(
89+
jsonEncode({
90+
'accessToken': 'impersonated-token',
91+
'expireTime': expireTime.toIso8601String(),
92+
}),
93+
200,
94+
headers: jsonContentType,
95+
);
96+
} else {
97+
// signBlob request via ImpersonatedAuthClient.sign()
98+
expect(request.method, equals('POST'));
99+
expect(request.url.toString(), contains(':signBlob'));
100+
101+
return http.Response(
102+
jsonEncode({
103+
'signedBlob': base64Encode([1, 2, 3, 4, 5]),
104+
'keyId': 'key-id',
105+
}),
106+
200,
107+
headers: jsonContentType,
108+
);
109+
}
110+
}, expectClose: false);
95111

96112
final sourceCredentials = AccessCredentials(
97113
AccessToken(
@@ -120,40 +136,35 @@ void main() {
120136
test('explicitly calling extension on impersonated client delegates to '
121137
'instance method', () async {
122138
var requestCount = 0;
123-
final baseClient = mockClient(
124-
expectAsync1((request) async {
125-
requestCount++;
126-
127-
if (requestCount == 1) {
128-
// Initial generateAccessToken for impersonated client
129-
final expireTime = DateTime.now().toUtc().add(
130-
const Duration(hours: 1),
131-
);
132-
return http.Response(
133-
jsonEncode({
134-
'accessToken': 'impersonated-token',
135-
'expireTime': expireTime.toIso8601String(),
136-
}),
137-
200,
138-
headers: jsonContentType,
139-
);
140-
} else {
141-
// signBlob request via ImpersonatedAuthClient.sign()
142-
expect(request.method, equals('POST'));
143-
expect(request.url.toString(), contains(':signBlob'));
144-
145-
return http.Response(
146-
jsonEncode({
147-
'signedBlob': base64Encode([5, 6, 7, 8]),
148-
'keyId': 'key-id',
149-
}),
150-
200,
151-
headers: jsonContentType,
152-
);
153-
}
154-
}, count: 2),
155-
expectClose: false,
156-
);
139+
final baseClient = mockClient((request) async {
140+
requestCount++;
141+
142+
if (requestCount == 1) {
143+
// Initial generateAccessToken for impersonated client
144+
final expireTime = DateTime.now().toUtc().add(const Duration(hours: 1));
145+
return http.Response(
146+
jsonEncode({
147+
'accessToken': 'impersonated-token',
148+
'expireTime': expireTime.toIso8601String(),
149+
}),
150+
200,
151+
headers: jsonContentType,
152+
);
153+
} else {
154+
// signBlob request via ImpersonatedAuthClient.sign()
155+
expect(request.method, equals('POST'));
156+
expect(request.url.toString(), contains(':signBlob'));
157+
158+
return http.Response(
159+
jsonEncode({
160+
'signedBlob': base64Encode([5, 6, 7, 8]),
161+
'keyId': 'key-id',
162+
}),
163+
200,
164+
headers: jsonContentType,
165+
);
166+
}
167+
}, expectClose: false);
157168

158169
final sourceCredentials = AccessCredentials(
159170
AccessToken(
@@ -185,26 +196,26 @@ void main() {
185196
});
186197

187198
test('sign without service account credentials uses IAM API', () async {
188-
final baseClient = mockClient(
189-
expectAsync1((request) async {
190-
// IAM signBlob request
191-
expect(request.method, equals('POST'));
192-
expect(request.url.toString(), contains(':signBlob'));
193-
194-
final body = jsonDecode(request.body) as Map<String, dynamic>;
195-
expect(body['payload'], equals(base64Encode(dataToSign)));
196-
197-
return http.Response(
198-
jsonEncode({
199-
'signedBlob': base64Encode([10, 20, 30]),
200-
'keyId': 'key-id',
201-
}),
202-
200,
203-
headers: jsonContentType,
204-
);
205-
}),
206-
expectClose: false,
207-
);
199+
final baseClient = mockClient((request) async {
200+
final metadataResponse = _mockMetadataResponse(request);
201+
if (metadataResponse != null) return metadataResponse;
202+
203+
// IAM signBlob request
204+
expect(request.method, equals('POST'));
205+
expect(request.url.toString(), contains(':signBlob'));
206+
207+
final body = jsonDecode(request.body) as Map<String, dynamic>;
208+
expect(body['payload'], equals(base64Encode(dataToSign)));
209+
210+
return http.Response(
211+
jsonEncode({
212+
'signedBlob': base64Encode([10, 20, 30]),
213+
'keyId': 'key-id',
214+
}),
215+
200,
216+
headers: jsonContentType,
217+
);
218+
}, expectClose: false);
208219

209220
final credentials = AccessCredentials(
210221
AccessToken(
@@ -225,22 +236,22 @@ void main() {
225236
}, testOn: 'vm');
226237

227238
test('sign with custom endpoint extracts universe domain', () async {
228-
final baseClient = mockClient(
229-
expectAsync1((request) async {
230-
// IAM signBlob request - verify custom universe domain is used
231-
expect(request.url.host, equals('iamcredentials.example.com'));
232-
233-
return http.Response(
234-
jsonEncode({
235-
'signedBlob': base64Encode([5, 6, 7]),
236-
'keyId': 'key-id',
237-
}),
238-
200,
239-
headers: jsonContentType,
240-
);
241-
}),
242-
expectClose: false,
243-
);
239+
final baseClient = mockClient((request) async {
240+
final metadataResponse = _mockMetadataResponse(request);
241+
if (metadataResponse != null) return metadataResponse;
242+
243+
// IAM signBlob request - verify custom universe domain is used
244+
expect(request.url.host, equals('iamcredentials.example.com'));
245+
246+
return http.Response(
247+
jsonEncode({
248+
'signedBlob': base64Encode([5, 6, 7]),
249+
'keyId': 'key-id',
250+
}),
251+
200,
252+
headers: jsonContentType,
253+
);
254+
}, expectClose: false);
244255

245256
final credentials = AccessCredentials(
246257
AccessToken(

0 commit comments

Comments
 (0)