Skip to content

Commit ab53929

Browse files
committed
[Issue 119] User-agent repeatedly added on retry.
http://codereview.appspot.com/6215076/
1 parent 5ad65bb commit ab53929

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

google-http-client/src/main/java/com/google/api/client/http/HttpRequest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -782,13 +782,16 @@ public HttpResponse execute() throws IOException {
782782
logbuf.append(method).append(' ').append(urlString).append(StringUtils.LINE_SEPARATOR);
783783
}
784784
// add to user agent
785-
if (headers.getUserAgent() == null) {
785+
String originalUserAgent = headers.getUserAgent();
786+
if (originalUserAgent == null) {
786787
headers.setUserAgent(USER_AGENT_SUFFIX);
787788
} else {
788-
headers.setUserAgent(headers.getUserAgent() + " " + USER_AGENT_SUFFIX);
789+
headers.setUserAgent(originalUserAgent + " " + USER_AGENT_SUFFIX);
789790
}
790791
// headers
791792
HttpHeaders.serializeHeaders(headers, logbuf, logger, lowLevelHttpRequest);
793+
// set the original user agent back to the headers so that retries do not keep appending to it
794+
headers.setUserAgent(originalUserAgent);
792795

793796
// content
794797
HttpContent content = this.content;

google-http-client/src/test/java/com/google/api/client/http/HttpRequestTest.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.google.api.client.util.Value;
2525
import com.google.common.collect.ImmutableList;
2626
import com.google.common.collect.ImmutableSet;
27+
import com.google.common.collect.Lists;
2728

2829
import junit.framework.Assert;
2930
import junit.framework.TestCase;
@@ -314,17 +315,20 @@ static private class FailThenSuccessConnectionErrorTransport extends MockHttpTra
314315

315316
public int lowLevelExecCalls;
316317
int callsBeforeSuccess;
318+
List<String> userAgentHeader = Lists.newArrayList();
317319

318320
protected FailThenSuccessConnectionErrorTransport(int callsBeforeSuccess) {
319321
this.callsBeforeSuccess = callsBeforeSuccess;
320322
}
321323

322-
public LowLevelHttpRequest retryableGetRequest = new MockLowLevelHttpRequest() {
324+
public MockLowLevelHttpRequest retryableGetRequest = new MockLowLevelHttpRequest() {
323325

324326
@Override
325327
public LowLevelHttpResponse execute() throws IOException {
326328
lowLevelExecCalls++;
327329

330+
userAgentHeader = getHeaders().get("User-Agent");
331+
328332
if (lowLevelExecCalls <= callsBeforeSuccess) {
329333
throw new IOException();
330334
}
@@ -337,6 +341,7 @@ public LowLevelHttpResponse execute() throws IOException {
337341

338342
@Override
339343
public LowLevelHttpRequest buildGetRequest(String url) {
344+
retryableGetRequest.getHeaders().clear();
340345
return retryableGetRequest;
341346
}
342347
}
@@ -389,6 +394,22 @@ public void testExecuteErrorWithRetryDisabled() throws IOException {
389394
Assert.assertEquals(1, fakeTransport.lowLevelExecCalls);
390395
}
391396

397+
public void testUserAgentWithExecuteErrorAndRetryEnabled() throws IOException {
398+
int callsBeforeSuccess = 3;
399+
FailThenSuccessConnectionErrorTransport fakeTransport =
400+
new FailThenSuccessConnectionErrorTransport(callsBeforeSuccess);
401+
HttpRequest req =
402+
fakeTransport.createRequestFactory().buildGetRequest(new GenericUrl("http://not/used"));
403+
req.setRetryOnExecuteIOException(true);
404+
req.setNumberOfRetries(callsBeforeSuccess + 1);
405+
HttpResponse resp = req.execute();
406+
407+
Assert.assertEquals(1, fakeTransport.userAgentHeader.size());
408+
Assert.assertEquals(HttpRequest.USER_AGENT_SUFFIX, fakeTransport.userAgentHeader.get(0));
409+
Assert.assertEquals(200, resp.getStatusCode());
410+
Assert.assertEquals(4, fakeTransport.lowLevelExecCalls);
411+
}
412+
392413
public void testAbnormalResponseHandlerWithNoBackOff() throws IOException {
393414
FailThenSuccessBackoffTransport fakeTransport =
394415
new FailThenSuccessBackoffTransport(HttpStatusCodes.STATUS_CODE_UNAUTHORIZED, 1);

0 commit comments

Comments
 (0)