public async Task CacheDurationFromOptionsIsUsed() { _options.PdpCacheDuration = 60; var cacheEntry = new TestCacheEntry(); var mockedCache = CreateEmptyMockedCache(); mockedCache.Setup(c => c.CreateEntry(BuildCacheKey(_userId))) .Returns(cacheEntry); var pdpResponse = new PdpResponse { applicationId = _application, userId = _userId, permissions = new List <String>(new string[] { _requestedresource }) }; var mockHandler = new MockMessageHandler <PdpResponse>(HttpStatusCode.OK, pdpResponse); var client = new HttpClient(mockHandler); var uri = _options.PdpUrl.EndsWith("/") ? _options.PdpUrl : $"{_options.PdpUrl}/"; client.BaseAddress = new Uri(uri); var provider = new PolicyDecisionProvider(client, mockedCache.Object, Options.Create(_options), _logger); var result = await provider.GetPermissionsAsync(_userId, _application); Assert.True(cacheEntry.AbsoluteExpirationRelativeToNow.Value == new TimeSpan(0, _options.PdpCacheDuration, 0)); }
public async Task ShouldCacheResponseWithoutPermissions() { _options.PdpCacheDuration = 60; var cacheEntry = new TestCacheEntry(); var mockedCache = CreateEmptyMockedCache(); mockedCache.Setup(c => c.CreateEntry(BuildCacheKey(_userId))) .Returns(cacheEntry); var pdpResponse = new PdpResponse { applicationId = _application, userId = _userId, permissions = new List <String>(new string[] { }) }; var mockHandler = new MockMessageHandler <PdpResponse>(HttpStatusCode.OK, pdpResponse); var client = new HttpClient(mockHandler); var uri = _options.PdpUrl.EndsWith("/") ? _options.PdpUrl : $"{_options.PdpUrl}/"; client.BaseAddress = new Uri(uri); var provider = new PolicyDecisionProvider(client, mockedCache.Object, Options.Create(_options), _logger); var result = await provider.GetPermissionsAsync(_userId, _application); mockedCache.Verify(c => c.CreateEntry(It.IsAny <object>()), Times.Once); Assert.NotNull(cacheEntry.Value); Assert.Equal(new List <string>(), ((PdpResponse)cacheEntry.Value).permissions); }
public async Task ReturnsNullIfUserUnknown() { var mockedCache = CreateEmptyMockedCache(); var mockHandler = new MockMessageHandler <PdpResponse>(HttpStatusCode.NotFound, null); var client = new HttpClient(mockHandler); var uri = _options.PdpUrl.EndsWith("/") ? _options.PdpUrl : $"{_options.PdpUrl}/"; client.BaseAddress = new Uri(uri); var provider = new PolicyDecisionProvider(client, mockedCache.Object, Options.Create(_options), _logger); var result = await provider.GetPermissionsAsync("otherUser", _application); Assert.Null(result); Assert.NotEmpty(_logger.LoggedMessages); }
public async Task GetCachedPdpResponse() { _options.PdpCacheDuration = 60; var pdpResponse = new PdpResponse { applicationId = _application, userId = _userId, permissions = new List <String>(new string[] { _requestedresource }) }; var mockedCache = CreateMockedCache(BuildCacheKey(_userId), pdpResponse); var provider = new PolicyDecisionProvider(Mock.Of <HttpClient>(), mockedCache.Object, Options.Create(_options), _logger); var result = await provider.GetPermissionsAsync(_userId, _application); Assert.Equal(pdpResponse, result); }
public async Task GetResponse() { var mockedCache = CreateEmptyMockedCache(); var pdpResponse = new PdpResponse { applicationId = _application, userId = _userId, permissions = new List <String>(new string[] { _requestedresource }) }; var mockHandler = new MockMessageHandler <PdpResponse>(HttpStatusCode.OK, pdpResponse); var client = new HttpClient(mockHandler); var uri = _options.PdpUrl.EndsWith("/") ? _options.PdpUrl : $"{_options.PdpUrl}/"; client.BaseAddress = new Uri(uri); var provider = new PolicyDecisionProvider(client, mockedCache.Object, Options.Create(_options), _logger); var result = await provider.GetPermissionsAsync(_userId, _application); Assert.Equal(pdpResponse.applicationId, result.applicationId); Assert.Equal(pdpResponse.userId, result.userId); Assert.Equal(pdpResponse.permissions, result.permissions); }
public async Task ApiKeyIsSetInHeader() { var mockedCache = CreateEmptyMockedCache(); var pdpResponse = new PdpResponse { applicationId = _application, userId = _userId, permissions = new List <String>(new string[] { requestedresource }) }; var mockHandler = new MockMessageHandler <PdpResponse>(HttpStatusCode.OK, pdpResponse); var httpClient = new HttpClient(mockHandler); httpClient.DefaultRequestHeaders.TryAddWithoutValidation(HeaderKeys.Apikey, _options.PdpApiKey); var uri = _options.PdpUrl.EndsWith("/") ? _options.PdpUrl : $"{_options.PdpUrl}/"; httpClient.BaseAddress = new Uri(uri); var provider = new PolicyDecisionProvider(httpClient, mockedCache.Object, Options.Create(_options), _logger); var result = await provider.GetPermissionsAsync(_userId, _application); Assert.Equal(_apiKey, httpClient.DefaultRequestHeaders.GetValues(HeaderKeys.Apikey).FirstOrDefault()); }