diff options
author | jonmv <venstad@gmail.com> | 2022-11-01 23:47:16 +0100 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-11-01 23:47:16 +0100 |
commit | acd1c014cf612b5a370e78c9c7ab6e6cae3a8737 (patch) | |
tree | dcb497464a559d6ddce6447c55c45e39369021a0 /container-core | |
parent | 47eca27048399c3b1ccb317f0a66aef4ee43651c (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.java | 3 | ||||
-rw-r--r-- | container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java | 31 |
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(); + } + } + }; + } + }; } } |