/*
* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.api.client.http.javanet;
import com.google.api.client.testing.http.javanet.MockHttpURLConnection;
import com.google.api.client.util.StringUtils;
import junit.framework.TestCase;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
/**
* Tests {@link NetHttpResponse}.
*
* @author Yaniv Inbar
*/
public class NetHttpResponseTest extends TestCase {
private static final String VALID_RESPONSE = "This is a valid response.";
private static final String ERROR_RESPONSE = "This is an error response.";
public void testGetStatusCode() throws IOException {
subtestGetStatusCode(0, -1);
subtestGetStatusCode(200, 200);
subtestGetStatusCode(404, 404);
}
public void subtestGetStatusCode(int expectedCode, int responseCode) throws IOException {
assertEquals(expectedCode, new NetHttpResponse(
new MockHttpURLConnection(null).setResponseCode(responseCode)).getStatusCode());
}
public void testGetContent() throws IOException {
subtestGetContent(0);
subtestGetContent(200);
subtestGetContent(304);
subtestGetContent(307);
subtestGetContent(404);
subtestGetContent(503);
subtestGetContentWithShortRead(0);
subtestGetContentWithShortRead(200);
subtestGetContentWithShortRead(304);
subtestGetContentWithShortRead(307);
subtestGetContentWithShortRead(404);
subtestGetContentWithShortRead(503);
}
public void subtestGetContent(int responseCode) throws IOException {
NetHttpResponse response =
new NetHttpResponse(new MockHttpURLConnection(null).setResponseCode(responseCode)
.setInputStream(new ByteArrayInputStream(StringUtils.getBytesUtf8(VALID_RESPONSE)))
.setErrorStream(new ByteArrayInputStream(StringUtils.getBytesUtf8(ERROR_RESPONSE))));
InputStream is = response.getContent();
byte[] buf = new byte[100];
int bytes = 0, n = 0;
while ((n = is.read(buf)) != -1) {
bytes += n;
}
if (responseCode < 400) {
assertEquals(VALID_RESPONSE, new String(buf, 0, bytes, Charset.forName("UTF-8")));
} else {
assertEquals(ERROR_RESPONSE, new String(buf, 0, bytes, Charset.forName("UTF-8")));
}
}
public void subtestGetContentWithShortRead(int responseCode) throws IOException {
NetHttpResponse response =
new NetHttpResponse(new MockHttpURLConnection(null).setResponseCode(responseCode)
.setInputStream(new ByteArrayInputStream(StringUtils.getBytesUtf8(VALID_RESPONSE)))
.setErrorStream(new ByteArrayInputStream(StringUtils.getBytesUtf8(ERROR_RESPONSE))));
InputStream is = response.getContent();
byte[] buf = new byte[100];
int bytes = 0, b = 0;
while ((b = is.read()) != -1) {
buf[bytes++] = (byte) b;
}
if (responseCode < 400) {
assertEquals(VALID_RESPONSE, new String(buf, 0, bytes, Charset.forName("UTF-8")));
} else {
assertEquals(ERROR_RESPONSE, new String(buf, 0, bytes, Charset.forName("UTF-8")));
}
}
}