This is an automated email from the ASF dual-hosted git repository.

hgruszecki pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iggy.git


The following commit(s) were added to refs/heads/master by this push:
     new 7206f176 fix(ci): simplify server-start action to use address 
parameters (#2180)
7206f176 is described below

commit 7206f1765bf269a441db3fede16bb91f144b9977
Author: Hubert Gruszecki <[email protected]>
AuthorDate: Fri Sep 19 14:32:17 2025 +0200

    fix(ci): simplify server-start action to use address parameters (#2180)
    
    - Replace host/port with tcp_address and http_address parameters
    - Set IGGY_TCP_ADDRESS and IGGY_HTTP_ADDRESS env vars for server
    - Hardcode IGGY_ROOT_USERNAME=iggy and IGGY_ROOT_PASSWORD=iggy
    - Remove redundant default values from all workflow files
    - Fix Java tests to use external server instead of Docker image
---
 .github/actions/csharp-dotnet/pre-merge/action.yml |  8 +-
 .github/actions/go/pre-merge/action.yml            |  2 +-
 .github/actions/java-gradle/pre-merge/action.yml   | 21 +++++
 .github/actions/node-npm/pre-merge/action.yml      | 10 +--
 .../actions/python-maturin/pre-merge/action.yml    |  9 ---
 .github/actions/utils/server-start/action.yml      | 41 ++++++----
 core/server/src/args.rs                            | 20 ++++-
 core/server/src/main.rs                            | 33 +++++++-
 .../iggy/client/blocking/IntegrationTest.java      | 93 +++++++++++++++++++++-
 .../blocking/PersonalAccessTokensBaseTest.java     | 13 +++
 .../iggy/client/blocking/StreamClientBaseTest.java |  3 +
 .../iggy/client/blocking/UsersClientBaseTest.java  |  6 ++
 .../client/blocking/http/HttpClientFactory.java    |  4 +
 .../client/blocking/tcp/SystemTcpClientTest.java   |  2 +-
 .../iggy/client/blocking/tcp/TcpClientFactory.java |  4 +
 scripts/check-backwards-compat.sh                  |  4 +-
 16 files changed, 219 insertions(+), 54 deletions(-)

diff --git a/.github/actions/csharp-dotnet/pre-merge/action.yml 
b/.github/actions/csharp-dotnet/pre-merge/action.yml
index a392e967..9d50f33e 100644
--- a/.github/actions/csharp-dotnet/pre-merge/action.yml
+++ b/.github/actions/csharp-dotnet/pre-merge/action.yml
@@ -84,13 +84,7 @@ runs:
       id: iggy
       if: inputs.task == 'e2e'
       uses: ./.github/actions/utils/server-start
-      with:
-        mode: cargo
-        cargo-bin: iggy-server
-        port: 8090
-      env:
-        IGGY_ROOT_USERNAME: iggy
-        IGGY_ROOT_PASSWORD: iggy
+      continue-on-error: true
 
     - name: Run integration tests
       if: inputs.task == 'e2e'
diff --git a/.github/actions/go/pre-merge/action.yml 
b/.github/actions/go/pre-merge/action.yml
index f8628d2b..06bbd704 100644
--- a/.github/actions/go/pre-merge/action.yml
+++ b/.github/actions/go/pre-merge/action.yml
@@ -78,7 +78,6 @@ runs:
         # Run tests with JSON output for better reporting
         go test -v -json ./... > ../../reports/go-tests.json
 
-
     - name: Lint
       if: inputs.task == 'lint'
       uses: golangci/golangci-lint-action@v6
@@ -115,6 +114,7 @@ runs:
     - name: Setup server for e2e tests
       if: inputs.task == 'e2e'
       uses: ./.github/actions/utils/server-start
+      continue-on-error: true
 
     - name: Run e2e tests
       shell: bash
diff --git a/.github/actions/java-gradle/pre-merge/action.yml 
b/.github/actions/java-gradle/pre-merge/action.yml
index c939652e..2769c873 100644
--- a/.github/actions/java-gradle/pre-merge/action.yml
+++ b/.github/actions/java-gradle/pre-merge/action.yml
@@ -67,9 +67,23 @@ runs:
         # Exit with build exit code
         exit $BUILD_EXIT_CODE
 
+    - name: Setup Rust with cache
+      if: inputs.task == 'test'
+      uses: ./.github/actions/utils/setup-rust-with-cache
+      with:
+        cache-targets: false # Only cache registry and git deps, not target 
dir (sccache handles that)
+
+    - name: Start Iggy server
+      if: inputs.task == 'test'
+      id: iggy
+      uses: ./.github/actions/utils/server-start
+      continue-on-error: true
+
     - name: Test
       if: inputs.task == 'test'
       shell: bash
+      env:
+        USE_EXTERNAL_SERVER: true
       run: |
         foreign/java/dev-support/checks/build.sh test
 
@@ -84,3 +98,10 @@ runs:
           cd foreign/java
           ./gradlew jacocoTestReport --no-daemon
         fi
+
+    - name: Stop Iggy server
+      if: inputs.task == 'test'
+      uses: ./.github/actions/utils/server-stop
+      with:
+        pid-file: ${{ steps.iggy.outputs.pid_file }}
+        log-file: ${{ steps.iggy.outputs.log_file }}
diff --git a/.github/actions/node-npm/pre-merge/action.yml 
b/.github/actions/node-npm/pre-merge/action.yml
index 4b9af814..edbd847e 100644
--- a/.github/actions/node-npm/pre-merge/action.yml
+++ b/.github/actions/node-npm/pre-merge/action.yml
@@ -84,15 +84,7 @@ runs:
       id: iggy
       if: inputs.task == 'e2e'
       uses: ./.github/actions/utils/server-start
-      with:
-        mode: cargo
-        cargo-bin: iggy-server
-        host: 127.0.0.1
-        port: 8090
-        wait-timeout-seconds: 45
-      env:
-        IGGY_ROOT_USERNAME: iggy
-        IGGY_ROOT_PASSWORD: iggy
+      continue-on-error: true
 
     - name: E2E tests
       if: inputs.task == 'e2e'
diff --git a/.github/actions/python-maturin/pre-merge/action.yml 
b/.github/actions/python-maturin/pre-merge/action.yml
index 4ca0a5c4..878845cc 100644
--- a/.github/actions/python-maturin/pre-merge/action.yml
+++ b/.github/actions/python-maturin/pre-merge/action.yml
@@ -116,16 +116,7 @@ runs:
       if: inputs.task == 'test'
       id: iggy
       uses: ./.github/actions/utils/server-start
-      with:
-        mode: cargo
-        cargo-bin: iggy-server
-        host: 127.0.0.1
-        port: 8090
-        wait-timeout-seconds: 45
       continue-on-error: true
-      env:
-        IGGY_ROOT_USERNAME: iggy
-        IGGY_ROOT_PASSWORD: iggy
 
     - name: Run Python integration tests
       if: inputs.task == 'test' && steps.iggy.outcome == 'success'
diff --git a/.github/actions/utils/server-start/action.yml 
b/.github/actions/utils/server-start/action.yml
index 1ebe5350..bdd02b7e 100644
--- a/.github/actions/utils/server-start/action.yml
+++ b/.github/actions/utils/server-start/action.yml
@@ -38,14 +38,14 @@ inputs:
     description: "Working directory for building/running"
     required: false
     default: "."
-  host:
-    description: "Bind host to test readiness against"
+  tcp_address:
+    description: "TCP address (host:port)"
     required: false
-    default: "127.0.0.1"
-  port:
-    description: "TCP port to check readiness"
+    default: "127.0.0.1:8090"
+  http_address:
+    description: "HTTP address (host:port)"
     required: false
-    default: "8090"
+    default: "127.0.0.1:3000"
   wait-timeout-seconds:
     description: "Max seconds to wait until the server is ready"
     required: false
@@ -72,9 +72,12 @@ outputs:
   log_file:
     description: "Path to log file"
     value: ${{ steps.out.outputs.log_file }}
-  address:
-    description: "Host:port used for checks"
-    value: ${{ steps.out.outputs.address }}
+  tcp_address:
+    description: "TCP address used"
+    value: ${{ inputs.tcp_address }}
+  http_address:
+    description: "HTTP address used"
+    value: ${{ inputs.http_address }}
 runs:
   using: "composite"
   steps:
@@ -120,8 +123,9 @@ runs:
       shell: bash
       run: |
         set -euo pipefail
-        HOST="${{ inputs.host }}"
-        PORT="${{ inputs.port }}"
+        TCP_ADDRESS="${{ inputs.tcp_address }}"
+        HOST="${TCP_ADDRESS%:*}"
+        PORT="${TCP_ADDRESS##*:}"
         # true if socket is already open
         if command -v nc >/dev/null 2>&1; then
           if nc -z "$HOST" "$PORT" 2>/dev/null; then busy=1; else busy=0; fi
@@ -133,7 +137,7 @@ runs:
     - if: env.BUSY == '1' && inputs.fail-if-busy == 'true'
       shell: bash
       run: |
-        echo "Port ${{ inputs.host }}:${{ inputs.port }} is already in use." 
>&2
+        echo "Port ${{ inputs.tcp_address }} is already in use." >&2
         exit 1
 
     - name: Start server
@@ -141,16 +145,22 @@ runs:
       working-directory: ${{ inputs.working-directory }}
       run: |
         set -euo pipefail
+        export IGGY_TCP_ADDRESS="${{ inputs.tcp_address }}"
+        export IGGY_HTTP_ADDRESS="${{ inputs.http_address }}"
+        export IGGY_ROOT_USERNAME="iggy"
+        export IGGY_ROOT_PASSWORD="iggy"
         nohup "${{ steps.resolve-bin.outputs.bin }}" >"$LOG_FILE" 2>&1 &
         echo $! > "$PID_FILE"
         echo "Started server PID $(cat "$PID_FILE") → logs: $LOG_FILE"
+        echo "Server configured with TCP=$IGGY_TCP_ADDRESS, 
HTTP=$IGGY_HTTP_ADDRESS"
 
     - name: Wait for readiness
       shell: bash
       run: |
         set -euo pipefail
-        HOST="${{ inputs.host }}"
-        PORT="${{ inputs.port }}"
+        TCP_ADDRESS="${{ inputs.tcp_address }}"
+        HOST="${TCP_ADDRESS%:*}"
+        PORT="${TCP_ADDRESS##*:}"
         DEADLINE=$(( $(date +%s) + ${{ inputs.wait-timeout-seconds }} ))
         until (( $(date +%s) > DEADLINE )); do
           if command -v nc >/dev/null 2>&1; then
@@ -159,7 +169,7 @@ runs:
             timeout 1 bash -lc ":</dev/tcp/$HOST/$PORT" 2>/dev/null && ready=1 
|| ready=0
           fi
           if [[ "$ready" == "1" ]]; then
-            echo "Server is ready on $HOST:$PORT"
+            echo "Server is ready on $TCP_ADDRESS"
             break
           fi
           sleep 1
@@ -178,4 +188,3 @@ runs:
         echo "pid=$(cat "$PID_FILE")" >> "$GITHUB_OUTPUT"
         echo "pid_file=$PID_FILE" >> "$GITHUB_OUTPUT"
         echo "log_file=$LOG_FILE" >> "$GITHUB_OUTPUT"
-        echo "address=${{ inputs.host }}:${{ inputs.port }}" >> 
"$GITHUB_OUTPUT"
diff --git a/core/server/src/args.rs b/core/server/src/args.rs
index 53236345..c47da4d2 100644
--- a/core/server/src/args.rs
+++ b/core/server/src/args.rs
@@ -25,7 +25,7 @@ use clap::Parser;
     about = "Apache Iggy: Hyper-Efficient Message Streaming at Laser Speed",
     long_about = r#"Apache Iggy (Incubating) - A persistent message streaming 
platform written in Rust
 
-Apache Iggy is a high-performance message streaming platform that supports 
QUIC, TCP, and HTTP 
+Apache Iggy is a high-performance message streaming platform that supports 
QUIC, TCP, and HTTP
 transport protocols, capable of processing millions of messages per second 
with low latency.
 
 WEBSITE:
@@ -38,7 +38,7 @@ DOCUMENTATION:
     https://iggy.apache.org/docs
 
 CONFIGURATION:
-    The server uses a TOML configuration file. By default, it looks for 
'configs/server.toml' 
+    The server uses a TOML configuration file. By default, it looks for 
'configs/server.toml'
     in the current working directory. You can override this with the 
IGGY_CONFIG_PATH environment
     variable or use the --config-provider flag.
 
@@ -89,4 +89,20 @@ pub struct Args {
     ///   iggy-server -f                               # Short form
     #[arg(short, long, default_value_t = false, verbatim_doc_comment)]
     pub fresh: bool,
+
+    /// Use default root credentials (INSECURE - FOR DEVELOPMENT ONLY!)
+    ///
+    /// When this flag is set, the root user will be created with username 
'iggy'
+    /// and password 'iggy' if it doesn't exist. If the root user already 
exists,
+    /// this flag has no effect and a warning will be printed.
+    ///
+    /// This flag is equivalent to setting IGGY_ROOT_USERNAME=iggy and 
IGGY_ROOT_PASSWORD=iggy,
+    /// but environment variables take precedence over this flag.
+    ///
+    /// WARNING: This is insecure and should only be used for development and 
testing!
+    ///
+    /// Examples:
+    ///   iggy-server --with-default-root-credentials     # Use 'iggy/iggy' as 
root credentials
+    #[arg(long, default_value_t = false, verbatim_doc_comment)]
+    pub with_default_root_credentials: bool,
 }
diff --git a/core/server/src/main.rs b/core/server/src/main.rs
index c6375f4b..51c3cabb 100644
--- a/core/server/src/main.rs
+++ b/core/server/src/main.rs
@@ -41,7 +41,7 @@ use server::streaming::systems::system::{SharedSystem, 
System};
 use server::streaming::utils::MemoryPool;
 use server::tcp::tcp_server;
 use tokio::time::Instant;
-use tracing::{info, instrument};
+use tracing::{info, instrument, warn};
 
 #[tokio::main]
 #[instrument(skip_all, name = "trace_start_server")]
@@ -67,6 +67,7 @@ async fn main() -> Result<(), ServerError> {
     }
 
     let args = Args::parse();
+
     let config_provider = config_provider::resolve(&args.config_provider)?;
     let config = ServerConfig::load(&config_provider).await?;
     if args.fresh {
@@ -78,6 +79,7 @@ async fn main() -> Result<(), ServerError> {
             }
         }
     }
+
     let mut logging = Logging::new(config.telemetry.clone());
     logging.early_init();
 
@@ -85,10 +87,33 @@ async fn main() -> Result<(), ServerError> {
 
     logging.late_init(config.system.get_system_path(), 
&config.system.logging)?;
 
+    if args.with_default_root_credentials {
+        let username_set = std::env::var("IGGY_ROOT_USERNAME").is_ok();
+        let password_set = std::env::var("IGGY_ROOT_PASSWORD").is_ok();
+
+        if !username_set || !password_set {
+            if !username_set {
+                unsafe {
+                    std::env::set_var("IGGY_ROOT_USERNAME", "iggy");
+                }
+            }
+            if !password_set {
+                unsafe {
+                    std::env::set_var("IGGY_ROOT_PASSWORD", "iggy");
+                }
+            }
+            info!(
+                "Using default root credentials (username: iggy, password: 
iggy) - FOR DEVELOPMENT ONLY!"
+            );
+        } else {
+            warn!(
+                "--with-default-root-credentials flag is ignored because root 
credentials are already set via environment variables"
+            );
+        }
+    }
+
     #[cfg(feature = "disable-mimalloc")]
-    tracing::warn!(
-        "Using default system allocator because code was build with 
`disable-mimalloc` feature"
-    );
+    warn!("Using default system allocator because code was build with 
`disable-mimalloc` feature");
     #[cfg(not(feature = "disable-mimalloc"))]
     info!("Using mimalloc allocator");
 
diff --git 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/IntegrationTest.java
 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/IntegrationTest.java
index d1eb50eb..dd311a2f 100644
--- 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/IntegrationTest.java
+++ 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/IntegrationTest.java
@@ -20,12 +20,18 @@
 package org.apache.iggy.client.blocking;
 
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.junit.jupiter.Container;
 import org.testcontainers.junit.jupiter.Testcontainers;
 import org.testcontainers.utility.DockerImageName;
 import org.apache.iggy.topic.CompressionAlgorithm;
 import java.math.BigInteger;
+import java.util.List;
+import java.util.ArrayList;
 import static java.util.Optional.empty;
 import static java.util.Optional.of;
 
@@ -35,21 +41,88 @@ public abstract class IntegrationTest {
     public static final int HTTP_PORT = 3000;
     public static final int TCP_PORT = 8090;
 
-    @Container
-    protected final GenericContainer<?> iggyServer = new 
GenericContainer<>(DockerImageName.parse("apache/iggy:edge"))
-            .withExposedPorts(HTTP_PORT, TCP_PORT);
+    private static final boolean USE_EXTERNAL_SERVER = 
System.getenv("USE_EXTERNAL_SERVER") != null;
+
+    protected static GenericContainer<?> iggyServer;
+
+    // Track created resources for cleanup
+    protected List<Long> createdStreamIds = new ArrayList<>();
+    protected List<Long> createdUserIds = new ArrayList<>();
+
+    @BeforeAll
+    static void setupContainer() {
+        if (!USE_EXTERNAL_SERVER) {
+            iggyServer = new 
GenericContainer<>(DockerImageName.parse("apache/iggy:edge"))
+                .withExposedPorts(HTTP_PORT, TCP_PORT)
+                .withEnv("IGGY_ROOT_USERNAME", "iggy")
+                .withEnv("IGGY_ROOT_PASSWORD", "iggy")
+                .withEnv("IGGY_TCP_ADDRESS", "0.0.0.0:8090")
+                .withEnv("IGGY_HTTP_ADDRESS", "0.0.0.0:3000")
+                .withLogConsumer(frame -> 
System.out.print(frame.getUtf8String()));
+            iggyServer.start();
+        }
+    }
+
+    @AfterAll
+    static void stopContainer() {
+        if (iggyServer != null && iggyServer.isRunning()) {
+            // Print last logs before stopping
+            System.out.println("=== Iggy Server Container Logs ===");
+            System.out.println(iggyServer.getLogs());
+            System.out.println("=================================");
+            iggyServer.stop();
+        }
+    }
 
     protected IggyBaseClient client;
 
     @BeforeEach
     void beforeEachIntegrationTest() {
         client = getClient();
+        // Clear tracking lists for new test
+        createdStreamIds.clear();
+        createdUserIds.clear();
+    }
+
+    @AfterEach
+    void cleanupTestResources() {
+        if (client == null) {
+            return;
+        }
+
+        // Login as root to ensure we have permissions for cleanup
+        try {
+            login();
+        } catch (Exception e) {
+            // Already logged in or login failed - continue with cleanup anyway
+        }
+
+        // Delete all created streams (which also deletes topics within them)
+        for (Long streamId : createdStreamIds) {
+            try {
+                client.streams().deleteStream(streamId);
+            } catch (Exception e) {
+                // Stream might already be deleted or doesn't exist - ignore
+            }
+        }
+
+        // Delete all created non-root users
+        for (Long userId : createdUserIds) {
+            try {
+                if (userId != 1) { // Don't try to delete root user
+                    client.users().deleteUser(userId);
+                }
+            } catch (Exception e) {
+                // User might already be deleted or doesn't exist - ignore
+            }
+        }
     }
 
     abstract protected IggyBaseClient getClient();
 
     protected void setUpStream() {
         client.streams().createStream(of(42L), "test-stream");
+        createdStreamIds.add(42L);
     }
 
     protected void setUpStreamAndTopic() {
@@ -69,4 +142,18 @@ public abstract class IntegrationTest {
         client.users().login("iggy", "iggy");
     }
 
+    // Helper method for tests that need to track streams created directly
+    protected void trackStream(Long streamId) {
+        if (!createdStreamIds.contains(streamId)) {
+            createdStreamIds.add(streamId);
+        }
+    }
+
+    // Helper method for tests that need to track users created
+    protected void trackUser(Long userId) {
+        if (!createdUserIds.contains(userId)) {
+            createdUserIds.add(userId);
+        }
+    }
+
 }
diff --git 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/PersonalAccessTokensBaseTest.java
 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/PersonalAccessTokensBaseTest.java
index 2c094092..38b3c163 100644
--- 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/PersonalAccessTokensBaseTest.java
+++ 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/PersonalAccessTokensBaseTest.java
@@ -34,6 +34,16 @@ public abstract class PersonalAccessTokensBaseTest extends 
IntegrationTest {
         personalAccessTokensClient = client.personalAccessTokens();
 
         login();
+
+        // Clean up any existing tokens before test
+        var existingTokens = 
personalAccessTokensClient.getPersonalAccessTokens();
+        for (var token : existingTokens) {
+            try {
+                
personalAccessTokensClient.deletePersonalAccessToken(token.name());
+            } catch (Exception e) {
+                // Ignore if already deleted
+            }
+        }
     }
 
     @Test
@@ -78,6 +88,9 @@ public abstract class PersonalAccessTokensBaseTest extends 
IntegrationTest {
 
         // then
         assertThat(user).isPresent();
+
+        // cleanup
+        personalAccessTokensClient.deletePersonalAccessToken("new-token");
     }
 
 }
diff --git 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/StreamClientBaseTest.java
 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/StreamClientBaseTest.java
index d304c931..7fa01e5b 100644
--- 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/StreamClientBaseTest.java
+++ 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/StreamClientBaseTest.java
@@ -39,6 +39,7 @@ public abstract class StreamClientBaseTest extends 
IntegrationTest {
     void shouldCreateAndDeleteStream() {
         // when
         streamsClient.createStream(Optional.of(42L), "test-stream");
+        trackStream(42L);
         var streamOptional = streamsClient.getStream(42L);
 
         // then
@@ -55,6 +56,7 @@ public abstract class StreamClientBaseTest extends 
IntegrationTest {
 
         // when
         streamsClient.deleteStream(42L);
+        createdStreamIds.remove(42L); // Remove from tracking since we deleted 
it
         streams = streamsClient.getStreams();
 
         // then
@@ -65,6 +67,7 @@ public abstract class StreamClientBaseTest extends 
IntegrationTest {
     void shouldUpdateStream() {
         // given
         streamsClient.createStream(Optional.of(42L), "test-stream");
+        trackStream(42L);
 
         // when
         streamsClient.updateStream(42L, "test-stream-new");
diff --git 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/UsersClientBaseTest.java
 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/UsersClientBaseTest.java
index 190e8d71..80b64a04 100644
--- 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/UsersClientBaseTest.java
+++ 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/UsersClientBaseTest.java
@@ -74,6 +74,7 @@ public abstract class UsersClientBaseTest extends 
IntegrationTest {
                 "test",
                 UserStatus.Active,
                 Optional.of(new Permissions(createGlobalPermissions(true), 
Collections.emptyMap())));
+        trackUser(createdUser.id());
 
         // then
         assertThat(createdUser).isNotNull();
@@ -100,6 +101,7 @@ public abstract class UsersClientBaseTest extends 
IntegrationTest {
         // given
         login();
         UserInfoDetails user = usersClient.createUser("test", "test", 
UserStatus.Active, Optional.empty());
+        trackUser(user.id());
 
         // when
         usersClient.updateUser(user.id(), Optional.empty(), 
Optional.of(UserStatus.Inactive));
@@ -115,6 +117,7 @@ public abstract class UsersClientBaseTest extends 
IntegrationTest {
         var permissions = new Permissions(createGlobalPermissions(true), 
Collections.emptyMap());
         login();
         UserInfoDetails user = usersClient.createUser("test", "test", 
UserStatus.Active, Optional.of(permissions));
+        trackUser(user.id());
 
         // when
         usersClient.updatePermissions(user.id(), Optional.of(new 
Permissions(createGlobalPermissions(false), Collections.emptyMap())));
@@ -141,6 +144,9 @@ public abstract class UsersClientBaseTest extends 
IntegrationTest {
 
         // then
         assertThat(newLogin).isNotNull();
+
+        // restore original password for other tests
+        usersClient.changePassword(identity.userId(), "new-pass", "iggy");
     }
 
     @Test
diff --git 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/http/HttpClientFactory.java
 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/http/HttpClientFactory.java
index 4d6f1239..5fb2434a 100644
--- 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/http/HttpClientFactory.java
+++ 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/http/HttpClientFactory.java
@@ -25,6 +25,10 @@ import static 
org.apache.iggy.client.blocking.IntegrationTest.HTTP_PORT;
 class HttpClientFactory {
 
     static IggyHttpClient create(GenericContainer<?> iggyServer) {
+        if (iggyServer == null) {
+            // Server is running externally
+            return new IggyHttpClient("http://127.0.0.1:"; + HTTP_PORT);
+        }
         String address = iggyServer.getHost();
         Integer port = iggyServer.getMappedPort(HTTP_PORT);
         return new IggyHttpClient("http://"; + address + ":" + port);
diff --git 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/tcp/SystemTcpClientTest.java
 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/tcp/SystemTcpClientTest.java
index be25d38e..e3384cbb 100644
--- 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/tcp/SystemTcpClientTest.java
+++ 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/tcp/SystemTcpClientTest.java
@@ -56,6 +56,6 @@ class SystemTcpClientTest extends SystemClientBaseTest {
 
         // then
         assertThat(clients).isNotNull();
-        assertThat(clients.size()).isEqualTo(1);
+        assertThat(clients.size()).isGreaterThanOrEqualTo(1); // At least our 
connection
     }
 }
diff --git 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/tcp/TcpClientFactory.java
 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/tcp/TcpClientFactory.java
index 9426d4df..ef22bcd9 100644
--- 
a/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/tcp/TcpClientFactory.java
+++ 
b/foreign/java/java-sdk/src/test/java/org/apache/iggy/client/blocking/tcp/TcpClientFactory.java
@@ -25,6 +25,10 @@ import static 
org.apache.iggy.client.blocking.IntegrationTest.TCP_PORT;
 class TcpClientFactory {
 
     static IggyTcpClient create(GenericContainer<?> iggyServer) {
+        if (iggyServer == null) {
+            // Server is running externally
+            return new IggyTcpClient("127.0.0.1", TCP_PORT);
+        }
         String address = iggyServer.getHost();
         Integer port = iggyServer.getMappedPort(TCP_PORT);
         return new IggyTcpClient(address, port);
diff --git a/scripts/check-backwards-compat.sh 
b/scripts/check-backwards-compat.sh
index 7f74677d..dec360ce 100755
--- a/scripts/check-backwards-compat.sh
+++ b/scripts/check-backwards-compat.sh
@@ -157,7 +157,7 @@ ok "built baseline"
 
 info "Starting iggy-server (baseline)"
 set +e
-( nohup target/debug/iggy-server >"$MASTER_LOG" 2>&1 & echo $! > 
"$TMP_ROOT/master.pid" )
+( IGGY_ROOT_USERNAME=iggy IGGY_ROOT_PASSWORD=iggy nohup 
target/debug/iggy-server >"$MASTER_LOG" 2>&1 & echo $! > "$TMP_ROOT/master.pid" 
)
 set -e
 MASTER_PID="$(cat "$TMP_ROOT/master.pid")"
 ok "iggy-server started (pid $MASTER_PID), logs: $MASTER_LOG"
@@ -222,7 +222,7 @@ ok "restored local_data/"
 # -----------------------------
 info "Starting iggy-server (PR)"
 set +e
-( nohup target/debug/iggy-server >"$PR_LOG" 2>&1 & echo $! > 
"$TMP_ROOT/pr.pid" )
+( IGGY_ROOT_USERNAME=iggy IGGY_ROOT_PASSWORD=iggy nohup 
target/debug/iggy-server >"$PR_LOG" 2>&1 & echo $! > "$TMP_ROOT/pr.pid" )
 set -e
 PR_PID="$(cat "$TMP_ROOT/pr.pid")"
 ok "iggy-server (PR) started (pid $PR_PID), logs: $PR_LOG"

Reply via email to