/*
* Copyright 2008-2014 by Emeric Vernat
*
* This file is part of Java Melody.
*
* 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 net.bull.javamelody;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Locale;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.junit.Before;
import org.junit.Test;
/**
* Test unitaire des classes CompressionServletResponseWrapper, CompressionResponseStream
* et FilterServletOutputStream.
* @author Emeric Vernat
*/
public class TestCompressionServletResponseWrapper {
/** Check. */
@Before
public void setUp() {
Utils.initialize();
}
static class HttpResponse implements HttpServletResponse {
private final ServletOutputStream outputStream = new FilterServletOutputStream(
new ByteArrayOutputStream());
@Override
public ServletOutputStream getOutputStream() throws IOException {
return outputStream;
}
@Override
public PrintWriter getWriter() throws IOException {
return null;
}
@Override
public void addCookie(Cookie cookie) {
// rien
}
@Override
public void addDateHeader(String name, long date) {
// rien
}
@Override
public void addHeader(String name, String value) {
// rien
}
@Override
public void addIntHeader(String name, int value) {
// rien
}
@Override
public boolean containsHeader(String name) {
return false;
}
@Override
public String encodeRedirectURL(String url) {
return null;
}
/** @deprecated déprécié
* @param url String
* @return String */
@Override
@Deprecated
public String encodeRedirectUrl(String url) {
return null;
}
@Override
public String encodeURL(String url) {
return null;
}
/** @deprecated déprécié
* @param url String
* @return String */
@Override
@Deprecated
public String encodeUrl(String url) {
return null;
}
@Override
public void sendError(int sc) throws IOException {
// rien
}
@Override
public void sendError(int sc, String msg) throws IOException {
// rien
}
@Override
public void sendRedirect(String location) throws IOException {
// rien
}
@Override
public void setDateHeader(String name, long date) {
// rien
}
@Override
public void setHeader(String name, String value) {
// rien
}
@Override
public void setIntHeader(String name, int value) {
// rien
}
@Override
public void setStatus(int sc) {
// rien
}
/** @deprecated déprécié
* @param sc int
* @param sm String */
@Override
@Deprecated
public void setStatus(int sc, String sm) {
// rien
}
@Override
public void flushBuffer() throws IOException {
// rien
}
@Override
public int getBufferSize() {
return 0;
}
@Override
public String getCharacterEncoding() {
return null;
}
@Override
public String getContentType() {
return null;
}
@Override
public Locale getLocale() {
return null;
}
@Override
public boolean isCommitted() {
return false;
}
@Override
public void reset() {
// rien
}
@Override
public void resetBuffer() {
// rien
}
@Override
public void setBufferSize(int size) {
// rien
}
@Override
public void setCharacterEncoding(String charset) {
// rien
}
@Override
public void setContentLength(int len) {
// rien
}
@Override
public void setContentType(String type) {
// rien
}
@Override
public void setLocale(Locale loc) {
// rien
}
@Override
public int getStatus() {
return 0;
}
@Override
public String getHeader(String name) {
return null;
}
@Override
public Collection<String> getHeaders(String name) {
return null;
}
@Override
public Collection<String> getHeaderNames() {
return null;
}
@Override
public void setContentLengthLong(long len) {
// rien
}
}
/** Test.
* @throws IOException e */
@Test
public void testCompressionServletResponseWrapper() throws IOException {
final CompressionServletResponseWrapper wrapper = new CompressionServletResponseWrapper(
new HttpResponse(), 1024);
wrapper.setStatus(HttpServletResponse.SC_NOT_FOUND);
assertEquals("status", HttpServletResponse.SC_NOT_FOUND, wrapper.getCurrentStatus());
wrapper.sendError(HttpServletResponse.SC_BAD_GATEWAY);
assertEquals("status", HttpServletResponse.SC_BAD_GATEWAY, wrapper.getCurrentStatus());
wrapper.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "message");
assertEquals("status", HttpServletResponse.SC_SERVICE_UNAVAILABLE,
wrapper.getCurrentStatus());
assertNotNull("outputStream", wrapper.createOutputStream());
assertNotNull("writer", wrapper.getWriter());
wrapper.flushBuffer();
wrapper.close();
wrapper.setContentLength(0);
wrapper.finishResponse();
boolean ok = false;
try {
wrapper.getOutputStream();
} catch (final Exception e) {
ok = true;
}
assertTrue("exception", ok);
final CompressionServletResponseWrapper wrapper2 = new CompressionServletResponseWrapper(
new HttpResponse(), 1024);
assertNotNull("outputStream", wrapper2.getOutputStream());
wrapper2.flushBuffer();
wrapper2.close();
boolean ok2 = false;
try {
wrapper2.getWriter();
} catch (final Exception e) {
ok2 = true;
}
assertTrue("exception", ok2);
}
/** Test.
* @throws IOException e */
@Test
public void testCompressionResponseStream() throws IOException {
final CompressionResponseStream stream = new CompressionResponseStream(new HttpResponse(),
1024);
stream.write(1);
stream.write(new byte[8]);
stream.write(new byte[8], 1, 7);
stream.write(new byte[8], 1, 0);
stream.flush();
stream.close();
final CompressionResponseStream zipStream = new CompressionResponseStream(
new HttpResponse(), 8);
zipStream.write(new byte[16], 0, 16);
zipStream.flush();
zipStream.close();
}
/** Test.
* @throws IOException e */
@Test
public void testFilterServletOutputStream() throws IOException {
final FilterServletOutputStream outputStream = new FilterServletOutputStream(
new ByteArrayOutputStream());
outputStream.write(1);
outputStream.write(new byte[8]);
outputStream.write(new byte[8], 1, 7);
outputStream.flush();
outputStream.close();
}
}