aboutsummaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-11-01 23:47:16 +0100
committerjonmv <venstad@gmail.com>2022-11-01 23:47:16 +0100
commitacd1c014cf612b5a370e78c9c7ab6e6cae3a8737 (patch)
treedcb497464a559d6ddce6447c55c45e39369021a0 /container-core
parent47eca27048399c3b1ccb317f0a66aef4ee43651c (diff)
Await subscriber exhausting configs list, in unit test
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/test/java/com/yahoo/container/di/ContainerTest.java3
-rw-r--r--container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java31
2 files changed, 32 insertions, 2 deletions
diff --git a/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java b/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java
index 6bb1af8258f..d869562cc19 100644
--- a/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java
+++ b/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java
@@ -282,8 +282,9 @@ public class ContainerTest extends ContainerTestBase {
() -> getNewComponentGraph(container, currentGraph));
ExecutorService exec = Executors.newFixedThreadPool(1);
+ dirConfigSource.clearCheckedConfigs();
Future<ComponentGraph> newGraph = exec.submit(() -> getNewComponentGraph(container, currentGraph));
-
+ dirConfigSource.awaitConfigChecked(10_000);
try {
newGraph.get(1, TimeUnit.SECONDS);
fail("Expected waiting for new config.");
diff --git a/container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java b/container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java
index 071b4b17916..3d1d052b35b 100644
--- a/container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java
+++ b/container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java
@@ -10,6 +10,8 @@ import java.io.File;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.Files;
+import java.util.HashSet;
+import java.util.Set;
/**
* @author Tony Vaagenes
@@ -18,7 +20,9 @@ import java.nio.file.Files;
*/
class DirConfigSource {
+ private final Set<String> checked = new HashSet<>();
private final File tempFolder;
+ private boolean doubleChecked;
DirConfigSource(File tmpDir) {
this.tempFolder = tmpDir;
@@ -37,8 +41,33 @@ class DirConfigSource {
return "dir:" + tempFolder.getPath();
}
+ synchronized void clearCheckedConfigs() {
+ checked.clear();
+ doubleChecked = false;
+ }
+
+ synchronized void awaitConfigChecked(long millis) throws InterruptedException {
+ long remaining, doom = System.currentTimeMillis() + millis;
+ while ( ! doubleChecked && (remaining = doom - System.currentTimeMillis()) > 0) wait(remaining);
+ Assertions.assertTrue(doubleChecked, "no config was checked more than once during " + millis + " millis");
+ }
+
ConfigSource configSource() {
- return new DirSource(tempFolder);
+ return new DirSource(tempFolder) {
+ @Override public FileSource getFile(String name) {
+ return new FileSource(new File(tempFolder, name)) {
+ @Override public long getLastModified() {
+ synchronized (DirConfigSource.this) {
+ if ( ! checked.add(name)) {
+ doubleChecked = true;
+ DirConfigSource.this.notifyAll();
+ }
+ return super.getLastModified();
+ }
+ }
+ };
+ }
+ };
}
}