package org.jboss.seam.test.unit.web;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashSet;
import javax.servlet.FilterChain;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpSession;
import org.jboss.seam.mock.MockHttpServletRequest;
import org.jboss.seam.mock.MockHttpServletResponse;
import org.jboss.seam.mock.MockHttpSession;
import org.jboss.seam.mock.MockServletContext;
import org.jboss.seam.util.Resources;
import org.jboss.seam.web.MultipartFilter;
import org.jboss.seam.web.MultipartRequest;
import org.testng.annotations.Test;
/**
* @author Pete Muir
*
*/
public class MultipartRequestTest
{
@Test
public void testMultipartRequest() throws IOException, ServletException
{
MultipartFilter filter = new MultipartFilter();
ServletContext context = new MockServletContext();
HttpSession session = new MockHttpSession(context);
MockHttpServletRequest request = new MockHttpServletRequest(session, "Pete", new HashSet<String>(), new Cookie[0], "post")
{
private final InputStream is = Resources.getResourceAsStream("/META-INF/seam.properties", null);
@Override
public String getContentType()
{
return "multipart/test; boundary=foo";
}
@Override
public ServletInputStream getInputStream() throws IOException
{
return new ServletInputStream() {
@Override
public int read() throws IOException
{
return is.read();
}
@Override
public int read(byte[] b) throws IOException
{
return is.read(b);
}
};
}
};
// Add some parameters to test passthrough
String [] fooParams = {"bar"};
request.getParameterMap().put("foo", fooParams);
ServletResponse response = new MockHttpServletResponse();
FilterChain chain = new FilterChain()
{
public void doFilter(ServletRequest request, ServletResponse response)
throws IOException, ServletException
{
assert request instanceof MultipartRequest;
MultipartRequest multipartRequest = (MultipartRequest) request;
assert multipartRequest.getParameterMap().containsKey("foo");
// Test passthrough parameters
assert multipartRequest.getParameterValues("foo").length == 1;
assert "bar".equals(multipartRequest.getParameterValues("foo")[0]);
// TODO Test a multipart request
}
};
filter.doFilter(request, response, chain);
}
}