From b68f1b2d055cf6da44f6be5c039272a6f37998a6 Mon Sep 17 00:00:00 2001 From: dugenkui03 Date: Sat, 19 Mar 2022 01:27:55 +0800 Subject: [PATCH 1/9] make NoOpStatisticsCollector to be default StatisticsCollector --- src/main/java/org/dataloader/DataLoaderOptions.java | 4 ++-- .../java/org/dataloader/DataLoaderRegistryTest.java | 13 ++++++++++--- .../java/org/dataloader/DataLoaderStatsTest.java | 8 ++++++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/dataloader/DataLoaderOptions.java b/src/main/java/org/dataloader/DataLoaderOptions.java index 8cd35ba..c6d47ca 100644 --- a/src/main/java/org/dataloader/DataLoaderOptions.java +++ b/src/main/java/org/dataloader/DataLoaderOptions.java @@ -18,7 +18,7 @@ import org.dataloader.annotations.PublicApi; import org.dataloader.impl.Assertions; -import org.dataloader.stats.SimpleStatisticsCollector; +import org.dataloader.stats.NoOpStatisticsCollector; import org.dataloader.stats.StatisticsCollector; import java.util.Optional; @@ -55,7 +55,7 @@ public DataLoaderOptions() { cachingEnabled = true; cachingExceptionsEnabled = true; maxBatchSize = -1; - statisticsCollector = SimpleStatisticsCollector::new; + statisticsCollector = NoOpStatisticsCollector::new; environmentProvider = NULL_PROVIDER; valueCacheOptions = ValueCacheOptions.newOptions(); } diff --git a/src/test/java/org/dataloader/DataLoaderRegistryTest.java b/src/test/java/org/dataloader/DataLoaderRegistryTest.java index 6d70654..aeaf668 100644 --- a/src/test/java/org/dataloader/DataLoaderRegistryTest.java +++ b/src/test/java/org/dataloader/DataLoaderRegistryTest.java @@ -1,5 +1,6 @@ package org.dataloader; +import org.dataloader.stats.SimpleStatisticsCollector; import org.dataloader.stats.Statistics; import org.junit.Test; @@ -77,9 +78,15 @@ public void stats_can_be_collected() { DataLoaderRegistry registry = new DataLoaderRegistry(); - DataLoader dlA = newDataLoader(identityBatchLoader); - DataLoader dlB = newDataLoader(identityBatchLoader); - DataLoader dlC = newDataLoader(identityBatchLoader); + DataLoader dlA = newDataLoader(identityBatchLoader, + DataLoaderOptions.newOptions().setStatisticsCollector(SimpleStatisticsCollector::new) + ); + DataLoader dlB = newDataLoader(identityBatchLoader, + DataLoaderOptions.newOptions().setStatisticsCollector(SimpleStatisticsCollector::new) + ); + DataLoader dlC = newDataLoader(identityBatchLoader, + DataLoaderOptions.newOptions().setStatisticsCollector(SimpleStatisticsCollector::new) + ); registry.register("a", dlA).register("b", dlB).register("c", dlC); diff --git a/src/test/java/org/dataloader/DataLoaderStatsTest.java b/src/test/java/org/dataloader/DataLoaderStatsTest.java index 1be2e8c..c32cbc1 100644 --- a/src/test/java/org/dataloader/DataLoaderStatsTest.java +++ b/src/test/java/org/dataloader/DataLoaderStatsTest.java @@ -24,7 +24,9 @@ public class DataLoaderStatsTest { @Test public void stats_are_collected_by_default() { BatchLoader batchLoader = CompletableFuture::completedFuture; - DataLoader loader = newDataLoader(batchLoader); + DataLoader loader = newDataLoader(batchLoader, + DataLoaderOptions.newOptions().setStatisticsCollector(SimpleStatisticsCollector::new) + ); loader.load("A"); loader.load("B"); @@ -154,7 +156,9 @@ public void stats_are_collected_with_caching_disabled() { @Test public void stats_are_collected_on_exceptions() { - DataLoader loader = DataLoaderFactory.newDataLoaderWithTry(batchLoaderThatBlows); + DataLoader loader = DataLoaderFactory.newDataLoaderWithTry(batchLoaderThatBlows, + DataLoaderOptions.newOptions().setStatisticsCollector(SimpleStatisticsCollector::new) + ); loader.load("A"); loader.load("exception"); From 0640745c5a3f67be95cbdd26a0475b465fcf722f Mon Sep 17 00:00:00 2001 From: Lana11s Date: Sat, 19 Mar 2022 08:18:37 +0100 Subject: [PATCH 2/9] Configure Manifest task to create valid OSGi bundle --- build.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b3c9244..0292654 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,7 @@ plugins { id 'java-library' id 'maven-publish' id 'signing' + id "biz.aQute.bnd.builder" version "6.2.0" id "io.github.gradle-nexus.publish-plugin" version "1.0.0" } @@ -61,7 +62,9 @@ apply plugin: 'groovy' jar { manifest { - attributes('Automatic-Module-Name': 'com.graphqljava') + attributes('Automatic-Module-Name': 'com.graphqljava', + '-exportcontents': 'org.dataloader.*', + '-removeheaders': 'Private-Package') } } From 90f836472ae8ef347c3affd754ea555920922171 Mon Sep 17 00:00:00 2001 From: samvazquez Date: Mon, 25 Apr 2022 22:15:36 -0700 Subject: [PATCH 3/9] feat: get all read-only values from cacheMap --- src/main/java/org/dataloader/CacheMap.java | 7 +++ src/main/java/org/dataloader/DataLoader.java | 12 ++-- .../java/org/dataloader/DataLoaderHelper.java | 12 ++-- .../org/dataloader/impl/DefaultCacheMap.java | 11 +++- src/test/java/ReadmeExamples.java | 10 ++-- .../dataloader/DataLoaderCacheMapTest.java | 60 +++++++++++++++++++ .../dataloader/DataLoaderIfPresentTest.java | 1 - .../dataloader/fixtures/CustomCacheMap.java | 6 ++ 8 files changed, 101 insertions(+), 18 deletions(-) create mode 100644 src/test/java/org/dataloader/DataLoaderCacheMapTest.java diff --git a/src/main/java/org/dataloader/CacheMap.java b/src/main/java/org/dataloader/CacheMap.java index 0db31b8..9859485 100644 --- a/src/main/java/org/dataloader/CacheMap.java +++ b/src/main/java/org/dataloader/CacheMap.java @@ -19,6 +19,7 @@ import org.dataloader.annotations.PublicSpi; import org.dataloader.impl.DefaultCacheMap; +import java.util.Collection; import java.util.concurrent.CompletableFuture; /** @@ -73,6 +74,12 @@ static CacheMap simpleMap() { */ CompletableFuture get(K key); + /** + * Gets a collection of CompletableFutures of the cache map. + * @return the collection of cached values + */ + Collection> getAll(); + /** * Creates a new cache map entry with the specified key and value, or updates the value if the key already exists. * diff --git a/src/main/java/org/dataloader/DataLoader.java b/src/main/java/org/dataloader/DataLoader.java index 05abf42..5670ecf 100644 --- a/src/main/java/org/dataloader/DataLoader.java +++ b/src/main/java/org/dataloader/DataLoader.java @@ -25,10 +25,7 @@ import java.time.Clock; import java.time.Duration; import java.time.Instant; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.function.BiConsumer; @@ -452,6 +449,13 @@ public Duration getTimeSinceDispatch() { return Duration.between(helper.getLastDispatchTime(), helper.now()); } + /** + * This returns a read-only collection of CompletableFutures of the cache map. + * @return read-only collection of CompletableFutures + */ + public Collection> getCacheFutures() { + return helper.getCacheFutures(); + } /** * Requests to load the data with the specified key asynchronously, and returns a future of the resulting value. diff --git a/src/main/java/org/dataloader/DataLoaderHelper.java b/src/main/java/org/dataloader/DataLoaderHelper.java index ae22e04..cc8aacc 100644 --- a/src/main/java/org/dataloader/DataLoaderHelper.java +++ b/src/main/java/org/dataloader/DataLoaderHelper.java @@ -7,13 +7,7 @@ import java.time.Clock; import java.time.Instant; -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; +import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; import java.util.concurrent.CompletionStage; @@ -99,6 +93,10 @@ public Instant getLastDispatchTime() { return lastDispatchTime.get(); } + public Collection> getCacheFutures() { + return Collections.unmodifiableCollection(futureCache.getAll()); + } + Optional> getIfPresent(K key) { synchronized (dataLoader) { boolean cachingEnabled = loaderOptions.cachingEnabled(); diff --git a/src/main/java/org/dataloader/impl/DefaultCacheMap.java b/src/main/java/org/dataloader/impl/DefaultCacheMap.java index 9346ad8..3aa4777 100644 --- a/src/main/java/org/dataloader/impl/DefaultCacheMap.java +++ b/src/main/java/org/dataloader/impl/DefaultCacheMap.java @@ -19,8 +19,7 @@ import org.dataloader.CacheMap; import org.dataloader.annotations.Internal; -import java.util.HashMap; -import java.util.Map; +import java.util.*; import java.util.concurrent.CompletableFuture; /** @@ -60,6 +59,14 @@ public CompletableFuture get(K key) { return cache.get(key); } + /** + * {@inheritDoc} + */ + @Override + public Collection> getAll() { + return cache.values(); + } + /** * {@inheritDoc} */ diff --git a/src/test/java/ReadmeExamples.java b/src/test/java/ReadmeExamples.java index 33b1607..6e228a7 100644 --- a/src/test/java/ReadmeExamples.java +++ b/src/test/java/ReadmeExamples.java @@ -16,10 +16,7 @@ import org.dataloader.stats.ThreadLocalStatisticsCollector; import java.time.Duration; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.stream.Collectors; @@ -221,6 +218,11 @@ public CompletableFuture get(Object key) { return null; } + @Override + public Collection> getAll() { + return null; + } + @Override public CacheMap set(Object key, CompletableFuture value) { return null; diff --git a/src/test/java/org/dataloader/DataLoaderCacheMapTest.java b/src/test/java/org/dataloader/DataLoaderCacheMapTest.java new file mode 100644 index 0000000..b2d8fdf --- /dev/null +++ b/src/test/java/org/dataloader/DataLoaderCacheMapTest.java @@ -0,0 +1,60 @@ +package org.dataloader; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +import static org.dataloader.DataLoaderFactory.newDataLoader; +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + +/** + * Tests for cacheMap functionality.. + */ +public class DataLoaderCacheMapTest { + + private BatchLoader keysAsValues() { + return CompletableFuture::completedFuture; + } + + @Test + public void should_provide_all_futures_from_cache() { + DataLoader dataLoader = newDataLoader(keysAsValues()); + + dataLoader.load(1); + dataLoader.load(2); + dataLoader.load(1); + + Collection> futures = dataLoader.getCacheFutures(); + assertThat(futures.size(), equalTo(2)); + } + + @Test + public void should_access_to_future_dependants() { + DataLoader dataLoader = newDataLoader(keysAsValues()); + + dataLoader.load(1).handle((v, t) -> t); + dataLoader.load(2).handle((v, t) -> t); + dataLoader.load(1).handle((v, t) -> t); + + Collection> futures = dataLoader.getCacheFutures(); + + List> futuresList = new ArrayList<>(futures); + assertThat(futuresList.get(0).getNumberOfDependents(), equalTo(2)); + assertThat(futuresList.get(1).getNumberOfDependents(), equalTo(1)); + } + + @Test(expected = UnsupportedOperationException.class) + public void should_throw_exception__on_mutation_attempt() { + DataLoader dataLoader = newDataLoader(keysAsValues()); + + dataLoader.load(1).handle((v, t) -> t); + + Collection> futures = dataLoader.getCacheFutures(); + + futures.add(CompletableFuture.completedFuture(2)); + } +} diff --git a/src/test/java/org/dataloader/DataLoaderIfPresentTest.java b/src/test/java/org/dataloader/DataLoaderIfPresentTest.java index 5e29d54..916fdef 100644 --- a/src/test/java/org/dataloader/DataLoaderIfPresentTest.java +++ b/src/test/java/org/dataloader/DataLoaderIfPresentTest.java @@ -11,7 +11,6 @@ import static org.hamcrest.Matchers.sameInstance; import static org.junit.Assert.assertThat; - /** * Tests for IfPresent and IfCompleted functionality. */ diff --git a/src/test/java/org/dataloader/fixtures/CustomCacheMap.java b/src/test/java/org/dataloader/fixtures/CustomCacheMap.java index 51e6687..695da5e 100644 --- a/src/test/java/org/dataloader/fixtures/CustomCacheMap.java +++ b/src/test/java/org/dataloader/fixtures/CustomCacheMap.java @@ -2,6 +2,7 @@ import org.dataloader.CacheMap; +import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; @@ -24,6 +25,11 @@ public CompletableFuture get(String key) { return stash.get(key); } + @Override + public Collection> getAll() { + return stash.values(); + } + @Override public CacheMap set(String key, CompletableFuture value) { stash.put(key, value); From e9287320abd6c852eabb0311d8984a18804983f3 Mon Sep 17 00:00:00 2001 From: samvazquez Date: Tue, 26 Apr 2022 09:28:14 -0700 Subject: [PATCH 4/9] feat: avoid importing all --- src/main/java/org/dataloader/DataLoaderHelper.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/dataloader/DataLoaderHelper.java b/src/main/java/org/dataloader/DataLoaderHelper.java index cc8aacc..993fa53 100644 --- a/src/main/java/org/dataloader/DataLoaderHelper.java +++ b/src/main/java/org/dataloader/DataLoaderHelper.java @@ -7,7 +7,14 @@ import java.time.Clock; import java.time.Instant; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; import java.util.concurrent.CompletionStage; From b88f1ff5f0b530ef09eb5137e5fa40d5f80304aa Mon Sep 17 00:00:00 2001 From: samvazquez Date: Tue, 26 Apr 2022 09:29:01 -0700 Subject: [PATCH 5/9] feat: avoid importing all --- src/main/java/org/dataloader/DataLoader.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/dataloader/DataLoader.java b/src/main/java/org/dataloader/DataLoader.java index 5670ecf..07c4a85 100644 --- a/src/main/java/org/dataloader/DataLoader.java +++ b/src/main/java/org/dataloader/DataLoader.java @@ -25,7 +25,11 @@ import java.time.Clock; import java.time.Duration; import java.time.Instant; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.function.BiConsumer; From 1bc485bac86abec0405bdd2821a7c0f0f812df14 Mon Sep 17 00:00:00 2001 From: samvazquez Date: Tue, 26 Apr 2022 09:30:20 -0700 Subject: [PATCH 6/9] feat: avoid importing all --- src/main/java/org/dataloader/impl/DefaultCacheMap.java | 4 +++- src/test/java/ReadmeExamples.java | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/dataloader/impl/DefaultCacheMap.java b/src/main/java/org/dataloader/impl/DefaultCacheMap.java index 3aa4777..fa89bb0 100644 --- a/src/main/java/org/dataloader/impl/DefaultCacheMap.java +++ b/src/main/java/org/dataloader/impl/DefaultCacheMap.java @@ -19,7 +19,9 @@ import org.dataloader.CacheMap; import org.dataloader.annotations.Internal; -import java.util.*; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.CompletableFuture; /** diff --git a/src/test/java/ReadmeExamples.java b/src/test/java/ReadmeExamples.java index 6e228a7..e37550e 100644 --- a/src/test/java/ReadmeExamples.java +++ b/src/test/java/ReadmeExamples.java @@ -16,7 +16,11 @@ import org.dataloader.stats.ThreadLocalStatisticsCollector; import java.time.Duration; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.stream.Collectors; From 176f85f609a9803c2aadd0c6e06074771fd76b46 Mon Sep 17 00:00:00 2001 From: samvazquez Date: Thu, 5 May 2022 22:50:51 -0700 Subject: [PATCH 7/9] feat: futureCache getAll in DataLoader --- src/main/java/org/dataloader/CacheMap.java | 3 ++- src/main/java/org/dataloader/DataLoader.java | 2 +- src/main/java/org/dataloader/DataLoaderHelper.java | 5 ----- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/dataloader/CacheMap.java b/src/main/java/org/dataloader/CacheMap.java index 9859485..36e5385 100644 --- a/src/main/java/org/dataloader/CacheMap.java +++ b/src/main/java/org/dataloader/CacheMap.java @@ -20,6 +20,7 @@ import org.dataloader.impl.DefaultCacheMap; import java.util.Collection; +import java.util.Collections; import java.util.concurrent.CompletableFuture; /** @@ -75,7 +76,7 @@ static CacheMap simpleMap() { CompletableFuture get(K key); /** - * Gets a collection of CompletableFutures of the cache map. + * Gets a read-only collection of CompletableFutures of the cache map. * @return the collection of cached values */ Collection> getAll(); diff --git a/src/main/java/org/dataloader/DataLoader.java b/src/main/java/org/dataloader/DataLoader.java index 07c4a85..c70a9e8 100644 --- a/src/main/java/org/dataloader/DataLoader.java +++ b/src/main/java/org/dataloader/DataLoader.java @@ -458,7 +458,7 @@ public Duration getTimeSinceDispatch() { * @return read-only collection of CompletableFutures */ public Collection> getCacheFutures() { - return helper.getCacheFutures(); + return Collections.unmodifiableCollection(futureCache.getAll()); } /** diff --git a/src/main/java/org/dataloader/DataLoaderHelper.java b/src/main/java/org/dataloader/DataLoaderHelper.java index 993fa53..ae22e04 100644 --- a/src/main/java/org/dataloader/DataLoaderHelper.java +++ b/src/main/java/org/dataloader/DataLoaderHelper.java @@ -9,7 +9,6 @@ import java.time.Instant; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -100,10 +99,6 @@ public Instant getLastDispatchTime() { return lastDispatchTime.get(); } - public Collection> getCacheFutures() { - return Collections.unmodifiableCollection(futureCache.getAll()); - } - Optional> getIfPresent(K key) { synchronized (dataLoader) { boolean cachingEnabled = loaderOptions.cachingEnabled(); From 908a4a3d2262512d34e0ab931d2c054a0b345707 Mon Sep 17 00:00:00 2001 From: samvazquez Date: Thu, 5 May 2022 22:52:46 -0700 Subject: [PATCH 8/9] feat: update javadocs --- src/main/java/org/dataloader/CacheMap.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/dataloader/CacheMap.java b/src/main/java/org/dataloader/CacheMap.java index 36e5385..7e6948a 100644 --- a/src/main/java/org/dataloader/CacheMap.java +++ b/src/main/java/org/dataloader/CacheMap.java @@ -76,7 +76,7 @@ static CacheMap simpleMap() { CompletableFuture get(K key); /** - * Gets a read-only collection of CompletableFutures of the cache map. + * Gets a collection of CompletableFutures from the cache map. * @return the collection of cached values */ Collection> getAll(); From b04dfa039dbff257ec9cf9ed990686e8234da7bd Mon Sep 17 00:00:00 2001 From: samvazquez Date: Tue, 10 May 2022 23:02:40 -0700 Subject: [PATCH 9/9] feat: getters for futureCache and cacheMap --- src/main/java/org/dataloader/CacheMap.java | 1 - src/main/java/org/dataloader/DataLoader.java | 26 ++++++++++++------- .../dataloader/DataLoaderCacheMapTest.java | 15 ++--------- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/dataloader/CacheMap.java b/src/main/java/org/dataloader/CacheMap.java index 7e6948a..6d27a47 100644 --- a/src/main/java/org/dataloader/CacheMap.java +++ b/src/main/java/org/dataloader/CacheMap.java @@ -20,7 +20,6 @@ import org.dataloader.impl.DefaultCacheMap; import java.util.Collection; -import java.util.Collections; import java.util.concurrent.CompletableFuture; /** diff --git a/src/main/java/org/dataloader/DataLoader.java b/src/main/java/org/dataloader/DataLoader.java index c70a9e8..e800a55 100644 --- a/src/main/java/org/dataloader/DataLoader.java +++ b/src/main/java/org/dataloader/DataLoader.java @@ -26,7 +26,6 @@ import java.time.Duration; import java.time.Instant; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -453,14 +452,6 @@ public Duration getTimeSinceDispatch() { return Duration.between(helper.getLastDispatchTime(), helper.now()); } - /** - * This returns a read-only collection of CompletableFutures of the cache map. - * @return read-only collection of CompletableFutures - */ - public Collection> getCacheFutures() { - return Collections.unmodifiableCollection(futureCache.getAll()); - } - /** * Requests to load the data with the specified key asynchronously, and returns a future of the resulting value. *

@@ -760,4 +751,21 @@ public Statistics getStatistics() { return stats.getStatistics(); } + /** + * Gets the cacheMap associated with this data loader passed in via {@link DataLoaderOptions#cacheMap()} + * @return the cacheMap of this data loader + */ + public CacheMap getCacheMap() { + return futureCache; + } + + + /** + * Gets the valueCache associated with this data loader passed in via {@link DataLoaderOptions#valueCache()} + * @return the valueCache of this data loader + */ + public ValueCache getValueCache() { + return valueCache; + } + } diff --git a/src/test/java/org/dataloader/DataLoaderCacheMapTest.java b/src/test/java/org/dataloader/DataLoaderCacheMapTest.java index b2d8fdf..abfc8d3 100644 --- a/src/test/java/org/dataloader/DataLoaderCacheMapTest.java +++ b/src/test/java/org/dataloader/DataLoaderCacheMapTest.java @@ -28,7 +28,7 @@ public void should_provide_all_futures_from_cache() { dataLoader.load(2); dataLoader.load(1); - Collection> futures = dataLoader.getCacheFutures(); + Collection> futures = dataLoader.getCacheMap().getAll(); assertThat(futures.size(), equalTo(2)); } @@ -40,21 +40,10 @@ public void should_access_to_future_dependants() { dataLoader.load(2).handle((v, t) -> t); dataLoader.load(1).handle((v, t) -> t); - Collection> futures = dataLoader.getCacheFutures(); + Collection> futures = dataLoader.getCacheMap().getAll(); List> futuresList = new ArrayList<>(futures); assertThat(futuresList.get(0).getNumberOfDependents(), equalTo(2)); assertThat(futuresList.get(1).getNumberOfDependents(), equalTo(1)); } - - @Test(expected = UnsupportedOperationException.class) - public void should_throw_exception__on_mutation_attempt() { - DataLoader dataLoader = newDataLoader(keysAsValues()); - - dataLoader.load(1).handle((v, t) -> t); - - Collection> futures = dataLoader.getCacheFutures(); - - futures.add(CompletableFuture.completedFuture(2)); - } }