Skip to content

Commit b6cf20a

Browse files
authored
chore: Add X-Goog-Api-Client metric header to outgoing requests (#430)
* chore: Add `X-Goog-Api-Client` metric header to outgoing requests * fix styling * fix typo * fix typo * trigger integration tests
1 parent 379e391 commit b6cf20a

18 files changed

+48
-2
lines changed

FirebaseAdmin/FirebaseAdmin.Tests/Auth/Jwt/HttpPublicKeySourceTest.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public async Task GetPublicKeysWithoutCaching()
4444
Assert.Equal(2, keys.Count);
4545
Assert.Equal(2, handler.Calls);
4646
Assert.NotSame(keys, keys2);
47+
JwtTestUtils.AssertRequest(handler.Requests[0]);
48+
JwtTestUtils.AssertRequest(handler.Requests[1]);
4749
}
4850

4951
[Fact]
@@ -77,6 +79,8 @@ public async Task GetPublicKeysWithCaching()
7779
Assert.Equal(2, keys.Count);
7880
Assert.Equal(2, handler.Calls);
7981
Assert.NotSame(keys, keys3);
82+
JwtTestUtils.AssertRequest(handler.Requests[0]);
83+
JwtTestUtils.AssertRequest(handler.Requests[1]);
8084
}
8185

8286
[Fact]

FirebaseAdmin/FirebaseAdmin.Tests/Auth/Jwt/IAMSignerTest.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public async Task Signer()
5757
Assert.Equal(Convert.ToBase64String(data), req.BytesToSign);
5858
Assert.Equal(2, handler.Calls);
5959
Assert.Equal("Bearer token", handler.LastRequestHeaders.Authorization?.ToString());
60+
JwtTestUtils.AssertRequest(handler.Requests[1]);
6061
}
6162

6263
[Fact]
@@ -112,6 +113,7 @@ public async Task Signer()
112113
handler.LastRequestBody);
113114
Assert.Equal(Convert.ToBase64String(data), req.BytesToSign);
114115
Assert.Equal(1, handler.Calls);
116+
JwtTestUtils.AssertRequest(Assert.Single(handler.Requests));
115117
}
116118

117119
[Fact]

FirebaseAdmin/FirebaseAdmin.Tests/Auth/Jwt/IdTokenVerificationTest.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,7 @@ public async Task RevokedToken(TestConfig config)
434434
this.CheckException(exception, expectedMessage, AuthErrorCode.RevokedIdToken);
435435
Assert.Equal(1, handler.Calls);
436436
config.AssertRevocationCheckRequest(handler.Requests[0].Url);
437+
JwtTestUtils.AssertRequest(Assert.Single(handler.Requests));
437438
}
438439

439440
[Theory]
@@ -458,6 +459,7 @@ public async Task ValidUnrevokedToken(TestConfig config)
458459
Assert.Equal("testuser", decoded.Uid);
459460
Assert.Equal(1, handler.Calls);
460461
config.AssertRevocationCheckRequest(handler.Requests[0].Url);
462+
JwtTestUtils.AssertRequest(Assert.Single(handler.Requests));
461463
}
462464

463465
[Theory]
@@ -484,6 +486,7 @@ public async Task CheckRevokedError(TestConfig config)
484486
Assert.NotNull(exception.HttpResponse);
485487
Assert.Equal(1, handler.Calls);
486488
config.AssertRevocationCheckRequest(handler.Requests[0].Url);
489+
JwtTestUtils.AssertRequest(Assert.Single(handler.Requests));
487490
}
488491

489492
[Theory]

FirebaseAdmin/FirebaseAdmin.Tests/Auth/Jwt/JwtTestUtils.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ public static void AssertRevocationCheckRequest(string tenantId, string emulator
100100
Assert.Equal(expectedUrl, uri.ToString());
101101
}
102102

