/** * Build {@link DirectExternalCache} and set up mockito expectations for appropriate calls of {@link VCacheFactory} * * @param mockVcacheFactory mockito proxied or mocked {@link VCacheFactory} * @param name name of the cache * @param clazz class of cached objects * @param settings cache settings * @param <T> type of cached objects * @return {@link DirectExternalCache} proxied by mockito. */ public static <T extends Serializable> DirectExternalCache<T> getExternalCache(VCacheFactory mockVcacheFactory, String name, Class<T> clazz, ExternalCacheSettings settings) { final DirectExternalCache<T> desiredCache = spy(mockVcacheFactory.getDirectExternalCache(name, JavaSerializationMarshalling.pair(clazz), settings)); doReturn(desiredCache).when(mockVcacheFactory).getDirectExternalCache(eq(name), any(MarshallingPair.class), any(ExternalCacheSettings.class)); return desiredCache; }
@Test public void directexternalcache_duplicate_obtain() { final DirectExternalCache<String> firstTime = vCacheFactory().getDirectExternalCache( "duplicate", dodgyPair("first"), new ExternalCacheSettingsBuilder().build()); final CompletionStage<Boolean> put1 = firstTime.put("key", "ignored", PUT_ALWAYS); assertThat(VCacheUtils.unsafeJoin(put1), is(true)); final CompletionStage<Optional<String>> get1 = firstTime.get("key"); assertThat(VCacheUtils.unsafeJoin(get1), is(Optional.of("first"))); final DirectExternalCache<String> secondTime = vCacheFactory().getDirectExternalCache( "duplicate", dodgyPair("second"), new ExternalCacheSettingsBuilder().build()); final CompletionStage<Optional<String>> get2 = secondTime.get("key"); assertThat(VCacheUtils.unsafeJoin(get2), is(Optional.of("second"))); }
@Test public void directExternalCache_normal_marshalling() { final ExternalCacheSettings settings = new ExternalCacheSettingsBuilder() .defaultTtl(Duration.ofSeconds(60)) .entryGrowthRateHint(ChangeRate.LOW_CHANGE) .dataChangeRateHint(ChangeRate.LOW_CHANGE) .entryCountHint(100) .build(); final DirectExternalCache<String> cache = vCacheFactory().getDirectExternalCache( "my-direct-cache", StringMarshalling.pair(), settings); assertThat(cache, notNullValue()); assertThat(cache.getName(), is("my-direct-cache")); final CompletionStage<Void> rmall = cache.removeAll(); assertThat(rmall, successful()); final CompletionStage<Boolean> put1 = cache.put("one", "eine", PUT_ALWAYS); assertThat(put1, successfulWith(is(true))); final CompletionStage<Optional<String>> get1 = cache.get("one"); assertThat(get1, successfulWith(is(Optional.of("eine")))); assertThat(vCacheManagement().allJvmCacheDetails().size(), is(0)); assertThat(vCacheManagement().allRequestCacheDetails().size(), is(0)); final Map<String, ExternalCacheDetails> allCacheDetails = vCacheManagement().allExternalCacheDetails(); assertThat(allCacheDetails, notNullValue()); assertThat(allCacheDetails.keySet(), containsInAnyOrder("my-direct-cache")); final ExternalCacheDetails cacheDetails = allCacheDetails.get("my-direct-cache"); assertThat(cacheDetails.getName(), is("my-direct-cache")); assertThat(cacheDetails.getSettings().getDefaultTtl(), is(Optional.of(MAX_TTL))); assertThat(cacheDetails.getSettings().getEntryCountHint(), is(Optional.of(MAX_ENTRIES))); assertThat(invocationsOfBegunTxns, is(0)); }
@Test public void directExternalCache_normal_marshaller() { final ExternalCacheSettings settings = new ExternalCacheSettingsBuilder() .defaultTtl(Duration.ofSeconds(60)) .entryGrowthRateHint(ChangeRate.LOW_CHANGE) .dataChangeRateHint(ChangeRate.LOW_CHANGE) .entryCountHint(100) .build(); @SuppressWarnings("deprecation") final DirectExternalCache<String> cache = vCacheFactory().getDirectExternalCache( "my-direct-cache", MarshallerFactory.stringMarshaller(), settings); assertThat(cache, notNullValue()); assertThat(cache.getName(), is("my-direct-cache")); final CompletionStage<Void> rmall = cache.removeAll(); assertThat(rmall, successful()); final CompletionStage<Boolean> put1 = cache.put("one1", "eine", PUT_ALWAYS); assertThat(put1, successfulWith(is(true))); final CompletionStage<Optional<String>> get1 = cache.get("one1"); assertThat(get1, successfulWith(is(Optional.of("eine")))); assertThat(vCacheManagement().allJvmCacheDetails().size(), is(0)); assertThat(vCacheManagement().allRequestCacheDetails().size(), is(0)); }
@Test public void duplicate_names_different_policys() { final DirectExternalCache<String> directCache = vCacheFactory().getDirectExternalCache( "duplicate", StringMarshalling.pair(), new ExternalCacheSettingsBuilder().build()); thrown.expect(ExternalCacheException.class); thrown.expectMessage("Failed due to CREATION_FAILURE"); final StableReadExternalCache<String> stableCache = vCacheFactory().getStableReadExternalCache( "duplicate", StringMarshalling.pair(), new ExternalCacheSettingsBuilder().build()); }