/** * Creates a {@link JwkProvider} * * @return a newly created {@link JwkProvider} */ public JwkProvider build() { JwkProvider urlProvider = new UrlJwkProvider(url); if (this.rateLimited) { urlProvider = new RateLimitedJwkProvider(urlProvider, bucket); } if (this.cached) { urlProvider = new GuavaCachedJwkProvider(urlProvider, cacheSize, expiresIn, expiresUnit); } return urlProvider; } }
@Test public void shouldGetWhenBucketHasTokensAvailable() throws Exception { when(bucket.consume()).thenReturn(true); when(fallback.get(eq(KID))).thenReturn(jwk); assertThat(provider.get(KID), equalTo(jwk)); verify(fallback).get(eq(KID)); }
@Test public void shouldGetBaseProvider() throws Exception { assertThat(provider.getBaseProvider(), equalTo(fallback)); }
@Before public void setUp() throws Exception { provider = new RateLimitedJwkProvider(fallback, bucket); }
@Test public void shouldCreateCachedAndRateLimitedProviderByDefault() { JwkProvider provider = new JwkProviderBuilder(domain).build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(GuavaCachedJwkProvider.class)); JwkProvider baseProvider = ((GuavaCachedJwkProvider) provider).getBaseProvider(); assertThat(baseProvider, instanceOf(RateLimitedJwkProvider.class)); assertThat(((RateLimitedJwkProvider) baseProvider).getBaseProvider(), instanceOf(UrlJwkProvider.class)); }
@Test public void shouldFailToGetWhenBucketIsEmpty() throws Exception { when(bucket.consume()).thenReturn(false); expectedException.expect(RateLimitReachedException.class); when(fallback.get(eq(KID))).thenReturn(jwk); provider.get(KID); }
@Test public void shouldCreateRateLimitedProvider() { JwkProvider provider = new JwkProviderBuilder(domain) .cached(false) .rateLimited(true) .build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(RateLimitedJwkProvider.class)); assertThat(((RateLimitedJwkProvider) provider).getBaseProvider(), instanceOf(UrlJwkProvider.class)); }
@Test public void shouldCreateRateLimitedProviderWithCustomValues() { JwkProvider provider = new JwkProviderBuilder(domain) .cached(false) .rateLimited(10, 24, TimeUnit.HOURS) .build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(RateLimitedJwkProvider.class)); assertThat(((RateLimitedJwkProvider) provider).getBaseProvider(), instanceOf(UrlJwkProvider.class)); }
@Test public void shouldCreateCachedAndRateLimitedProviderWithCustomValues() { JwkProvider provider = new JwkProviderBuilder(domain) .cached(10, 24, TimeUnit.HOURS) .rateLimited(10, 24, TimeUnit.HOURS) .build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(GuavaCachedJwkProvider.class)); JwkProvider baseProvider = ((GuavaCachedJwkProvider) provider).getBaseProvider(); assertThat(baseProvider, instanceOf(RateLimitedJwkProvider.class)); assertThat(((RateLimitedJwkProvider) baseProvider).getBaseProvider(), instanceOf(UrlJwkProvider.class)); }
@Test public void shouldCreateCachedAndRateLimitedProvider() { JwkProvider provider = new JwkProviderBuilder(domain) .cached(true) .rateLimited(true) .build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(GuavaCachedJwkProvider.class)); JwkProvider baseProvider = ((GuavaCachedJwkProvider) provider).getBaseProvider(); assertThat(baseProvider, instanceOf(RateLimitedJwkProvider.class)); assertThat(((RateLimitedJwkProvider) baseProvider).getBaseProvider(), instanceOf(UrlJwkProvider.class)); }