Skip to content

Commit 2236505

Browse files
committed
Implement retry behavior within WebPage#get call
1 parent 5a000f9 commit 2236505

File tree

8 files changed

+146
-2
lines changed
  • dev
    • com.ibm.ws.jsf.2.2_fat.2/fat/src/com/ibm/ws/jsf22/fat
    • com.ibm.ws.jsf.2.2_fat/fat/src/com/ibm/ws/jsf22/fat
    • com.ibm.ws.jsf.2.3_fat.2/fat/src/com/ibm/ws/jsf23/fat
    • com.ibm.ws.jsf.2.3_fat/fat/src/com/ibm/ws/jsf23/fat
    • com.ibm.ws.jsfContainer_fat_2.3/fat/src/com/ibm/ws/jsf/container/fat
    • io.openliberty.faces.fat.selenium.util.internal/src/io/openliberty/faces/fat/selenium/util/internal
    • io.openliberty.org.apache.myfaces.4.0_fat/fat/src/io/openliberty/org/apache/myfaces40/fat

8 files changed

+146
-2
lines changed

dev/com.ibm.ws.jsf.2.2_fat.2/fat/src/com/ibm/ws/jsf22/fat/FATSuite.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import componenttest.rules.repeater.RepeatTests;
4545
import io.openliberty.faces.fat.selenium.util.internal.CustomDriver;
4646
import io.openliberty.faces.fat.selenium.util.internal.ExtendedWebDriver;
47+
import io.openliberty.faces.fat.selenium.util.internal.WebPage;
4748

