Skip to content

Commit f4cce7c

Browse files
authored
test: wait for condition instead of fixed delay (#21218) (#21295)
1 parent 2d415b7 commit f4cce7c

File tree

6 files changed

+42
-16
lines changed

6 files changed

+42
-16
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,11 @@
281281
<artifactId>hamcrest-all</artifactId>
282282
<version>1.3</version>
283283
</dependency>
284+
<dependency>
285+
<groupId>org.awaitility</groupId>
286+
<artifactId>awaitility</artifactId>
287+
<version>4.3.0</version>
288+
</dependency>
284289
</dependencies>
285290
</dependencyManagement>
286291

vaadin-dev-server/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@
9797
<scope>test</scope>
9898
</dependency>
9999

100+
<dependency>
101+
<groupId>org.awaitility</groupId>
102+
<artifactId>awaitility</artifactId>
103+
<scope>test</scope>
104+
</dependency>
105+
100106
</dependencies>
101107

102108
<build>

vaadin-dev-server/src/main/java/com/vaadin/base/devserver/ExternalDependencyWatcher.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.nio.file.Path;
2424
import java.nio.file.StandardCopyOption;
2525
import java.util.ArrayList;
26-
import java.util.Collections;
2726
import java.util.HashSet;
2827
import java.util.List;
2928
import java.util.Set;

vaadin-dev-server/src/main/java/com/vaadin/base/devserver/viteproxy/ViteWebsocketConnection.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
*/
1616
package com.vaadin.base.devserver.viteproxy;
1717

18-
import jakarta.websocket.CloseReason.CloseCodes;
19-
2018
import java.net.URI;
2119
import java.net.http.HttpClient;
2220
import java.net.http.WebSocket;
@@ -30,6 +28,7 @@
3028
import java.util.concurrent.TimeoutException;
3129
import java.util.function.Consumer;
3230

31+
import jakarta.websocket.CloseReason.CloseCodes;
3332
import org.slf4j.Logger;
3433
import org.slf4j.LoggerFactory;
3534

@@ -153,6 +152,10 @@ public void send(String message)
153152
* if there is a problem with the connection
154153
*/
155154
public void close() throws InterruptedException, ExecutionException {
155+
if (clientWebsocket == null) {
156+
getLogger().debug("Connection already closed");
157+
return;
158+
}
156159
getLogger().debug("Closing the connection");
157160
if (clientWebsocket.isDone()) {
158161
WebSocket client = clientWebsocket.get();

vaadin-dev-server/src/test/java/com/vaadin/base/devserver/FileWatcherTest.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
import java.io.File;
44
import java.io.IOException;
55
import java.nio.file.Files;
6+
import java.util.Arrays;
7+
import java.util.List;
68
import java.util.concurrent.atomic.AtomicReference;
79

10+
import org.awaitility.Awaitility;
811
import org.junit.Assert;
912
import org.junit.Test;
1013
import org.mockito.MockedStatic;
@@ -76,10 +79,14 @@ public void externalDependencyWatcher_setViaParameter_TriggeredForModification()
7679
createFile(subProjectLegacyFrontend + "/somejs.js");
7780
assertFileCountFound(jarFrontendResources, 2);
7881

79-
Assert.assertEquals("somestyles.css",
80-
jarFrontendResources.listFiles()[0].getName());
81-
Assert.assertEquals("somejs.js",
82-
jarFrontendResources.listFiles()[1].getName());
82+
// Map files as listFiles makes no promises on ordering
83+
List<String> frontendFiles = Arrays
84+
.stream(jarFrontendResources.listFiles()).map(File::getName)
85+
.toList();
86+
Assert.assertTrue("No 'somestyles.css' file found",
87+
frontendFiles.contains("somestyles.css"));
88+
Assert.assertTrue("No 'somejs.js' file found",
89+
frontendFiles.contains("somejs.js"));
8390
}
8491
}
8592

@@ -130,13 +137,14 @@ public void externalDependencyWatcher_setAsDefaultForRunnerProjectButNotSubProje
130137
}
131138
}
132139

133-
private void assertFileCountFound(File directory, int count)
134-
throws InterruptedException {
135-
Thread.sleep(100);
136-
Assert.assertEquals(
137-
"Wrong amount of copied files found when there should be "
138-
+ count + ".",
139-
count, directory.listFiles().length);
140+
private void assertFileCountFound(File directory, int count) {
141+
Awaitility.await().untilAsserted(directory::listFiles, files -> {
142+
Assert.assertEquals(
143+
"Wrong amount of copied files found when there should be "
144+
+ count + ". Current files were: "
145+
+ Arrays.toString(files),
146+
count, files.length);
147+
});
140148

141149
}
142150

vaadin-dev-server/src/test/java/com/vaadin/base/devserver/viteproxy/ViteWebsocketConnectionTest.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.sun.net.httpserver.Headers;
3636
import com.sun.net.httpserver.HttpExchange;
3737
import com.sun.net.httpserver.HttpServer;
38+
import org.awaitility.Awaitility;
3839
import org.junit.Assert;
3940
import org.junit.Before;
4041
import org.junit.Test;
@@ -136,7 +137,7 @@ public void close_clientWebsocketNotAvailable_dontBlock()
136137
}
137138

138139
@SuppressWarnings("unchecked")
139-
@Test(timeout = 2000)
140+
@Test
140141
public void close_clientWebsocketClose_dontBlockIndefinitely()
141142
throws ExecutionException, InterruptedException,
142143
NoSuchFieldException, InvocationTargetException,
@@ -170,7 +171,11 @@ public void close_clientWebsocketClose_dontBlockIndefinitely()
170171
});
171172
ReflectTools.setJavaFieldValue(connection, clientWebsocketField,
172173
CompletableFuture.completedFuture(mockWebSocket));
173-
connection.close();
174+
Awaitility.await().atMost(2, TimeUnit.SECONDS).until(() -> {
175+
connection.close();
176+
return ReflectTools.getJavaFieldValue(connection,
177+
clientWebsocketField) == null;
178+
});
174179
Assert.assertNull("Websocket connection failed", connectionError.get());
175180
}
176181

0 commit comments

Comments
 (0)