This is an automated email from the ASF dual-hosted git repository. mpochatkin pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push: new 17ca7cb1cdb IGNITE-26642 Fix flaky DeploymentManagementControllerTest (#6718) 17ca7cb1cdb is described below commit 17ca7cb1cdb53d7526c2b765d4689b7cf6e1a6ab Author: Mikhail <pochat...@users.noreply.github.com> AuthorDate: Thu Oct 9 08:18:29 2025 +0300 IGNITE-26642 Fix flaky DeploymentManagementControllerTest (#6718) --- .../rest/api/deployment/UnitVersionStatus.java | 6 +++ .../DeploymentManagementControllerTest.java | 63 +++++++++++----------- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/modules/rest-api/src/main/java/org/apache/ignite/internal/rest/api/deployment/UnitVersionStatus.java b/modules/rest-api/src/main/java/org/apache/ignite/internal/rest/api/deployment/UnitVersionStatus.java index e15b3de01fa..0ffea704120 100644 --- a/modules/rest-api/src/main/java/org/apache/ignite/internal/rest/api/deployment/UnitVersionStatus.java +++ b/modules/rest-api/src/main/java/org/apache/ignite/internal/rest/api/deployment/UnitVersionStatus.java @@ -22,6 +22,7 @@ import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.apache.ignite.internal.tostring.S; /** * DTO of unit version and status. @@ -73,4 +74,9 @@ public class UnitVersionStatus { result = 31 * result + (status != null ? status.hashCode() : 0); return result; } + + @Override + public String toString() { + return S.toString(this); + } } diff --git a/modules/rest/src/integrationTest/java/org/apache/ignite/internal/rest/deployment/DeploymentManagementControllerTest.java b/modules/rest/src/integrationTest/java/org/apache/ignite/internal/rest/deployment/DeploymentManagementControllerTest.java index cef7cb10220..1685c2b05e6 100644 --- a/modules/rest/src/integrationTest/java/org/apache/ignite/internal/rest/deployment/DeploymentManagementControllerTest.java +++ b/modules/rest/src/integrationTest/java/org/apache/ignite/internal/rest/deployment/DeploymentManagementControllerTest.java @@ -27,7 +27,7 @@ import static org.apache.ignite.internal.testframework.IgniteTestUtils.createZip import static org.apache.ignite.internal.testframework.IgniteTestUtils.fillDummyFile; import static org.awaitility.Awaitility.await; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; @@ -51,6 +51,7 @@ import jakarta.inject.Inject; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; @@ -142,13 +143,7 @@ public class DeploymentManagementControllerTest extends ClusterPerClassIntegrati assertThat(response.code(), is(OK.code())); - await().untilAsserted(() -> { - MutableHttpRequest<Object> get = HttpRequest.GET("cluster/units"); - UnitStatus status = client.toBlocking().retrieve(get, UnitStatus.class); - - assertThat(status.id(), is(id)); - assertThat(status.versionToStatus(), equalTo(List.of(new UnitVersionStatus(version, DEPLOYED)))); - }); + awaitDeployedStatus(id, version); } @Test @@ -159,13 +154,7 @@ public class DeploymentManagementControllerTest extends ClusterPerClassIntegrati assertThat(response.code(), is(OK.code())); - await().untilAsserted(() -> { - MutableHttpRequest<Object> get = HttpRequest.GET("cluster/units"); - UnitStatus status = client.toBlocking().retrieve(get, UnitStatus.class); - - assertThat(status.id(), is(id)); - assertThat(status.versionToStatus(), equalTo(List.of(new UnitVersionStatus(version, DEPLOYED)))); - }); + awaitDeployedStatus(id, version); } @Test @@ -190,6 +179,8 @@ public class DeploymentManagementControllerTest extends ClusterPerClassIntegrati HttpClientResponseException.class, () -> deploy(id, version)); assertThat(e.getResponse().code(), is(CONFLICT.code())); + + awaitDeployedStatus(id, version); } @Test @@ -201,6 +192,8 @@ public class DeploymentManagementControllerTest extends ClusterPerClassIntegrati assertThat(response.code(), is(OK.code())); + awaitDeployedStatus(id, version); + response = undeploy(id, version); assertThat(response.code(), is(OK.code())); } @@ -223,19 +216,19 @@ public class DeploymentManagementControllerTest extends ClusterPerClassIntegrati @Test public void testList() { String id = UNIT_ID; - deploy(id, "1.1.1"); - deploy(id, "1.1.2"); - deploy(id, "1.2.1"); - deploy(id, "2.0"); - deploy(id, "1.0.0"); - deploy(id, "1.0.1"); + String[] versions = { "1.1.1", "1.1.2", "1.2.1", "2.0.0", "1.0.0", "1.0.1" }; + for (String version : versions) { + deploy(id, version); + } + + awaitDeployedStatus(id, versions); List<UnitStatus> list = list(id); - List<String> versions = list.stream() + List<String> actualVersions = list.stream() .flatMap(unitStatus -> unitStatus.versionToStatus().stream().map(UnitVersionStatus::getVersion)) .collect(Collectors.toList()); - assertThat(versions, contains("1.0.0", "1.0.1", "1.1.1", "1.1.2", "1.2.1", "2.0.0")); + assertThat(actualVersions, containsInAnyOrder(versions)); } @Test @@ -246,13 +239,7 @@ public class DeploymentManagementControllerTest extends ClusterPerClassIntegrati assertThat(response.code(), is(OK.code())); - await().untilAsserted(() -> { - MutableHttpRequest<Object> get = HttpRequest.GET("cluster/units"); - UnitStatus status = client.toBlocking().retrieve(get, UnitStatus.class); - - assertThat(status.id(), is(id)); - assertThat(status.versionToStatus(), equalTo(List.of(new UnitVersionStatus(version, DEPLOYED)))); - }); + awaitDeployedStatus(id, version); Path workDir0 = CLUSTER.nodeWorkDir(0); Path nodeUnitDirectory = workDir0.resolve("deployment").resolve(id).resolve(version); @@ -275,6 +262,8 @@ public class DeploymentManagementControllerTest extends ClusterPerClassIntegrati assertThat(response.code(), is(OK.code())); + awaitDeployedStatus(id, version); + await().untilAsserted(() -> { MutableHttpRequest<Object> get = HttpRequest.GET("cluster/units"); UnitStatus status = client.toBlocking().retrieve(get, UnitStatus.class); @@ -307,6 +296,20 @@ public class DeploymentManagementControllerTest extends ClusterPerClassIntegrati ); } + private void awaitDeployedStatus(String id, String... versions) { + await().untilAsserted(() -> { + MutableHttpRequest<Object> get = HttpRequest.GET("cluster/units"); + UnitStatus status = client.toBlocking().retrieve(get, UnitStatus.class); + + assertThat(status.id(), is(id)); + UnitVersionStatus[] statuses = Arrays.stream(versions) + .map(version -> new UnitVersionStatus(version, DEPLOYED)) + .toArray(UnitVersionStatus[]::new); + + assertThat(status.versionToStatus(), containsInAnyOrder(statuses)); + }); + } + private HttpResponse<Object> deployZip(String id, String version) { return deploy(id, version, true, zipFile); }