4849
/**
4950
* JSF 2.2 Tests
@@ -122,6 +123,22 @@ public static ExtendedWebDriver getWebDriver() throws Exception {
122123
if(DRIVER == null) {
123124
throw new Exception("Failed to initialize WebDriver after multiple attempts! See log for details.");
124125
}
126+
127+
// Register the driver reset callback statically for the WebPage to use if exceptions occur.
128+
WebPage.setDriverResetCallback(() -> {
129+
Log.info(c, "DriverResetCallback", "Resetting WebDriver due to some error. See log for details");
130+
if (DRIVER != null) {
131+
try {
132+
DRIVER.quit();
133+
} catch (Exception e) {
134+
// no-op
135+
}
136+
DRIVER = null;
137+
}
138+
DRIVER = getWebDriver();
139+
return DRIVER;
140+
});
141+
125142
return DRIVER;
126143
}
127144

dev/com.ibm.ws.jsf.2.2_fat/fat/src/com/ibm/ws/jsf22/fat/FATSuite.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747
import componenttest.rules.repeater.RepeatTests;
4848
import io.openliberty.faces.fat.selenium.util.internal.CustomDriver;
4949
import io.openliberty.faces.fat.selenium.util.internal.ExtendedWebDriver;
50+
import io.openliberty.faces.fat.selenium.util.internal.WebPage;
51+
5052
/**
5153
* JSF 2.2 Tests
5254
*
@@ -133,6 +135,22 @@ public static ExtendedWebDriver getWebDriver() throws Exception {
133135
if(DRIVER == null) {
134136
throw new Exception("Failed to initialize WebDriver after multiple attempts! See log for details.");
135137
}
138+
139+
// Register the driver reset callback statically for the WebPage to use if exceptions occur.
140+
WebPage.setDriverResetCallback(() -> {
141+
Log.info(c, "DriverResetCallback", "Resetting WebDriver due to some error. See log for details");
142+
if (DRIVER != null) {
143+
try {
144+
DRIVER.quit();
145+
} catch (Exception e) {
146+
// no-op
147+
}
148+
DRIVER = null;
149+
}
150+
DRIVER = getWebDriver();
151+
return DRIVER;
152+
});
153+
136154
return DRIVER;
137155
}
138156

dev/com.ibm.ws.jsf.2.3_fat.2/fat/src/com/ibm/ws/jsf23/fat/FATSuite.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import componenttest.rules.repeater.RepeatTests;
3838
import io.openliberty.faces.fat.selenium.util.internal.CustomDriver;
3939
import io.openliberty.faces.fat.selenium.util.internal.ExtendedWebDriver;
40+
import io.openliberty.faces.fat.selenium.util.internal.WebPage;
4041

4142
/**
4243
* JSF 2.3 Tests
@@ -107,6 +108,22 @@ public static ExtendedWebDriver getWebDriver() throws Exception {
107108
if(DRIVER == null) {
108109
throw new Exception("Failed to initialize WebDriver after multiple attempts! See log for details.");
109110
}
111+
112+
// Register the driver reset callback statically for the WebPage to use if exceptions occur.
113+
WebPage.setDriverResetCallback(() -> {
114+
Log.info(c, "DriverResetCallback", "Resetting WebDriver due to some error. See log for details");
115+
if (DRIVER != null) {
116+
try {
117+
DRIVER.quit();
118+
} catch (Exception e) {
119+
// no-op
120+
}
121+
DRIVER = null;
122+
}
123+
DRIVER = getWebDriver();
124+
return DRIVER;
125+
});
126+
110127
return DRIVER;
111128
}
112129

dev/com.ibm.ws.jsf.2.3_fat/fat/src/com/ibm/ws/jsf23/fat/FATSuite.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import componenttest.rules.repeater.RepeatTests;
5050
import io.openliberty.faces.fat.selenium.util.internal.CustomDriver;
5151
import io.openliberty.faces.fat.selenium.util.internal.ExtendedWebDriver;
52+
import io.openliberty.faces.fat.selenium.util.internal.WebPage;
5253

5354
/**
5455
* JSF 2.3 Tests
@@ -139,6 +140,22 @@ public static ExtendedWebDriver getWebDriver() throws Exception {
139140
if(DRIVER == null) {
140141
throw new Exception("Failed to initialize WebDriver after multiple attempts! See log for details.");
141142
}
143+
144+
// Register the driver reset callback statically for the WebPage to use if exceptions occur.
145+
WebPage.setDriverResetCallback(() -> {
146+
Log.info(c, "DriverResetCallback", "Resetting WebDriver due to some error. See log for details");
147+
if (DRIVER != null) {
148+
try {
149+
DRIVER.quit();
150+
} catch (Exception e) {
151+
// no-op
152+
}
153+
DRIVER = null;
154+
}
155+
DRIVER = getWebDriver();
156+
return DRIVER;
157+
});
158+
142159
return DRIVER;
143160
}
144161

dev/com.ibm.ws.jsfContainer_fat_2.3/fat/src/com/ibm/ws/jsf/container/fat/FATSuite.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import componenttest.topology.impl.JavaInfo;
4646
import io.openliberty.faces.fat.selenium.util.internal.CustomDriver;
4747
import io.openliberty.faces.fat.selenium.util.internal.ExtendedWebDriver;
48+
import io.openliberty.faces.fat.selenium.util.internal.WebPage;
4849

4950
@RunWith(Suite.class)
5051
@SuiteClasses({
@@ -160,6 +161,22 @@ public static ExtendedWebDriver getWebDriver() throws Exception {
160161
if(DRIVER == null) {
161162
throw new Exception("Failed to initialize WebDriver after multiple attempts! See log for details.");
162163
}
164+
165+
// Register the driver reset callback statically for the WebPage to use if exceptions occur.
166+
WebPage.setDriverResetCallback(() -> {
167+
Log.info(c, "DriverResetCallback", "Resetting WebDriver due to some error. See log for details");
168+
if (DRIVER != null) {
169+
try {
170+
DRIVER.quit();
171+
} catch (Exception e) {
172+
// no-op
173+
}
174+
DRIVER = null;
175+
}
176+
DRIVER = getWebDriver();
177+
return DRIVER;
178+
});
179+
163180
return DRIVER;
164181
}
165182

dev/io.openliberty.faces.fat.selenium.util.internal/src/io/openliberty/faces/fat/selenium/util/internal/WebPage.java

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,23 @@ public class WebPage {
3838
public static final Duration LONG_TIMEOUT = Duration.ofMillis(16000);
3939

4040
protected ExtendedWebDriver webDriver;
41+
private static DriverResetCallback driverResetCallback = null;
42+
43+
/*
44+
* Interface to reset the driver, see setDriverResetCallback
45+
*/
46+
@FunctionalInterface
47+
public interface DriverResetCallback {
48+
ExtendedWebDriver resetDriver() throws Exception;
49+
}
50+
51+
/*
52+
* Set a callback to reset the driver
53+
* Must be called once within the FATSuite during driver initialization
54+
*/
55+
public static void setDriverResetCallback(DriverResetCallback callback) {
56+
driverResetCallback = callback;
57+
}
4158

