public async Task AccessTokenWithHeadersCredential()
        {
            var mockClock     = new MockClock();
            var tokenResponse = new TokenResponse
            {
                AccessToken      = "ACCESS_TOKEN",
                ExpiresInSeconds = 60 * 10,
                IssuedUtc        = DateTime.Now,
                RefreshToken     = "REFRESH_TOKEN",
            };
            var flowMock = new Mock <IAuthorizationCodeFlow>(MockBehavior.Strict);

            flowMock
            .Setup(flow => flow.Clock)
            .Returns(mockClock);
            flowMock
            .Setup(flow => flow.AccessMethod)
            .Returns(new AuthorizationHeaderAccessMethod());

            var         userCred = new UserCredential(flowMock.Object, "USER_ID", tokenResponse, "QUOTA_PROJECT");
            ICredential cred     = new GoogleCredential(userCred);

            var httpHandler = new FakeHandler();
            var httpClient  = new Http.ConfigurableHttpClient(new Http.ConfigurableMessageHandler(httpHandler));

            cred.Initialize(httpClient);
            await httpClient.GetAsync("http://localhost/TestRequest");

            Assert.Equal("Bearer", httpHandler.RequestHeaders.Authorization.Scheme);
            Assert.Equal("ACCESS_TOKEN", httpHandler.RequestHeaders.Authorization.Parameter);

            Assert.True(httpHandler.RequestHeaders.TryGetValues("x-goog-user-project", out var values));
            Assert.Single(values);
            Assert.Equal("QUOTA_PROJECT", values.First());
        }
        public async Task AccessTokenCredential()
        {
            const string fakeAccessToken = "FakeAccessToken";
            // Create an access-token credential, and check the access token is correct.
            ICredential cred = GoogleCredential.FromAccessToken(fakeAccessToken);

            Assert.Equal(fakeAccessToken, await cred.GetAccessTokenForRequestAsync());
            // Check the auth header is added correctly to an HTTP request.
            var httpHandler = new FakeHandler();
            var httpClient  = new Http.ConfigurableHttpClient(new Http.ConfigurableMessageHandler(httpHandler));

            cred.Initialize(httpClient);
            await httpClient.GetAsync("http://localhost/TestRequest");

            Assert.Equal("Bearer", httpHandler.RequestHeaders.Authorization.Scheme);
            Assert.Equal(fakeAccessToken, httpHandler.RequestHeaders.Authorization.Parameter);
        }