Skip to content

Commit 458c986

Browse files
author
Amir Tocker
committed
Add timeout, connect_timeout and connection_request_timeout to HTTP43 Api.
1 parent 41a913f commit 458c986

File tree

5 files changed

+115
-17
lines changed

5 files changed

+115
-17
lines changed

cloudinary-http43/src/main/java/com/cloudinary/http43/ApiStrategy.java

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
import java.util.List;
3434
import java.util.Map;
3535

36+
import static com.cloudinary.http43.ApiUtils.prepareParams;
37+
import static com.cloudinary.http43.ApiUtils.setTimeouts;
38+
3639
public class ApiStrategy extends com.cloudinary.strategies.AbstractApiStrategy {
3740

3841
private CloseableHttpClient client = null;
@@ -85,7 +88,7 @@ public ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String,
8588
for (String component : uri) {
8689
apiUrl = apiUrl + "/" + component;
8790
}
88-
HttpUriRequest request = prepareRequest(method, apiUrl, params);
91+
HttpUriRequest request = prepareRequest(method, apiUrl, params, options);
8992

9093
request.setHeader("Authorization", "Basic " + Base64Coder.encodeString(apiKey + ":" + apiSecret));
9194

@@ -131,11 +134,11 @@ public ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String,
131134
* @throws URISyntaxException
132135
* @throws UnsupportedEncodingException
133136
*/
134-
private HttpUriRequest prepareRequest(HttpMethod method, String apiUrl, Map<String, ?> params) throws URISyntaxException, UnsupportedEncodingException {
137+
private HttpUriRequest prepareRequest(HttpMethod method, String apiUrl, Map<String, ?> params, Map options) throws URISyntaxException, UnsupportedEncodingException {
135138
URI apiUri;
136139
URIBuilder apiUrlBuilder = new URIBuilder(apiUrl);
137140
List<NameValuePair> parameters;
138-
HttpUriRequest request;
141+
HttpRequestBase request;
139142
parameters = prepareParams(params);
140143
if(method == HttpMethod.GET) {
141144
apiUrlBuilder.setParameters(parameters);
@@ -158,22 +161,10 @@ private HttpUriRequest prepareRequest(HttpMethod method, String apiUrl, Map<Stri
158161
}
159162
((HttpEntityEnclosingRequestBase) request).setEntity(new UrlEncodedFormEntity(parameters));
160163
}
164+
165+
setTimeouts(request, options);
161166
return request;
162167
}
163168

164-
private List<NameValuePair> prepareParams(Map<String, ?> params) {
165-
List<NameValuePair> requestParams = new ArrayList<NameValuePair>(params.size());
166-
for (Map.Entry<String, ?> param : params.entrySet()) {
167-
if (param.getValue() instanceof Iterable) {
168-
for (Object single : (Iterable<?>) param.getValue()) {
169-
requestParams.add(new BasicNameValuePair(param.getKey() + "[]", ObjectUtils.asString(single)));
170-
}
171-
} else {
172-
requestParams.add(new BasicNameValuePair(param.getKey(), ObjectUtils.asString(param.getValue())));
173-
}
174-
}
175-
176169

177-
return requestParams;
178-
}
179170
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.cloudinary.http43;
2+
3+
import com.cloudinary.utils.ObjectUtils;
4+
import org.apache.http.NameValuePair;
5+
import org.apache.http.client.config.RequestConfig;
6+
import org.apache.http.client.methods.HttpRequestBase;
7+
import org.apache.http.message.BasicNameValuePair;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
import java.util.Map;
12+
13+
public class ApiUtils {
14+
15+
public static void setTimeouts(HttpRequestBase request, Map options) {
16+
RequestConfig config= request.getConfig();
17+
final RequestConfig.Builder builder;
18+
if (config != null) {
19+
builder = RequestConfig.copy(config);
20+
} else {
21+
builder = RequestConfig.custom();
22+
}
23+
Integer timeout = (Integer) options.get("timeout");
24+
if(timeout != null) {
25+
builder.setSocketTimeout(timeout);
26+
}
27+
Integer connectionRequestTimeout = (Integer) options.get("connection_request_timeout");
28+
if(connectionRequestTimeout != null) {
29+
builder.setConnectionRequestTimeout(connectionRequestTimeout);
30+
}
31+
Integer connectTimeout = (Integer) options.get("connect_timeout");
32+
if(connectTimeout != null) {
33+
builder.setConnectTimeout(connectTimeout);
34+
}
35+
request.setConfig(builder.build());
36+
}
37+
38+
static List<NameValuePair> prepareParams(Map<String, ?> params) {
39+
List<NameValuePair> requestParams = new ArrayList<NameValuePair>(params.size());
40+
for (Map.Entry<String, ?> param : params.entrySet()) {
41+
if (param.getValue() instanceof Iterable) {
42+
for (Object single : (Iterable<?>) param.getValue()) {
43+
requestParams.add(new BasicNameValuePair(param.getKey() + "[]", ObjectUtils.asString(single)));
44+
}
45+
} else {
46+
requestParams.add(new BasicNameValuePair(param.getKey(), ObjectUtils.asString(param.getValue())));
47+
}
48+
}
49+
50+
51+
return requestParams;
52+
}
53+
}

cloudinary-http43/src/main/java/com/cloudinary/http43/UploaderStrategy.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ public Map callApi(String action, Map<String, Object> params, Map options, Objec
7171
String apiUrl = uploader.cloudinary().cloudinaryApiUrl(action, options);
7272

7373
HttpPost postMethod = new HttpPost(apiUrl);
74+
ApiUtils.setTimeouts(postMethod, options);
7475

7576
Map<String, String> extraHeaders = (Map<String, String>) options.get("extra_headers");
7677
if (extraHeaders != null) {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,31 @@
11
package com.cloudinary.test;
22

3+
import com.cloudinary.api.ApiResponse;
4+
import com.cloudinary.utils.ObjectUtils;
5+
import org.apache.http.conn.ConnectTimeoutException;
6+
import org.junit.Test;
7+
8+
import java.net.SocketTimeoutException;
9+
import java.util.Map;
10+
311
public class ApiTest extends AbstractApiTest {
12+
13+
@Test(expected = ConnectTimeoutException.class)
14+
public void testConnectTimeoutParameter() throws Exception {
15+
// should allow listing resources
16+
Map options = ObjectUtils.asMap(
17+
"max_results", 500,
18+
"connect_timeout", 1);
19+
ApiResponse result = cloudinary.api().resources(options);
20+
}
21+
22+
@Test(expected = SocketTimeoutException.class)
23+
public void testTimeoutParameter() throws Exception {
24+
// should allow listing resources
25+
Map options = ObjectUtils.asMap(
26+
"max_results", 500,
27+
"timeout", 1);
28+
ApiResponse result = cloudinary.api().resources(options);
29+
}
30+
431
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,31 @@
11
package com.cloudinary.test;
22

3+
import com.cloudinary.api.ApiResponse;
4+
import com.cloudinary.utils.ObjectUtils;
5+
import org.apache.http.conn.ConnectTimeoutException;
6+
import org.junit.Test;
7+
8+
import java.net.SocketTimeoutException;
9+
import java.util.Map;
10+
311
public class UploaderTest extends AbstractUploaderTest {
412

13+
@Test(expected = ConnectTimeoutException.class)
14+
public void testConnectTimeoutParameter() throws Exception {
15+
// should allow listing resources
16+
Map options = ObjectUtils.asMap(
17+
"max_results", 500,
18+
"connect_timeout", 1);
19+
ApiResponse result = cloudinary.api().resources(options);
20+
}
21+
22+
@Test(expected = SocketTimeoutException.class)
23+
public void testTimeoutParameter() throws Exception {
24+
// should allow listing resources
25+
Map options = ObjectUtils.asMap(
26+
"max_results", 500,
27+
"timeout", 1);
28+
ApiResponse result = cloudinary.api().resources(options);
29+
}
30+
531
}

0 commit comments

Comments
 (0)