/*
* Copyright (C) 2014 Stefano Fornari.
* All Rights Reserved. No use, copying or distribution of this
* work may be made except in accordance with a valid license
* agreement from Stefano Fornari. This notice must be
* included on all copies, modifications and derivatives of this
* work.
*
* STEFANO FORNARI MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY
* OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
* THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, OR NON-INFRINGEMENT. STEFANO FORNARI SHALL NOT BE LIABLE FOR ANY
* DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
* THIS SOFTWARE OR ITS DERIVATIVES.
*/
package ste.web.http.message;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.StatusLine;
import static org.assertj.core.api.Assertions.fail;
import static org.assertj.core.api.BDDAssertions.then;
import org.junit.Test;
/**
* TODO: we are including code from the apache project, therefore we do not have
* here all
*/
public class BugFreeBasicStatusLine {
@Test
public void constructor() {
final StatusLine statusline = new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK");
then(statusline.getProtocolVersion()).isEqualTo(HttpVersion.HTTP_1_1);
then(statusline.getStatusCode()).isEqualTo(HttpStatus.SC_OK);
then(statusline.getReasonPhrase()).isEqualTo("OK");
}
@Test
public void constructorInvalidInput() {
try {
new BasicStatusLine(null, HttpStatus.SC_OK, "OK");
fail("missing input sanity check");
} catch (final IllegalArgumentException x) {
then(x.getMessage()).contains("protocol").contains("can not be null");
}
try {
new BasicStatusLine(HttpVersion.HTTP_1_1, -1, "OK");
fail("missing input sanity check");
} catch (final IllegalArgumentException x) {
then(x.getMessage()).contains("status").contains("can not be negative");
}
}
@Test
public void toStringValue() throws Exception {
StatusLine statusline = new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK");
then(statusline.toString()).isEqualTo("HTTP/1.1 200 OK");
statusline = new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, null);
// toString uses default formatting, hence the trailing space
then(statusline.toString()).isEqualTo("HTTP/1.1 200 ");
}
@Test
public void cloning() throws Exception {
final BasicStatusLine orig = new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK");
final BasicStatusLine clone = (BasicStatusLine) orig.clone();
then(clone.getReasonPhrase()).isEqualTo(orig.getReasonPhrase());
then(clone.getStatusCode()).isEqualTo(orig.getStatusCode());
then(clone.getProtocolVersion()).isEqualTo(orig.getProtocolVersion());
}
@Test
public void serialization() throws Exception {
final BasicStatusLine orig = new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK");
final ByteArrayOutputStream outbuffer = new ByteArrayOutputStream();
final ObjectOutputStream outstream = new ObjectOutputStream(outbuffer);
outstream.writeObject(orig);
outstream.close();
final byte[] raw = outbuffer.toByteArray();
final ByteArrayInputStream inbuffer = new ByteArrayInputStream(raw);
final ObjectInputStream instream = new ObjectInputStream(inbuffer);
final BasicStatusLine clone = (BasicStatusLine) instream.readObject();
then(clone.getReasonPhrase()).isEqualTo(orig.getReasonPhrase());
then(clone.getStatusCode()).isEqualTo(orig.getStatusCode());
then(clone.getProtocolVersion()).isEqualTo(orig.getProtocolVersion());
}
@Test
public void setStatusCodeOK() throws Exception {
final BasicStatusLine TEST =
new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK");
TEST.setStatusCode(HttpStatus.SC_BAD_REQUEST);
then(TEST.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST);
TEST.setStatusCode(HttpStatus.SC_FORBIDDEN);
then(TEST.getStatusCode()).isEqualTo(HttpStatus.SC_FORBIDDEN);
}
@Test
public void setStatusCodeKO() throws Exception {
final BasicStatusLine TEST =
new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK");
try {
TEST.setStatusCode(-1);
fail("missing input sanity check");
} catch (final IllegalArgumentException x) {
then(x.getMessage()).contains("status").contains("can not be negative");
}
}
}