|
1 | 1 | package org.dataloader; |
2 | 2 |
|
| 3 | +import org.dataloader.fixtures.CustomValueCache; |
3 | 4 | import org.junit.jupiter.api.Test; |
4 | 5 |
|
5 | 6 | import java.util.*; |
6 | 7 | import java.util.concurrent.CompletableFuture; |
7 | 8 | import java.util.concurrent.atomic.AtomicInteger; |
| 9 | +import java.util.concurrent.atomic.AtomicReference; |
8 | 10 | import java.util.stream.Collectors; |
9 | 11 |
|
10 | 12 | import static java.util.Arrays.asList; |
@@ -216,4 +218,35 @@ public void mmap_semantics_apply_to_batch_loader_context() { |
216 | 218 | assertThat(results, equalTo(asList("A-ctx-m:overridesCtx-l:aCtx", "B-ctx-m:bCtx-l:bCtx", "A-ctx-m:overridesCtx-l:overridesCtx"))); |
217 | 219 | } |
218 | 220 |
|
| 221 | + @Test |
| 222 | + public void value_cache_misses_are_passed_matching_key_contexts_to_batch_loader_function() { |
| 223 | + CustomValueCache valueCache = new CustomValueCache(); |
| 224 | + valueCache.asMap().put("A", "cachedA"); |
| 225 | + |
| 226 | + AtomicReference<List<String>> batchKeysRef = new AtomicReference<>(); |
| 227 | + BatchLoaderWithContext<String, String> batchLoader = (keys, environment) -> { |
| 228 | + batchKeysRef.set(new ArrayList<>(keys)); |
| 229 | + AtomicInteger index = new AtomicInteger(0); |
| 230 | + List<String> list = keys.stream().map(k -> { |
| 231 | + int i = index.getAndIncrement(); |
| 232 | + Object keyContextM = environment.getKeyContexts().get(k); |
| 233 | + Object keyContextL = environment.getKeyContextsList().get(i); |
| 234 | + return k + "-m:" + keyContextM + "-l:" + keyContextL; |
| 235 | + }).collect(Collectors.toList()); |
| 236 | + return CompletableFuture.completedFuture(list); |
| 237 | + }; |
| 238 | + DataLoaderOptions options = DataLoaderOptions.newOptions() |
| 239 | + .setValueCache(valueCache) |
| 240 | + .build(); |
| 241 | + DataLoader<String, String> loader = newDataLoader(batchLoader, options); |
| 242 | + |
| 243 | + loader.load("A", "aCtx"); |
| 244 | + loader.load("B", "bCtx"); |
| 245 | + |
| 246 | + List<String> results = loader.dispatchAndJoin(); |
| 247 | + |
| 248 | + assertThat(batchKeysRef.get(), equalTo(singletonList("B"))); |
| 249 | + assertThat(results, equalTo(asList("cachedA", "B-m:bCtx-l:bCtx"))); |
| 250 | + } |
| 251 | + |
219 | 252 | } |
0 commit comments