diff --git a/core/src/main/java/dev/streamx/cli/command/dev/BrowserOpener.java b/core/src/main/java/dev/streamx/cli/command/dev/BrowserOpener.java index 5ad1ad6b..6448571a 100644 --- a/core/src/main/java/dev/streamx/cli/command/dev/BrowserOpener.java +++ b/core/src/main/java/dev/streamx/cli/command/dev/BrowserOpener.java @@ -23,7 +23,8 @@ public void tryOpenBrowser() { try { if (Desktop.isDesktopSupported()) { Desktop desktop = Desktop.getDesktop(); - URI meshManagerUri = new URI("http://localhost:" + devConfig.dashboardPort()); + String entryUrl = "http://localhost:%d/overview".formatted(devConfig.dashboardPort()); + URI meshManagerUri = new URI(entryUrl); desktop.browse(meshManagerUri); } else { logger.warn("Opening browser is not supported"); diff --git a/core/src/main/java/dev/streamx/cli/command/dev/DashboardRunner.java b/core/src/main/java/dev/streamx/cli/command/dev/DashboardRunner.java index 33ef5533..f2c2a171 100644 --- a/core/src/main/java/dev/streamx/cli/command/dev/DashboardRunner.java +++ b/core/src/main/java/dev/streamx/cli/command/dev/DashboardRunner.java @@ -34,8 +34,13 @@ public void startStreamxDashboard(String meshPath, String meshDirectory, meshPath, meshDirectory, projectDirectory - ).withStartupTimeout(Duration.ofSeconds(CONTAINER_TIMEOUT_IN_SECS)) - .withNetwork(network); + ) + .withNetwork(network) + .waitingFor(Wait.forHttp("/q/health") + .forPort(8080) + ) + .withStartupTimeout(Duration.ofSeconds(CONTAINER_TIMEOUT_IN_SECS)); + dashboardContainer.start(); print("StreamX Dashboard started on http://localhost:" + devConfig.dashboardPort()); diff --git a/core/src/test/java/dev/streamx/cli/command/dev/DevCommandTest.java b/core/src/test/java/dev/streamx/cli/command/dev/DevCommandTest.java index 6c79943b..8fd0e9c4 100644 --- a/core/src/test/java/dev/streamx/cli/command/dev/DevCommandTest.java +++ b/core/src/test/java/dev/streamx/cli/command/dev/DevCommandTest.java @@ -1,5 +1,6 @@ package dev.streamx.cli.command.dev; +import static dev.streamx.cli.command.util.MeshTestsUtils.cleanUpMesh; import static org.assertj.core.api.Assertions.assertThat; import com.github.dockerjava.api.DockerClient; @@ -9,8 +10,6 @@ import dev.streamx.cli.command.dev.event.DevReady; import dev.streamx.runner.event.MeshReloadUpdate; import dev.streamx.runner.event.MeshStarted; -import dev.streamx.runner.validation.DockerContainerValidator; -import dev.streamx.runner.validation.DockerEnvironmentValidator; import io.quarkus.arc.properties.IfBuildProperty; import io.quarkus.test.junit.QuarkusTestProfile; import io.quarkus.test.junit.TestProfile; @@ -70,8 +69,7 @@ void awaitDockerResourcesAreRemoved() { Set cleanedUpContainers = Set.of("pulsar", "pulsar-init", "streamx-dashboard", "rest-ingestion", "relay", "web-delivery-service"); - DockerClient client = new DockerEnvironmentValidator().validateDockerClient(); - new DockerContainerValidator().verifyExistingContainers(client, cleanedUpContainers); + cleanUpMesh(cleanedUpContainers); return true; } catch (Exception e) { diff --git a/core/src/test/java/dev/streamx/cli/command/run/RunCommandTest.java b/core/src/test/java/dev/streamx/cli/command/run/RunCommandTest.java index 0205afb7..bca3d092 100644 --- a/core/src/test/java/dev/streamx/cli/command/run/RunCommandTest.java +++ b/core/src/test/java/dev/streamx/cli/command/run/RunCommandTest.java @@ -1,13 +1,11 @@ package dev.streamx.cli.command.run; +import static dev.streamx.cli.command.util.MeshTestsUtils.cleanUpMesh; import static org.assertj.core.api.Assertions.assertThat; -import com.github.dockerjava.api.DockerClient; import dev.streamx.cli.command.MeshStopper; import dev.streamx.cli.command.run.RunCommandTest.RunCommandProfile; import dev.streamx.runner.event.MeshStarted; -import dev.streamx.runner.validation.DockerContainerValidator; -import dev.streamx.runner.validation.DockerEnvironmentValidator; import io.quarkus.arc.properties.IfBuildProperty; import io.quarkus.test.junit.QuarkusTestProfile; import io.quarkus.test.junit.TestProfile; @@ -38,8 +36,7 @@ void awaitDockerResourcesAreRemoved() { Set cleanedUpContainers = Set.of("pulsar", "pulsar-init", "rest-ingestion", "relay", "web-delivery-service"); - DockerClient client = new DockerEnvironmentValidator().validateDockerClient(); - new DockerContainerValidator().verifyExistingContainers(client, cleanedUpContainers); + cleanUpMesh(cleanedUpContainers); return true; } catch (Exception e) { diff --git a/core/src/test/java/dev/streamx/cli/command/util/MeshTestsUtils.java b/core/src/test/java/dev/streamx/cli/command/util/MeshTestsUtils.java new file mode 100644 index 00000000..31f844e7 --- /dev/null +++ b/core/src/test/java/dev/streamx/cli/command/util/MeshTestsUtils.java @@ -0,0 +1,22 @@ +package dev.streamx.cli.command.util; + +import com.github.dockerjava.api.DockerClient; +import dev.streamx.runner.validation.DockerContainerValidator; +import dev.streamx.runner.validation.DockerEnvironmentValidator; +import java.util.Set; + +public class MeshTestsUtils { + public static void cleanUpMesh(Set cleanedUpContainers) { + DockerClient client = new DockerEnvironmentValidator().validateDockerClient(); + for (String container : cleanedUpContainers) { + try { + client.removeContainerCmd(container) + .withForce(true) + .exec(); + } catch (Exception ignored) { + // Ignore + } + } + new DockerContainerValidator().verifyExistingContainers(client, cleanedUpContainers); + } +}