Skip to content

Commit 55abfe7

Browse files
CSchulzhenryju
authored andcommitted
SCANNERAPI-182 change read timeout to be configurable (#60)
1 parent 7cf88f9 commit 55abfe7

2 files changed

Lines changed: 36 additions & 2 deletions

File tree

api/src/main/java/org/sonarsource/scanner/api/internal/OkHttpClientFactory.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@
4646

4747
public class OkHttpClientFactory {
4848

49+
static final String READ_TIMEOUT_SEC_PROPERTY = "sonar.ws.timeout";
4950
static final int CONNECT_TIMEOUT_MILLISECONDS = 5_000;
50-
static final int READ_TIMEOUT_MILLISECONDS = 500_000;
51+
static final int DEFAULT_READ_TIMEOUT_MILLISECONDS = 500_000;
5152
static final String NONE = "NONE";
5253
static final String P11KEYSTORE = "PKCS11";
5354
private static final String PROXY_AUTHORIZATION = "Proxy-Authorization";
@@ -59,8 +60,13 @@ private OkHttpClientFactory() {
5960
static OkHttpClient create(Logger logger) {
6061
OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder();
6162

63+
int readTimeout = DEFAULT_READ_TIMEOUT_MILLISECONDS;
64+
if (!System.getProperty(READ_TIMEOUT_SEC_PROPERTY, "").isEmpty()) {
65+
readTimeout = Integer.parseInt(System.getProperty(READ_TIMEOUT_SEC_PROPERTY));
66+
}
67+
6268
okHttpClientBuilder.connectTimeout(CONNECT_TIMEOUT_MILLISECONDS, TimeUnit.MILLISECONDS);
63-
okHttpClientBuilder.readTimeout(READ_TIMEOUT_MILLISECONDS, TimeUnit.MILLISECONDS);
69+
okHttpClientBuilder.readTimeout(readTimeout, TimeUnit.MILLISECONDS);
6470

6571
ConnectionSpec tls = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
6672
.allEnabledTlsVersions()

api/src/test/java/org/sonarsource/scanner/api/internal/OkHttpClientFactoryTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import okhttp3.mockwebserver.MockResponse;
4141
import okhttp3.mockwebserver.MockWebServer;
4242
import okhttp3.mockwebserver.RecordedRequest;
43+
44+
import org.junit.After;
4345
import org.junit.Rule;
4446
import org.junit.Test;
4547
import org.junit.experimental.theories.DataPoint;
@@ -51,6 +53,7 @@
5153

5254
import static java.lang.String.format;
5355
import static org.assertj.core.api.Assertions.assertThat;
56+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
5457
import static org.assertj.core.api.Assertions.fail;
5558
import static org.mockito.Mockito.mock;
5659

@@ -65,10 +68,16 @@ public class OkHttpClientFactoryTest {
6568
private static final String KEYSTORE_PASSWORD = "abcdef";
6669
private static final String KEYSTORE_FILE = "/server.jks";
6770
private static final Logger logger = mock(Logger.class);
71+
private static final String SONAR_WS_TIMEOUT = "sonar.ws.timeout";
6872

6973
@Rule
7074
public ExpectedException expectedException = ExpectedException.none();
7175

76+
@After
77+
public void cleanSystemProperty() {
78+
System.clearProperty(SONAR_WS_TIMEOUT);
79+
}
80+
7281
@Test
7382
public void support_tls_versions_of_java8() {
7483
OkHttpClient underTest = OkHttpClientFactory.create(logger);
@@ -77,6 +86,25 @@ public void support_tls_versions_of_java8() {
7786
assertThat(underTest.sslSocketFactory()).isInstanceOf(SSLSocketFactory.getDefault().getClass());
7887
}
7988

89+
@Test
90+
public void support_custom_timeouts() {
91+
int readTimeout = 2000;
92+
System.setProperty(SONAR_WS_TIMEOUT, String.valueOf(readTimeout));
93+
94+
Logger logger = mock(Logger.class);
95+
OkHttpClient underTest = OkHttpClientFactory.create(logger);
96+
97+
assertThat(underTest.readTimeoutMillis()).isEqualTo(readTimeout);
98+
}
99+
100+
@Test
101+
public void support_custom_timeouts_throws_exception_on_non_number() {
102+
System.setProperty(SONAR_WS_TIMEOUT, "fail");
103+
104+
Logger logger = mock(Logger.class);
105+
assertThatThrownBy(() -> OkHttpClientFactory.create(logger)).isInstanceOf(NumberFormatException.class);
106+
}
107+
80108
private void assertTlsAndClearTextSpecifications(OkHttpClient client) {
81109
List<ConnectionSpec> connectionSpecs = client.connectionSpecs();
82110
assertThat(connectionSpecs).hasSize(2);

0 commit comments

Comments
 (0)