Skip to content

Commit a7ba61b

Browse files
omacrangerLogan Graham
and
Logan Graham
authored
Add requestConfig option for adjusting proxy / timeout settings in SDK (#224)
Co-authored-by: Logan Graham <[email protected]>
1 parent d30aa69 commit a7ba61b

File tree

2 files changed

+64
-3
lines changed

2 files changed

+64
-3
lines changed

visual-java/src/main/java/com/saucelabs/visual/VisualApi.java

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.time.Duration;
1919
import java.util.*;
2020
import java.util.stream.Collectors;
21+
import org.apache.http.client.config.RequestConfig;
2122
import org.openqa.selenium.By;
2223
import org.openqa.selenium.WebElement;
2324
import org.openqa.selenium.remote.RemoteWebDriver;
@@ -47,6 +48,7 @@ public static class Builder {
4748
private Boolean hideScrollBars;
4849
private DiffingMethodSensitivity diffingMethodSensitivity;
4950
private DiffingMethodTolerance diffingMethodTolerance;
51+
private RequestConfig requestConfig;
5052

5153
public Builder(RemoteWebDriver driver, String username, String accessKey) {
5254
this(driver, username, accessKey, resolveEndpoint());
@@ -108,14 +110,20 @@ public Builder withDiffingMethodTolerance(DiffingMethodTolerance diffingMethodTo
108110
return this;
109111
}
110112

113+
public Builder withRequestConfig(RequestConfig requestConfig) {
114+
this.requestConfig = requestConfig;
115+
return this;
116+
}
117+
111118
public VisualApi build() {
112119
VisualApi api =
113120
new VisualApi(
114121
driver,
115122
endpoint,
116123
username,
117124
accessKey,
118-
new BuildAttributes(buildName, projectName, branchName, defaultBranchName));
125+
new BuildAttributes(buildName, projectName, branchName, defaultBranchName),
126+
requestConfig);
119127

120128
if (this.captureDom != null) {
121129
api.setCaptureDom(this.captureDom);
@@ -201,6 +209,27 @@ public VisualApi(
201209
String username,
202210
String accessKey,
203211
BuildAttributes buildAttributes) {
212+
this(driver, url, username, accessKey, buildAttributes, null);
213+
}
214+
215+
/**
216+
* Creates a VisualApi instance with a custom backend URL
217+
*
218+
* @param driver The {@link org.openqa.selenium.WebDriver} instance where the tests should run
219+
* with
220+
* @param url Visual Backend URL
221+
* @param username SauceLabs username
222+
* @param accessKey SauceLabs access key
223+
* @param buildAttributes like buildName, project, branch
224+
* @param requestConfig RequestConfig object to override proxy / request settings for the client.
225+
*/
226+
public VisualApi(
227+
RemoteWebDriver driver,
228+
String url,
229+
String username,
230+
String accessKey,
231+
BuildAttributes buildAttributes,
232+
RequestConfig requestConfig) {
204233
if (username == null
205234
|| accessKey == null
206235
|| username.trim().isEmpty()
@@ -209,7 +238,7 @@ public VisualApi(
209238
"Invalid SauceLabs credentials. "
210239
+ "Please check your SauceLabs username and access key at https://app.saucelabs.com/user-settings");
211240
}
212-
this.client = new GraphQLClient(url, username, accessKey);
241+
this.client = new GraphQLClient(url, username, accessKey, requestConfig);
213242
this.sessionId = driver.getSessionId().toString();
214243
String jobIdString = (String) driver.getCapabilities().getCapability("jobUuid");
215244
this.jobId = jobIdString == null ? sessionId : jobIdString;
@@ -226,6 +255,18 @@ public VisualApi(
226255
String url,
227256
String username,
228257
String accessKey) {
258+
this(jobId, driver, build, sessionMetadataBlob, url, username, accessKey, null);
259+
}
260+
261+
VisualApi(
262+
String jobId,
263+
RemoteWebDriver driver,
264+
VisualBuild build,
265+
String sessionMetadataBlob,
266+
String url,
267+
String username,
268+
String accessKey,
269+
RequestConfig requestConfig) {
229270
if (username == null
230271
|| accessKey == null
231272
|| username.trim().isEmpty()
@@ -238,7 +279,7 @@ public VisualApi(
238279
this.jobId = jobId;
239280
this.sessionId = driver.getSessionId().toString();
240281
this.driver = driver;
241-
this.client = new GraphQLClient(url, username, accessKey);
282+
this.client = new GraphQLClient(url, username, accessKey, requestConfig);
242283
this.sessionMetadataBlob = sessionMetadataBlob;
243284
}
244285

visual-java/src/main/java/com/saucelabs/visual/graphql/GraphQLClient.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.apache.http.HttpHeaders;
1313
import org.apache.http.HttpResponse;
1414
import org.apache.http.client.HttpClient;
15+
import org.apache.http.client.config.RequestConfig;
1516
import org.apache.http.client.methods.HttpPost;
1617
import org.apache.http.entity.StringEntity;
1718
import org.apache.http.impl.client.HttpClients;
@@ -24,12 +25,26 @@ public class GraphQLClient {
2425
private final String authentication;
2526

2627
private final ObjectMapper objectMapper;
28+
private RequestConfig requestConfig = RequestConfig.DEFAULT;
2729

2830
public GraphQLClient(String uri, String username, String accessKey) {
2931
this(HttpClients.createSystem(), uri, username, accessKey);
3032
}
3133

34+
public GraphQLClient(String uri, String username, String accessKey, RequestConfig requestConfig) {
35+
this(HttpClients.createSystem(), uri, username, accessKey, requestConfig);
36+
}
37+
3238
public GraphQLClient(HttpClient client, String uri, String username, String accessKey) {
39+
this(client, uri, username, accessKey, null);
40+
}
41+
42+
public GraphQLClient(
43+
HttpClient client,
44+
String uri,
45+
String username,
46+
String accessKey,
47+
RequestConfig requestConfig) {
3348
this.client = client;
3449
this.uri = uri;
3550
this.authentication =
@@ -39,6 +54,10 @@ public GraphQLClient(HttpClient client, String uri, String username, String acce
3954
objectMapper.registerModule(new Jdk8Module());
4055
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
4156

57+
if (requestConfig != null) {
58+
this.requestConfig = requestConfig;
59+
}
60+
4261
this.objectMapper = objectMapper;
4362
}
4463

@@ -52,6 +71,7 @@ public <D> D execute(GraphQLOperation operation, Class<D> responseType)
5271
request.setHeader(
5372
HttpHeaders.USER_AGENT,
5473
"sauce-visual-java/" + ArtifactVersion.getArtifactVersion().orElse("unknown"));
74+
request.setConfig(requestConfig);
5575

5676
String requestBody = this.objectMapper.writeValueAsString(operation);
5777
request.setEntity(new StringEntity(requestBody));

0 commit comments

Comments
 (0)