Skip to content

Commit ed95d69

Browse files
Replace Thread.sleep with Awaitility for more robust synchronization
Co-authored-by: brendandburns <[email protected]>
1 parent 14926d1 commit ed95d69

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

spring/src/test/java/io/kubernetes/client/spring/extended/controller/KubernetesInformerCreatorTest.java

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
2020
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
2121
import static org.assertj.core.api.Assertions.assertThat;
22+
import static org.awaitility.Awaitility.await;
2223

2324
import com.github.tomakehurst.wiremock.core.Admin;
2425
import com.github.tomakehurst.wiremock.extension.Parameters;
@@ -38,6 +39,7 @@
3839
import io.kubernetes.client.openapi.models.V1PodList;
3940
import io.kubernetes.client.util.ClientBuilder;
4041
import io.kubernetes.client.util.generic.GenericKubernetesApi;
42+
import java.time.Duration;
4143
import java.util.Collections;
4244
import java.util.concurrent.Semaphore;
4345
import org.junit.jupiter.api.Test;
@@ -167,21 +169,27 @@ void informerInjection() throws InterruptedException {
167169
getCount.acquire(2);
168170
watchCount.acquire(2);
169171

170-
// Add a small delay to ensure WireMock has finished recording the requests
171-
Thread.sleep(100);
172-
173-
apiServer.verify(
174-
1,
175-
getRequestedFor(urlPathEqualTo("/api/v1/pods")).withQueryParam("watch", equalTo("false")));
176-
apiServer.verify(
177-
getRequestedFor(urlPathEqualTo("/api/v1/pods")).withQueryParam("watch", equalTo("true")));
178-
apiServer.verify(
179-
1,
180-
getRequestedFor(urlPathEqualTo("/api/v1/namespaces/default/configmaps"))
181-
.withQueryParam("watch", equalTo("false")));
182-
apiServer.verify(
183-
getRequestedFor(urlPathEqualTo("/api/v1/namespaces/default/configmaps"))
184-
.withQueryParam("watch", equalTo("true")));
172+
// Use Awaitility to poll until WireMock has recorded the requests
173+
await()
174+
.atMost(Duration.ofSeconds(5))
175+
.pollInterval(Duration.ofMillis(50))
176+
.untilAsserted(
177+
() -> {
178+
apiServer.verify(
179+
1,
180+
getRequestedFor(urlPathEqualTo("/api/v1/pods"))
181+
.withQueryParam("watch", equalTo("false")));
182+
apiServer.verify(
183+
getRequestedFor(urlPathEqualTo("/api/v1/pods"))
184+
.withQueryParam("watch", equalTo("true")));
185+
apiServer.verify(
186+
1,
187+
getRequestedFor(urlPathEqualTo("/api/v1/namespaces/default/configmaps"))
188+
.withQueryParam("watch", equalTo("false")));
189+
apiServer.verify(
190+
getRequestedFor(urlPathEqualTo("/api/v1/namespaces/default/configmaps"))
191+
.withQueryParam("watch", equalTo("true")));
192+
});
185193

186194
assertThat(new Lister<>(podInformer.getIndexer()).list()).hasSize(1);
187195
assertThat(new Lister<>(configMapInformer.getIndexer()).list()).hasSize(1);

0 commit comments

Comments
 (0)