public async Task Signer() { var bytes = Encoding.UTF8.GetBytes("signature"); var handler = new MockMessageHandler() { Response = "discovered-service-account", }; var factory = new MockHttpClientFactory(handler); var signer = new IAMSigner(factory, GoogleCredential.FromAccessToken("token")); Assert.Equal("discovered-service-account", await signer.GetKeyIdAsync()); Assert.Equal(1, handler.Calls); // should only fetch account once Assert.Equal("discovered-service-account", await signer.GetKeyIdAsync()); Assert.Equal(1, handler.Calls); handler.Response = new IAMSigner.SignBlobResponse() { Signature = Convert.ToBase64String(bytes), }; byte[] data = Encoding.UTF8.GetBytes("Hello world"); byte[] signature = await signer.SignDataAsync(data); Assert.Equal(bytes, signature); var req = NewtonsoftJsonSerializer.Instance.Deserialize <IAMSigner.SignBlobRequest>( handler.LastRequestBody); Assert.Equal(Convert.ToBase64String(data), req.BytesToSign); Assert.Equal(2, handler.Calls); Assert.Equal("Bearer token", handler.LastRequestHeaders.Authorization?.ToString()); }
public async Task AccountDiscoveryError() { var bytes = Encoding.UTF8.GetBytes("signature"); var handler = new MockMessageHandler() { StatusCode = HttpStatusCode.InternalServerError, }; var factory = new MockHttpClientFactory(handler); var signer = new IAMSigner(factory, GoogleCredential.FromAccessToken("token")); var errorMessage = "Failed to determine service account ID. Make sure to initialize the SDK " + "with service account credentials or specify a service account " + "ID with iam.serviceAccounts.signBlob permission. Please refer to " + "https://firebase.google.com/docs/auth/admin/create-custom-tokens for " + "more details on creating custom tokens."; var ex = await Assert.ThrowsAsync <InvalidOperationException>( async() => await signer.GetKeyIdAsync()); Assert.Equal(1, handler.Calls); Assert.Equal(errorMessage, ex.Message); Assert.IsType <HttpRequestException>(ex.InnerException); ex = await Assert.ThrowsAsync <InvalidOperationException>( async() => await signer.GetKeyIdAsync()); Assert.Equal(1, handler.Calls); Assert.Equal(errorMessage, ex.Message); Assert.IsType <HttpRequestException>(ex.InnerException); }
public async Task AccountDiscoveryError() { var bytes = Encoding.UTF8.GetBytes("signature"); var handler = new MockMessageHandler() { StatusCode = HttpStatusCode.InternalServerError, }; var factory = new MockHttpClientFactory(handler); var signer = new IAMSigner(factory, GoogleCredential.FromAccessToken("token")); await Assert.ThrowsAsync <FirebaseException>( async() => await signer.GetKeyIdAsync()); Assert.Equal(1, handler.Calls); await Assert.ThrowsAsync <FirebaseException>( async() => await signer.GetKeyIdAsync()); Assert.Equal(1, handler.Calls); }