From d1df6b705f0a762ce6b4451ca671d02c4e2fbb61 Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Wed, 14 May 2025 10:38:55 +0200 Subject: [PATCH] Show logs for test containers that failed starting it just... doesn't start sometimes??? --- .../dhfsfuse/integration/DhfsFuseIT.java | 7 ++- .../dhfsfuse/integration/DhfsFusex3IT.java | 43 ++++++++++--------- .../usatiuk/dhfsfuse/integration/KillIT.java | 7 ++- .../dhfsfuse/integration/LazyFsIT.java | 7 ++- .../dhfsfuse/integration/ResyncIT.java | 7 ++- .../peersync/PersistentPeerDataService.java | 31 ++++++------- 6 files changed, 59 insertions(+), 43 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 ba121af0..a379840b 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 @@ -40,11 +40,11 @@ public class DhfsFuseIT { container1 = new GenericContainer<>(DhfsImage.getInstance()) .withPrivilegedMode(true) .withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse"))) - .waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network); + .withNetwork(network); container2 = new GenericContainer<>(DhfsImage.getInstance()) .withPrivilegedMode(true) .withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse"))) - .waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network); + .withNetwork(network); Stream.of(container1, container2).parallel().forEach(GenericContainer::start); @@ -55,6 +55,9 @@ public class DhfsFuseIT { var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFuseIT.class)).withPrefix("2-" + testInfo.getDisplayName()); container2.followOutput(loggingConsumer2.andThen(waitingConsumer2)); + waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS); + waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS); + c1uuid = container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout(); c2uuid = container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout(); 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 8105845d..1153c360 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 @@ -48,39 +48,42 @@ public class DhfsFusex3IT { container1 = new GenericContainer<>(DhfsImage.getInstance()) .withPrivilegedMode(true) .withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse"))) - .waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network); + .withNetwork(network); container2 = new GenericContainer<>(DhfsImage.getInstance()) .withPrivilegedMode(true) .withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse"))) - .waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network); + .withNetwork(network); container3 = new GenericContainer<>(DhfsImage.getInstance()) .withPrivilegedMode(true) .withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse"))) - .waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network); - + .withNetwork(network); Stream.of(container1, container2, container3).parallel().forEach(GenericContainer::start); + waitingConsumer1 = new WaitingConsumer(); + var loggingConsumer1 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFusex3IT.class)) + .withPrefix(1 + "-" + testInfo.getDisplayName()); + container1.followOutput(loggingConsumer1.andThen(waitingConsumer1)); + waitingConsumer2 = new WaitingConsumer(); + var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFusex3IT.class)) + .withPrefix(2 + "-" + testInfo.getDisplayName()); + container2.followOutput(loggingConsumer2.andThen(waitingConsumer2)); + waitingConsumer3 = new WaitingConsumer(); + var loggingConsumer3 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFusex3IT.class)) + .withPrefix(3 + "-" + testInfo.getDisplayName()); + container3.followOutput(loggingConsumer3.andThen(waitingConsumer3)); + + waitingConsumer3.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS); + waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS); + waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS); + c1uuid = container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout(); c2uuid = container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout(); c3uuid = container3.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout(); - Log.info(container1.getContainerId() + "=" + c1uuid); - Log.info(container2.getContainerId() + "=" + c2uuid); - Log.info(container3.getContainerId() + "=" + c3uuid); - - waitingConsumer1 = new WaitingConsumer(); - var loggingConsumer1 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFusex3IT.class)) - .withPrefix(c1uuid.substring(0, 4) + "-" + testInfo.getDisplayName()); - container1.followOutput(loggingConsumer1.andThen(waitingConsumer1)); - waitingConsumer2 = new WaitingConsumer(); - var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFusex3IT.class)) - .withPrefix(c2uuid.substring(0, 4) + "-" + testInfo.getDisplayName()); - container2.followOutput(loggingConsumer2.andThen(waitingConsumer2)); - waitingConsumer3 = new WaitingConsumer(); - var loggingConsumer3 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFusex3IT.class)) - .withPrefix(c3uuid.substring(0, 4) + "-" + testInfo.getDisplayName()); - container3.followOutput(loggingConsumer3.andThen(waitingConsumer3)); + Log.info(container1.getContainerId() + "=" + c1uuid + " = 1"); + Log.info(container2.getContainerId() + "=" + c2uuid + " = 2"); + Log.info(container3.getContainerId() + "=" + c3uuid + " = 3"); Assertions.assertDoesNotThrow(() -> UUID.fromString(c1uuid)); Assertions.assertDoesNotThrow(() -> UUID.fromString(c2uuid)); diff --git a/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/KillIT.java b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/KillIT.java index d21c19d5..61d871d7 100644 --- a/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/KillIT.java +++ b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/KillIT.java @@ -52,12 +52,12 @@ public class KillIT { container1 = new GenericContainer<>(DhfsImage.getInstance()) .withPrivilegedMode(true) .withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse"))) - .waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network) + .withNetwork(network) .withFileSystemBind(data1.getAbsolutePath(), "/dhfs_test/data"); container2 = new GenericContainer<>(DhfsImage.getInstance()) .withPrivilegedMode(true) .withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse"))) - .waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network) + .withNetwork(network) .withFileSystemBind(data2.getAbsolutePath(), "/dhfs_test/data"); Stream.of(container1, container2).parallel().forEach(GenericContainer::start); @@ -69,6 +69,9 @@ public class KillIT { var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(KillIT.class)).withPrefix("2-" + testInfo.getDisplayName()); container2.followOutput(loggingConsumer2.andThen(waitingConsumer2)); + waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS); + waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS); + c1uuid = container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout(); c2uuid = container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout(); diff --git a/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/LazyFsIT.java b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/LazyFsIT.java index 526e51c2..ce8a742b 100644 --- a/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/LazyFsIT.java +++ b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/LazyFsIT.java @@ -64,12 +64,12 @@ public class LazyFsIT { container1 = new GenericContainer<>(DhfsImage.getInstance()) .withPrivilegedMode(true) .withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse"))) - .waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network) + .withNetwork(network) .withFileSystemBind(data1.getAbsolutePath(), "/dhfs_test/data"); container2 = new GenericContainer<>(DhfsImage.getInstance()) .withPrivilegedMode(true) .withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse"))) - .waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network) + .withNetwork(network) .withFileSystemBind(data2.getAbsolutePath(), "/dhfs_test/data"); Stream.of(container1, container2).parallel().forEach(GenericContainer::start); @@ -81,6 +81,9 @@ public class LazyFsIT { var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(LazyFsIT.class)).withPrefix("2-" + testInfo.getDisplayName()); container2.followOutput(loggingConsumer2.andThen(waitingConsumer2)); + waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS); + waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS); + c1uuid = container1.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout(); c2uuid = container2.execInContainer("/bin/sh", "-c", "cat /dhfs_test/data/stuff/self_uuid").getStdout(); diff --git a/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/ResyncIT.java b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/ResyncIT.java index 8fd384dc..939cf508 100644 --- a/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/ResyncIT.java +++ b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfsfuse/integration/ResyncIT.java @@ -38,11 +38,11 @@ public class ResyncIT { container1 = new GenericContainer<>(DhfsImage.getInstance()) .withPrivilegedMode(true) .withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse"))) - .waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network); + .withNetwork(network); container2 = new GenericContainer<>(DhfsImage.getInstance()) .withPrivilegedMode(true) .withCreateContainerCmdModifier(cmd -> Objects.requireNonNull(cmd.getHostConfig()).withDevices(Device.parse("/dev/fuse"))) - .waitingFor(Wait.forLogMessage(".*Listening.*", 1).withStartupTimeout(Duration.ofSeconds(60))).withNetwork(network); + .withNetwork(network); Stream.of(container1, container2).parallel().forEach(GenericContainer::start); @@ -52,6 +52,9 @@ public class ResyncIT { waitingConsumer2 = new WaitingConsumer(); var loggingConsumer2 = new Slf4jLogConsumer(LoggerFactory.getLogger(DhfsFuseIT.class)).withPrefix("2-" + testInfo.getDisplayName()); container2.followOutput(loggingConsumer2.andThen(waitingConsumer2)); + + waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS); + waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Listening"), 60, TimeUnit.SECONDS); } @AfterEach diff --git a/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/peersync/PersistentPeerDataService.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/peersync/PersistentPeerDataService.java index d2fa2d34..a910f392 100644 --- a/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/peersync/PersistentPeerDataService.java +++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/peersync/PersistentPeerDataService.java @@ -68,27 +68,28 @@ public class PersistentPeerDataService { private KeyPair _selfKeyPair; void init(@Observes @Priority(300) StartupEvent event) throws IOException { - jObjectTxManager.run(() -> { - var selfData = curTx.get(PersistentRemoteHostsData.class, PersistentRemoteHostsData.KEY).orElse(null); - if (selfData != null) { - _selfUuid = selfData.selfUuid(); - _selfCertificate = CertificateTools.certFromBytes(selfData.selfCertificate().toByteArray()); - _selfKeyPair = SerializationHelper.deserialize(selfData.selfKeyPair().toByteArray()); - return; - } else { - try { - _selfUuid = presetUuid.map(PeerId::of).orElseGet(() -> PeerId.of(UUID.randomUUID().toString())); - Log.info("Generating a key pair, please wait"); - _selfKeyPair = CertificateTools.generateKeyPair(); - _selfCertificate = CertificateTools.generateCertificate(_selfKeyPair, _selfUuid.toString()); + var selfData = jObjectTxManager.run(() -> { + return curTx.get(PersistentRemoteHostsData.class, PersistentRemoteHostsData.KEY).orElse(null); + }); + if (selfData != null) { + _selfUuid = selfData.selfUuid(); + _selfCertificate = CertificateTools.certFromBytes(selfData.selfCertificate().toByteArray()); + _selfKeyPair = SerializationHelper.deserialize(selfData.selfKeyPair().toByteArray()); + } else { + Log.info("Generating a key pair, please wait"); + _selfKeyPair = CertificateTools.generateKeyPair(); + _selfUuid = presetUuid.map(PeerId::of).orElseGet(() -> PeerId.of(UUID.randomUUID().toString())); + _selfCertificate = CertificateTools.generateCertificate(_selfKeyPair, _selfUuid.toString()); + jObjectTxManager.run(() -> { + try { curTx.put(new PersistentRemoteHostsData(_selfUuid, ByteString.copyFrom(_selfCertificate.getEncoded()), SerializationHelper.serialize(_selfKeyPair), HashTreePSet.empty(), HashTreePMap.empty())); peerInfoService.putPeer(_selfUuid, _selfCertificate.getEncoded()); } catch (CertificateEncodingException e) { throw new RuntimeException(e); } - } - }); + }); + } peerTrustManager.reloadTrustManagerHosts(peerInfoService.getPeers()); Log.info("Self uuid is: " + _selfUuid.toString()); new File(stuffRoot).mkdirs();