package com.linkedin.parseq.batching;
import static org.testng.Assert.assertEquals;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.testng.annotations.Test;
import com.linkedin.parseq.BaseEngineTest;
import com.linkedin.parseq.EngineBuilder;
import com.linkedin.parseq.Task;
import com.linkedin.parseq.function.Success;
import com.linkedin.parseq.function.Try;
public class TestTaskSimpleBatchingStrategy extends BaseEngineTest {
private final BatchingSupport _batchingSupport = new BatchingSupport();
private final Strategy _strategy = new Strategy();
private class Strategy extends SimpleTaskBatchingStrategy<Integer, String> {
@Override
public Task<Map<Integer, Try<String>>> taskForBatch(Set<Integer> keys) {
return Task.callable("taskForBatch", () -> {
return keys.stream().collect(Collectors.toMap(Function.identity(), key -> Success.of(Integer.toString(key))));
});
}
}
@Override
protected void customizeEngine(EngineBuilder engineBuilder) {
engineBuilder.setPlanDeactivationListener(_batchingSupport);
_batchingSupport.registerStrategy(_strategy);
}
@Test
public void testNone() {
Task<String> task = Task.par(Task.value("0"), Task.value("1"))
.map("concat", (s0, s1) -> s0 + s1);
String result = runAndWait("TestTaskSimpleBatchingStrategy.testNone", task);
assertEquals(result, "01");
}
@Test
public void testSingle() {
Task<String> task = Task.par(Task.value("0"), _strategy.batchable(1))
.map("concat", (s0, s1) -> s0 + s1);
String result = runAndWait("TestTaskSimpleBatchingStrategy.testSingle", task);
assertEquals(result, "01");
}
@Test
public void testTwo() {
Task<String> task = Task.par(_strategy.batchable(0), _strategy.batchable(1))
.map("concat", (s0, s1) -> s0 + s1);
String result = runAndWait("TestTaskSimpleBatchingStrategy.testTwo", task);
assertEquals(result, "01");
}
}