103+
internal static void AssertRequest(MockMessageHandler.IncomingRequest request)
104+
{
105+
Assert.Contains(HttpUtils.GetMetricsHeader(), request.Headers.GetValues("X-Goog-Api-Client"));
106+
}
107+
103108
private static ISigner CreateTestSigner(string filePath)
104109
{
105110
var credential = GoogleCredential.FromFile(filePath);

FirebaseAdmin/FirebaseAdmin.Tests/Auth/Jwt/SessionCookieVerificationTest.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ public async Task RevokedToken(TestConfig config)
331331
this.CheckException(exception, expectedMessage, AuthErrorCode.RevokedSessionCookie);
332332
Assert.Equal(1, handler.Calls);
333333
JwtTestUtils.AssertRevocationCheckRequest(null, handler.Requests[0].Url);
334+
JwtTestUtils.AssertRequest(Assert.Single(handler.Requests));
334335
}
335336

336337
[Theory]
@@ -355,6 +356,7 @@ public async Task ValidUnrevokedToken(TestConfig config)
355356
Assert.Equal("testuser", decoded.Uid);
356357
Assert.Equal(1, handler.Calls);
357358
JwtTestUtils.AssertRevocationCheckRequest(null, handler.Requests[0].Url);
359+
JwtTestUtils.AssertRequest(Assert.Single(handler.Requests));
358360
}
359361

360362
[Theory]
@@ -381,6 +383,7 @@ public async Task CheckRevokedError(TestConfig config)
381383
Assert.NotNull(exception.HttpResponse);
382384
Assert.Equal(1, handler.Calls);
383385
JwtTestUtils.AssertRevocationCheckRequest(null, handler.Requests[0].Url);
386+
JwtTestUtils.AssertRequest(Assert.Single(handler.Requests));
384387
}
385388

386389
private void CheckException(

FirebaseAdmin/FirebaseAdmin.Tests/Auth/Multitenancy/TenantManagerTest.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,7 @@ internal void AssertRequest(
690690
}
691691

692692
Assert.Contains(ClientVersion, request.Headers.GetValues("X-Client-Version"));
693+
Assert.Contains(HttpUtils.GetMetricsHeader(), request.Headers.GetValues("X-Goog-Api-Client"));
693694
}
694695
}
695696

FirebaseAdmin/FirebaseAdmin.Tests/Auth/Providers/ProviderTestConfig.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ internal void AssertRequest(
109109
var expectedPath = $"/v2/projects/{MockProjectId}{tenantInfo}/{expectedSuffix}";
110110
Assert.Equal(expectedPath, request.Url.PathAndQuery);
111111
Assert.Contains(ClientVersion, request.Headers.GetValues("X-Client-Version"));
112+
Assert.Contains(HttpUtils.GetMetricsHeader(), request.Headers.GetValues("X-Goog-Api-Client"));
112113
}
113114

114115
public class InvalidListOptions : IEnumerable<object[]>

FirebaseAdmin/FirebaseAdmin.Tests/Auth/Users/EmailActionRequestTest.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ private void AssertRequest(MockMessageHandler.IncomingRequest message)
372372
Assert.Equal(
373373
FirebaseUserManager.ClientVersion,
374374
message.Headers.GetValues(FirebaseUserManager.ClientVersionHeader).First());
375+
Assert.Equal(HttpUtils.GetMetricsHeader(), message.Headers.GetValues("X-Goog-Api-Client").First());
375376
}
376377
}
377378
}

FirebaseAdmin/FirebaseAdmin.Tests/Auth/Users/FirebaseUserManagerTest.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2222,6 +2222,8 @@ internal void AssertRequest(
22222222
var expectedUrl = $"https://{IdToolkitUrl}{tenant}/{expectedSuffix}";
22232223
Assert.Equal(expectedUrl, request.Url.ToString());
22242224
}
2225+
2226+
Assert.Equal(HttpUtils.GetMetricsHeader(), request.Headers.GetValues("X-Goog-Api-Client").First());
22252227
}
22262228

22272229
private IDictionary<string, object> GetUserResponseDictionary(string response = null)

FirebaseAdmin/FirebaseAdmin.Tests/CountingMessageHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,4 @@ protected sealed override Task<HttpResponseMessage> SendAsync(
4141
protected abstract Task<HttpResponseMessage> DoSendAsync(
4242
HttpRequestMessage request, int count, CancellationToken cancellationToken);
4343
}
44-
}
44+
}

0 commit comments

Comments
 (0)