From 2cd210dfd10014701c5439f6ac498bea5207a0de Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Wed, 14 May 2025 19:16:22 +0200 Subject: [PATCH] Slight test cleanup --- .../dhfsfuse/integration/DhfsFuseIT.java | 52 ++++++++++++------ .../dhfsfuse/integration/DhfsFusex3IT.java | 54 ++++--------------- 2 files changed, 45 insertions(+), 61 deletions(-) diff --git a/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/DhfsFuseIT.java b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/DhfsFuseIT.java index a379840b..caa32c1d 100644 --- a/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/DhfsFuseIT.java +++ b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/DhfsFuseIT.java @@ -10,10 +10,8 @@ import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.Network; import org.testcontainers.containers.output.Slf4jLogConsumer; import org.testcontainers.containers.output.WaitingConsumer; -import org.testcontainers.containers.wait.strategy.Wait; import java.io.IOException; -import java.time.Duration; import java.util.Objects; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -131,13 +129,15 @@ public class DhfsFuseIT { "tesempty\n".equals(container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/fuse/testf1").getStdout())); var client = DockerClientFactory.instance().client(); - client.pauseContainerCmd(container2.getContainerId()).exec(); + client.disconnectFromNetworkCmd().withContainerId(container2.getContainerId()).withNetworkId(network.getId()).exec(); + client.disconnectFromNetworkCmd().withContainerId(container1.getContainerId()).withNetworkId(network.getId()).exec(); waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Lost connection to"), 60, TimeUnit.SECONDS); await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container1.execInContainer("/bin/sh", "-c", "echo newfile > /dhfs_test/fuse/testf2").getExitCode()); - client.unpauseContainerCmd(container2.getContainerId()).exec(); + client.connectToNetworkCmd().withContainerId(container2.getContainerId()).withNetworkId(network.getId()).exec(); + client.connectToNetworkCmd().withContainerId(container1.getContainerId()).withNetworkId(network.getId()).exec(); waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Connected"), 60, TimeUnit.SECONDS); await().atMost(45, TimeUnit.SECONDS).until(() -> @@ -155,13 +155,13 @@ public class DhfsFuseIT { "tesempty\n".equals(container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/fuse/testf1").getStdout())); var client = DockerClientFactory.instance().client(); - client.pauseContainerCmd(container2.getContainerId()).exec(); + client.disconnectFromNetworkCmd().withNetworkId(network.getId()).withContainerId(container2.getContainerId()).exec(); waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Lost connection to"), 60, TimeUnit.SECONDS); await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container1.execInContainer("/bin/sh", "-c", "echo rewritten > /dhfs_test/fuse/testf1").getExitCode()); - client.unpauseContainerCmd(container2.getContainerId()).exec(); + client.connectToNetworkCmd().withContainerId(container2.getContainerId()).withNetworkId(network.getId()).exec(); waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Connected"), 60, TimeUnit.SECONDS); @@ -203,18 +203,34 @@ public class DhfsFuseIT { await().atMost(45, TimeUnit.SECONDS).until(() -> "tesempty\n".equals(container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/fuse/testf1").getStdout())); - container2.stop(); + var client = DockerClientFactory.instance().client(); + client.disconnectFromNetworkCmd().withNetworkId(network.getId()).withContainerId(container2.getContainerId()).exec(); waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("kicked"), 60, TimeUnit.SECONDS, 1); + await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container1.execInContainer("/bin/sh", "-c", "echo tesempty2 > /dhfs_test/fuse/testf2").getExitCode()); + await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container2.execInContainer("/bin/sh", "-c", "echo tesempty3 > /dhfs_test/fuse/testf3").getExitCode()); + Log.info("Deleting"); await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container1.execInContainer("/bin/sh", "-c", "rm /dhfs_test/fuse/testf1").getExitCode()); Log.info("Deleted"); - // FIXME? waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Deleting from persistent"), 60, TimeUnit.SECONDS, 3); + client.connectToNetworkCmd().withContainerId(container2.getContainerId()).withNetworkId(network.getId()).exec(); + + waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Connected"), 60, TimeUnit.SECONDS); + await().atMost(45, TimeUnit.SECONDS).until(() -> 1 == container1.execInContainer("/bin/sh", "-c", "test -f /dhfs_test/fuse/testf1").getExitCode()); + + await().atMost(45, TimeUnit.SECONDS).until(() -> + "tesempty2\n".equals(container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/fuse/testf2").getStdout())); + await().atMost(45, TimeUnit.SECONDS).until(() -> + "tesempty3\n".equals(container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/fuse/testf3").getStdout())); + await().atMost(45, TimeUnit.SECONDS).until(() -> + "tesempty2\n".equals(container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/fuse/testf2").getStdout())); + await().atMost(45, TimeUnit.SECONDS).until(() -> + "tesempty3\n".equals(container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/fuse/testf3").getStdout())); } @Test @@ -362,12 +378,12 @@ public class DhfsFuseIT { }); var client = DockerClientFactory.instance().client(); - client.pauseContainerCmd(container1.getContainerId()).exec(); + client.disconnectFromNetworkCmd().withContainerId(container1.getContainerId()).withNetworkId(network.getId()).exec(); + client.disconnectFromNetworkCmd().withContainerId(container2.getContainerId()).withNetworkId(network.getId()).exec(); await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container2.execInContainer("/bin/sh", "-c", "mv /dhfs_test/fuse/a /dhfs_test/fuse/b").getExitCode()); - client.pauseContainerCmd(container2.getContainerId()).exec(); - client.unpauseContainerCmd(container1.getContainerId()).exec(); await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container1.execInContainer("/bin/sh", "-c", "mv /dhfs_test/fuse/b /dhfs_test/fuse/a").getExitCode()); - client.unpauseContainerCmd(container2.getContainerId()).exec(); + client.connectToNetworkCmd().withContainerId(container1.getContainerId()).withNetworkId(network.getId()).exec(); + client.connectToNetworkCmd().withContainerId(container2.getContainerId()).withNetworkId(network.getId()).exec(); await().atMost(45, TimeUnit.SECONDS).until(() -> { @@ -401,14 +417,14 @@ public class DhfsFuseIT { await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container2.execInContainer("/bin/sh", "-c", "ls /dhfs_test/fuse/").getExitCode()); await().atMost(45, TimeUnit.SECONDS).until(() -> "tesempty\n".equals(container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/fuse/testf1").getStdout())); - client.pauseContainerCmd(container1.getContainerId()).exec(); + client.disconnectFromNetworkCmd().withContainerId(container1.getContainerId()).withNetworkId(network.getId()).exec(); + client.disconnectFromNetworkCmd().withContainerId(container2.getContainerId()).withNetworkId(network.getId()).exec(); + waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Lost connection to"), 60, TimeUnit.SECONDS, 1); Log.info("Removing"); await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container2.execInContainer("/bin/sh", "-c", "rm /dhfs_test/fuse/testf1").getExitCode()); - client.pauseContainerCmd(container2.getContainerId()).exec(); - client.unpauseContainerCmd(container1.getContainerId()).exec(); waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Lost connection to"), 60, TimeUnit.SECONDS, 1); Log.info("Moving"); await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container1.execInContainer("/bin/sh", "-c", "mv /dhfs_test/fuse/testf1 /dhfs_test/fuse/testf2").getExitCode()); @@ -416,12 +432,14 @@ public class DhfsFuseIT { await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container1.execInContainer("/bin/sh", "-c", "ls /dhfs_test/fuse/").getExitCode()); Log.info("Reading"); await().atMost(45, TimeUnit.SECONDS).until(() -> "tesempty\n".equals(container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/fuse/testf2").getStdout())); - client.unpauseContainerCmd(container2.getContainerId()).exec(); + + client.connectToNetworkCmd().withContainerId(container1.getContainerId()).withNetworkId(network.getId()).exec(); + client.connectToNetworkCmd().withContainerId(container2.getContainerId()).withNetworkId(network.getId()).exec(); waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Connected"), 60, TimeUnit.SECONDS, 1); waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Connected"), 60, TimeUnit.SECONDS, 1); + // Either removed, or moved - // TODO: it always seems to be removed? Log.info("Reading both"); await().atMost(45, TimeUnit.SECONDS).until(() -> { var ls1 = container1.execInContainer("/bin/sh", "-c", "ls /dhfs_test/fuse/"); diff --git a/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/DhfsFusex3IT.java b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/DhfsFusex3IT.java index 1153c360..8d7eb64a 100644 --- a/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/DhfsFusex3IT.java +++ b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/DhfsFusex3IT.java @@ -9,10 +9,8 @@ import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.Network; import org.testcontainers.containers.output.Slf4jLogConsumer; import org.testcontainers.containers.output.WaitingConsumer; -import org.testcontainers.containers.wait.strategy.Wait; import java.io.IOException; -import java.time.Duration; import java.util.List; import java.util.Objects; import java.util.UUID; @@ -37,9 +35,6 @@ public class DhfsFusex3IT { Network network; - // This calculation is somewhat racy, so keep it hardcoded for now - long emptyFileCount = 9; - @BeforeEach void setup(TestInfo testInfo) throws IOException, InterruptedException, TimeoutException { // TODO: Dedup @@ -122,17 +117,6 @@ public class DhfsFusex3IT { waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Connected"), 60, TimeUnit.SECONDS, 2); } - private boolean checkEmpty() throws IOException, InterruptedException { - for (var container : List.of(container1, container2, container3)) { - var found = container.execInContainer("/bin/sh", "-c", "find /dhfs_test/data/objs -type f"); - var foundWc = container.execInContainer("/bin/sh", "-c", "find /dhfs_test/data/objs -type f | wc -l"); - Log.info("Remaining objects in " + container.getContainerId() + ": " + found.toString() + " " + foundWc.toString()); - if (!(found.getExitCode() == 0 && foundWc.getExitCode() == 0 && Integer.parseInt(foundWc.getStdout().strip()) == emptyFileCount)) - return false; - } - return true; - } - @AfterEach void stop() { Stream.of(container1, container2, container3).parallel().forEach(GenericContainer::stop); @@ -146,25 +130,6 @@ public class DhfsFusex3IT { await().atMost(45, TimeUnit.SECONDS).until(() -> "tesempty\n".equals(container3.execInContainer("/bin/sh", "-c", "cat /dhfs_test/fuse/testf1").getStdout())); } - // FIXME: - @Test - @Disabled - void largerFileDeleteTest() throws IOException, InterruptedException, TimeoutException { - await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container1.execInContainer("/bin/sh", "-c", "cd /dhfs_test/fuse && dd if=/dev/urandom of=10MB.bin bs=1M count=10").getExitCode()); - await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container2.execInContainer("/bin/sh", "-c", "head -c 10 /dhfs_test/fuse/10MB.bin").getExitCode()); - await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container3.execInContainer("/bin/sh", "-c", "rm /dhfs_test/fuse/10MB.bin").getExitCode()); - await().atMost(45, TimeUnit.SECONDS).until(() -> checkEmpty()); - } - - @Test - @Disabled - void largerFileDeleteTestNoDelays() throws IOException, InterruptedException, TimeoutException { - await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container1.execInContainer("/bin/sh", "-c", "cd /dhfs_test/fuse && dd if=/dev/urandom of=10MB.bin bs=1M count=10").getExitCode()); - await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container2.execInContainer("/bin/sh", "-c", "head -c 10 /dhfs_test/fuse/10MB.bin").getExitCode()); - await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container3.execInContainer("/bin/sh", "-c", "rm /dhfs_test/fuse/10MB.bin").getExitCode()); - await().atMost(45, TimeUnit.SECONDS).until(() -> checkEmpty()); - } - @Test void gccHelloWorldTest() throws IOException, InterruptedException, TimeoutException { await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container1.execInContainer("/bin/sh", "-c", "echo '#include\nint main(){printf(\"hello world\"); return 0;}' > /dhfs_test/fuse/hello.c").getExitCode()); @@ -210,21 +175,22 @@ public class DhfsFusex3IT { @Test void dirConflictTest() throws IOException, InterruptedException, TimeoutException { var client = DockerClientFactory.instance().client(); - client.pauseContainerCmd(container1.getContainerId()).exec(); - client.pauseContainerCmd(container2.getContainerId()).exec(); - // Pauses needed as otherwise docker buffers some incoming packets + + client.disconnectFromNetworkCmd().withContainerId(container1.getContainerId()).withNetworkId(network.getId()).exec(); + client.disconnectFromNetworkCmd().withContainerId(container2.getContainerId()).withNetworkId(network.getId()).exec(); + client.disconnectFromNetworkCmd().withContainerId(container3.getContainerId()).withNetworkId(network.getId()).exec(); + waitingConsumer3.waitUntil(frame -> frame.getUtf8String().contains("Lost connection to"), 60, TimeUnit.SECONDS, 2); await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container3.execInContainer("/bin/sh", "-c", "echo test3 >> /dhfs_test/fuse/testf").getExitCode()); - client.pauseContainerCmd(container3.getContainerId()).exec(); - client.unpauseContainerCmd(container2.getContainerId()).exec(); waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Lost connection to"), 60, TimeUnit.SECONDS, 2); await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container2.execInContainer("/bin/sh", "-c", "echo test2 >> /dhfs_test/fuse/testf").getExitCode()); - client.pauseContainerCmd(container2.getContainerId()).exec(); - client.unpauseContainerCmd(container1.getContainerId()).exec(); waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Lost connection to"), 60, TimeUnit.SECONDS, 2); await().atMost(45, TimeUnit.SECONDS).until(() -> 0 == container1.execInContainer("/bin/sh", "-c", "echo test1 >> /dhfs_test/fuse/testf").getExitCode()); - client.unpauseContainerCmd(container2.getContainerId()).exec(); - client.unpauseContainerCmd(container3.getContainerId()).exec(); + + client.connectToNetworkCmd().withContainerId(container1.getContainerId()).withNetworkId(network.getId()).exec(); + client.connectToNetworkCmd().withContainerId(container2.getContainerId()).withNetworkId(network.getId()).exec(); + client.connectToNetworkCmd().withContainerId(container3.getContainerId()).withNetworkId(network.getId()).exec(); + waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Connected"), 60, TimeUnit.SECONDS, 2); waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Connected"), 60, TimeUnit.SECONDS, 2); waitingConsumer3.waitUntil(frame -> frame.getUtf8String().contains("Connected"), 60, TimeUnit.SECONDS, 2);