|
30 | 30 | import org.junit.jupiter.api.Assertions;
|
31 | 31 | import org.junit.jupiter.api.BeforeEach;
|
32 | 32 | import org.junit.jupiter.api.Test;
|
| 33 | +import org.openqa.selenium.Capabilities; |
| 34 | +import org.openqa.selenium.HasCapabilities; |
33 | 35 | import org.openqa.selenium.SessionNotCreatedException;
|
34 | 36 | import org.openqa.selenium.WebDriver;
|
| 37 | +import org.openqa.selenium.bidi.BiDi; |
| 38 | +import org.openqa.selenium.bidi.BiDiProvider; |
35 | 39 | import org.openqa.selenium.grid.config.MapConfig;
|
36 | 40 | import org.openqa.selenium.grid.config.MemoizedConfig;
|
37 | 41 | import org.openqa.selenium.grid.config.TomlConfig;
|
|
43 | 47 | import org.openqa.selenium.netty.server.NettyServer;
|
44 | 48 | import org.openqa.selenium.remote.RemoteWebDriver;
|
45 | 49 | import org.openqa.selenium.remote.http.ClientConfig;
|
| 50 | +import org.openqa.selenium.remote.http.ConnectionFailedException; |
46 | 51 | import org.openqa.selenium.remote.http.Contents;
|
47 | 52 | import org.openqa.selenium.remote.http.HttpClient;
|
48 | 53 | import org.openqa.selenium.remote.http.HttpMethod;
|
@@ -76,7 +81,9 @@ public void setupServers() {
|
76 | 81 | + "\n"
|
77 | 82 | + "override-max-sessions = true"
|
78 | 83 | + "\n"
|
79 |
| - + "max-sessions = 2"))); |
| 84 | + + "max-sessions = 2" |
| 85 | + + "\n" |
| 86 | + + "connection-limit-per-session = 3"))); |
80 | 87 | tearDowns.add(deployment);
|
81 | 88 |
|
82 | 89 | server = deployment.getServer();
|
@@ -192,4 +199,46 @@ void clientTimeoutDoesNotLeakARunningBrowser() throws Exception {
|
192 | 199 | Safely.safelyCall(healthy::quit);
|
193 | 200 | }
|
194 | 201 | }
|
| 202 | + |
| 203 | + @Test |
| 204 | + void connectionLimitIsRespected() throws Exception { |
| 205 | + assertThat(server.isStarted()).isTrue(); |
| 206 | + |
| 207 | + // don't use the RemoteWebDriver.builder here, using it does create an unknown number of |
| 208 | + // connections |
| 209 | + WebDriver driver = new RemoteWebDriver(server.getUrl(), browser.getCapabilities()); |
| 210 | + |
| 211 | + try { |
| 212 | + Capabilities caps = ((HasCapabilities) driver).getCapabilities(); |
| 213 | + BiDiProvider biDiProvider = new BiDiProvider(); |
| 214 | + |
| 215 | + BiDi cnn1 = biDiProvider.getImplementation(caps, null).getBiDi(); |
| 216 | + BiDi cnn2 = biDiProvider.getImplementation(caps, null).getBiDi(); |
| 217 | + BiDi cnn3 = biDiProvider.getImplementation(caps, null).getBiDi(); |
| 218 | + |
| 219 | + Assertions.assertThrows( |
| 220 | + ConnectionFailedException.class, |
| 221 | + () -> biDiProvider.getImplementation(caps, null).getBiDi()); |
| 222 | + cnn1.close(); |
| 223 | + BiDi cnn4 = biDiProvider.getImplementation(caps, null).getBiDi(); |
| 224 | + |
| 225 | + Assertions.assertThrows( |
| 226 | + ConnectionFailedException.class, |
| 227 | + () -> biDiProvider.getImplementation(caps, null).getBiDi()); |
| 228 | + cnn2.close(); |
| 229 | + cnn3.close(); |
| 230 | + BiDi cnn5 = biDiProvider.getImplementation(caps, null).getBiDi(); |
| 231 | + BiDi cnn6 = biDiProvider.getImplementation(caps, null).getBiDi(); |
| 232 | + |
| 233 | + Assertions.assertThrows( |
| 234 | + ConnectionFailedException.class, |
| 235 | + () -> biDiProvider.getImplementation(caps, null).getBiDi()); |
| 236 | + |
| 237 | + cnn4.close(); |
| 238 | + cnn5.close(); |
| 239 | + cnn6.close(); |
| 240 | + } finally { |
| 241 | + Safely.safelyCall(driver::quit); |
| 242 | + } |
| 243 | + } |
195 | 244 | }
|
0 commit comments