You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2018/02/14 15:14:47 UTC
[isis] branch ISIS-1852_parallel_stream_patch updated: ISIS-1852:
reworks unit test, again
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch ISIS-1852_parallel_stream_patch
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/ISIS-1852_parallel_stream_patch by this push:
new 3e3ad2b ISIS-1852: reworks unit test, again
3e3ad2b is described below
commit 3e3ad2bb1b8abb605abf71e66ace47ed7b30605c
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Feb 14 15:13:52 2018 +0000
ISIS-1852: reworks unit test, again
---
.../runtime/services/ServiceInstantiatorTest.java | 37 +++++++++++++++-------
1 file changed, 25 insertions(+), 12 deletions(-)
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java
index 6bf03e7..0d777c9 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java
@@ -18,6 +18,7 @@ package org.apache.isis.core.runtime.services;
import java.util.Collections;
import java.util.List;
+import java.util.Objects;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
@@ -38,6 +39,7 @@ import org.apache.isis.core.metamodel.services.ServicesInjector;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
public class ServiceInstantiatorTest {
@@ -140,28 +142,29 @@ public class ServiceInstantiatorTest {
@Test
public void requestScoped_childThreads() throws InterruptedException {
- final AccumulatingCalculator calculator =
- serviceInstantiator.createInstance(AccumulatingCalculator.class);
+ final Consumer consumer = serviceInstantiator.createInstance(Consumer.class);
-
- final List<Integer> interimTotals = Collections.synchronizedList(Lists.newArrayList());
+ final List<Integer> allTheNumbers = Collections.synchronizedList(Lists.newArrayList());
final int n = 100;
+ for (int i = 0; i < n; i++) {
+ allTheNumbers.add(i);
+ }
+
final int nThreads = 8;
final ExecutorService execService = Executors.newFixedThreadPool(nThreads);
// initialize the request scoped calculator on current thread ('main')
- ((RequestScopedService)calculator).__isis_startRequest(mockServiceInjector);
+ ((RequestScopedService)consumer).__isis_startRequest(mockServiceInjector);
- for(int i=1;i<=n;++i) {
+ for (int i = 0; i < n; i++) {
final int j=i;
execService.submit(() -> {
try {
// access the request scoped calculator on a child thread of 'main'
- calculator.add(j);
- interimTotals.add(calculator.getTotal());
+ consumer.consume(allTheNumbers, j);
} catch (Exception e) {
System.err.println(e.getMessage());
@@ -174,11 +177,9 @@ public class ServiceInstantiatorTest {
execService.awaitTermination(10, TimeUnit.SECONDS);
- ((RequestScopedService)calculator).__isis_endRequest();
+ ((RequestScopedService)consumer).__isis_endRequest();
- assertThat(interimTotals.size(), is(n));
- final Integer maxTotal = Collections.max(interimTotals);
- assertThat(maxTotal, is(n*(n+1)/2));
+ assertFalse(allTheNumbers.stream().anyMatch(Objects::nonNull));
}
public static class SingletonCalculator {
@@ -198,4 +199,16 @@ public class ServiceInstantiatorTest {
return total;
}
}
+
+ @RequestScoped
+ public static class Consumer {
+ public void consume(final List<Integer> queue, final int slot) {
+ synchronized (queue) {
+ final Integer integer = queue.get(slot);
+ if(integer != null) {
+ queue.set(slot, null);
+ }
+ }
+ }
+ }
}
--
To stop receiving notification emails like this one, please contact
danhaywood@apache.org.