4259
public WebPage(ExtendedWebDriver webDriver) {
4360
this.webDriver = webDriver;
@@ -52,7 +69,30 @@ public void setWebDriver(ExtendedWebDriver webDriver) {
5269
}
5370

5471
public void get(String url) {
55-
webDriver.get(url);
72+
int maxAttempts = 2;
73+
Exception lastException = null;
74+
75+
for (int attempt = 1; attempt <= maxAttempts; attempt++) {
76+
try {
77+
webDriver.get(url);
78+
return;
79+
} catch (Exception e) {
80+
lastException = e;
81+
82+
// callback exists and we have attempts left
83+
if (driverResetCallback != null && attempt < maxAttempts) {
84+
try {
85+
Thread.sleep(10000); // Wait 10 seconds before retrying if it's some network issue.
86+
webDriver = driverResetCallback.resetDriver();
87+
} catch (Exception resetEx) {
88+
// no-op, as we may have attempts left
89+
}
90+
} else if (attempt == maxAttempts) {
91+
// Last attempt failed, throw exception
92+
throw new RuntimeException("Failed to navigate to URL after " + maxAttempts + " attempts: " + url, lastException);
93+
}
94+
}
95+
}
5696
}
5797

5898
public String getTitle() {

dev/io.openliberty.org.apache.myfaces.4.0_fat/fat/src/io/openliberty/org/apache/myfaces40/fat/FATSuite.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
import io.openliberty.org.apache.myfaces40.fat.tests.bugfixes.MyFaces4628Test;
5757
import io.openliberty.org.apache.myfaces40.fat.tests.bugfixes.MyFaces4658Test;
5858

59+
import io.openliberty.faces.fat.selenium.util.internal.WebPage;
60+
5961
@RunWith(Suite.class)
6062
@SuiteClasses({
6163
AcceptInputFileTest.class,
@@ -152,6 +154,22 @@ public static ExtendedWebDriver getWebDriver() throws Exception {
152154
if(DRIVER == null) {
153155
throw new Exception("Failed to initialize WebDriver after multiple attempts! See log for details.");
154156
}
157+
158+
// Register the driver reset callback statically for the WebPage to use if exceptions occur.
159+
WebPage.setDriverResetCallback(() -> {
160+
Log.info(c, "DriverResetCallback", "Resetting WebDriver due to some error. See log for details");
161+
if (DRIVER != null) {
162+
try {
163+
DRIVER.quit();
164+
} catch (Exception e) {
165+
// no-op
166+
}
167+
DRIVER = null;
168+
}
169+
DRIVER = getWebDriver();
170+
return DRIVER;
171+
});
172+
155173
return DRIVER;
156174
}
157175

dev/io.openliberty.org.apache.myfaces.4.0_fat/fat/src/io/openliberty/org/apache/myfaces40/fat/tests/WebSocketTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public void testOnErrorWebsocket() throws Exception {
8787

8888
String contextRoot = "WebSocket";
8989

90-
String url = JSFUtils.createSeleniumURLString(server, contextRoot, "OnErrorWebSocketTest.jsf");;
90+
String url = JSFUtils.createSeleniumURLString(server, contextRoot, "OnErrorWebSocketTest.jsf");
9191
WebPage page = new WebPage(driver);
9292
page.get(url);
9393
page.waitForPageToLoad();

0 commit comments

Comments
 (0)