Skip to content

Commit 02f2035

Browse files
committed
Convert negative status code to zero
https://codereview.appspot.com/9727043/
1 parent 4896888 commit 02f2035

File tree

4 files changed

+43
-5
lines changed

4 files changed

+43
-5
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public final class HttpResponse {
123123
this.response = response;
124124
contentEncoding = response.getContentEncoding();
125125
int code = response.getStatusCode();
126-
statusCode = code;
126+
statusCode = code < 0 ? 0 : code;
127127
String message = response.getReasonPhrase();
128128
statusMessage = message;
129129
Logger logger = HttpTransport.LOGGER;
@@ -136,7 +136,7 @@ public final class HttpResponse {
136136
if (statusLine != null) {
137137
logbuf.append(statusLine);
138138
} else {
139-
logbuf.append(code);
139+
logbuf.append(statusCode);
140140
if (message != null) {
141141
logbuf.append(' ').append(message);
142142
}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,14 @@ public abstract class LowLevelHttpResponse {
5454
/** Returns the response status line or {@code null} for none. */
5555
public abstract String getStatusLine() throws IOException;
5656

57-
/** Returns the response status code or {@code 0} for none. */
57+
/**
58+
* Returns the response status code or {@code <=0} for none.
59+
*
60+
* <p>
61+
* Upgrade warning: in prior version 1.14 it could not return a negative number, but starting with
62+
* version 1.15 it may.
63+
* </p>
64+
*/
5865
public abstract int getStatusCode() throws IOException;
5966

6067
/** Returns the HTTP reason phrase or {@code null} for none. */

google-http-client/src/main/java/com/google/api/client/testing/http/MockLowLevelHttpResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ public int getStatusCode() {
147147

148148
@Override
149149
public String getStatusLine() {
150-
StringBuilder buf = new StringBuilder(statusCode);
150+
StringBuilder buf = new StringBuilder();
151+
buf.append(statusCode);
151152
if (reasonPhrase != null) {
152153
buf.append(reasonPhrase);
153154
}
@@ -256,7 +257,6 @@ public MockLowLevelHttpResponse setContentLength(long contentLength) {
256257
*/
257258
public MockLowLevelHttpResponse setStatusCode(int statusCode) {
258259
this.statusCode = statusCode;
259-
Preconditions.checkArgument(statusCode >= 0);
260260
return this;
261261
}
262262

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,37 @@ public LowLevelHttpResponse execute() throws IOException {
9898
assertEquals(SAMPLE2, response.parseAsString());
9999
}
100100

101+
public void testStatusCode_negative_dontThrowException() throws Exception {
102+
subtestStatusCode_negative(false);
103+
}
104+
105+
public void testStatusCode_negative_throwException() throws Exception {
106+
subtestStatusCode_negative(true);
107+
}
108+
109+
private void subtestStatusCode_negative(boolean throwExceptionOnExecuteError) throws Exception {
110+
HttpTransport transport = new MockHttpTransport() {
111+
@Override
112+
public LowLevelHttpRequest buildRequest(String method, String url) throws IOException {
113+
return new MockLowLevelHttpRequest().setResponse(
114+
new MockLowLevelHttpResponse().setStatusCode(-1));
115+
}
116+
};
117+
HttpRequest request =
118+
transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL);
119+
request.setThrowExceptionOnExecuteError(throwExceptionOnExecuteError);
120+
try {
121+
// HttpResponse converts a negative status code to zero
122+
HttpResponse response = request.execute();
123+
assertEquals(0, response.getStatusCode());
124+
assertFalse(throwExceptionOnExecuteError);
125+
} catch (HttpResponseException e) {
126+
// exception should be thrown only if throwExceptionOnExecuteError is true
127+
assertTrue(throwExceptionOnExecuteError);
128+
assertEquals(0, e.getStatusCode());
129+
}
130+
}
131+
101132
public static class MyHeaders extends HttpHeaders {
102133

103134
@Key

0 commit comments

Comments
 (0)