Skip to content

Commit 7a72e1c

Browse files
committed
Improve concurrency in TestPlan and AbstractTestDescriptor
This commit takes some preliminary steps toward improving concurrency within TestPlan and AbstractTestDescriptor. Issue: #417
1 parent 791cb4d commit 7a72e1c

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

junit-platform-engine/src/main/java/org/junit/platform/engine/support/descriptor/AbstractTestDescriptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public abstract class AbstractTestDescriptor implements TestDescriptor {
4646

4747
private TestSource source;
4848

49-
private final Set<TestDescriptor> children = new LinkedHashSet<>();
49+
private final Set<TestDescriptor> children = Collections.synchronizedSet(new LinkedHashSet<>(16));
5050

5151
/**
5252
* Create a new {@code AbstractTestDescriptor} with the supplied

junit-platform-launcher/src/main/java/org/junit/platform/launcher/TestPlan.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@
1616
import static org.junit.platform.commons.meta.API.Usage.Internal;
1717

1818
import java.util.Collection;
19-
import java.util.LinkedHashMap;
19+
import java.util.Collections;
2020
import java.util.LinkedHashSet;
2121
import java.util.Map;
2222
import java.util.Optional;
2323
import java.util.Set;
24+
import java.util.concurrent.ConcurrentHashMap;
2425
import java.util.function.Predicate;
2526

2627
import org.junit.platform.commons.meta.API;
@@ -53,9 +54,11 @@
5354
@API(Experimental)
5455
public final class TestPlan {
5556

56-
private final Set<TestIdentifier> roots = new LinkedHashSet<>();
57-
private final Map<String, LinkedHashSet<TestIdentifier>> children = new LinkedHashMap<>();
58-
private final Map<String, TestIdentifier> allIdentifiers = new LinkedHashMap<>();
57+
private final Set<TestIdentifier> roots = Collections.synchronizedSet(new LinkedHashSet<>(4));
58+
59+
private final Map<String, Set<TestIdentifier>> children = new ConcurrentHashMap<>(32);
60+
61+
private final Map<String, TestIdentifier> allIdentifiers = new ConcurrentHashMap<>(32);
5962

6063
/**
6164
* Construct a new {@code TestPlan} from the supplied collection of
@@ -91,7 +94,8 @@ public void add(TestIdentifier testIdentifier) {
9194
allIdentifiers.put(testIdentifier.getUniqueId(), testIdentifier);
9295
if (testIdentifier.getParentId().isPresent()) {
9396
String parentId = testIdentifier.getParentId().get();
94-
Set<TestIdentifier> directChildren = children.computeIfAbsent(parentId, key -> new LinkedHashSet<>());
97+
Set<TestIdentifier> directChildren = children.computeIfAbsent(parentId,
98+
key -> Collections.synchronizedSet(new LinkedHashSet<>(16)));
9599
directChildren.add(testIdentifier);
96100
}
97101
else {
@@ -186,7 +190,7 @@ public long countTestIdentifiers(Predicate<? super TestIdentifier> predicate) {
186190
*/
187191
public Set<TestIdentifier> getDescendants(TestIdentifier parent) {
188192
Preconditions.notNull(parent, "parent must not be null");
189-
Set<TestIdentifier> result = new LinkedHashSet<>();
193+
Set<TestIdentifier> result = new LinkedHashSet<>(16);
190194
Set<TestIdentifier> children = getChildren(parent);
191195
result.addAll(children);
192196
for (TestIdentifier child : children) {

junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/Root.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class Root {
3535
}
3636
};
3737

38-
private final Map<TestEngine, TestDescriptor> testEngineDescriptors = new LinkedHashMap<>();
38+
private final Map<TestEngine, TestDescriptor> testEngineDescriptors = new LinkedHashMap<>(4);
3939

4040
/**
4141
* Add an {@code engine}'s root {@link TestDescriptor}.

0 commit comments

Comments
 (0)