/*
* Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0,
* and the EPL 1.0 (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.test.server;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.security.Principal;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Vector;
import javax.servlet.AsyncContext;
import javax.servlet.DispatcherType;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.WriteListener;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpUpgradeHandler;
import javax.servlet.http.Part;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.h2.api.ErrorCode;
import org.h2.engine.Constants;
import org.h2.engine.SysProperties;
import org.h2.server.web.WebServlet;
import org.h2.store.fs.FileUtils;
import org.h2.test.TestBase;
import org.h2.test.utils.AssertThrows;
import org.h2.tools.Server;
import org.h2.util.StringUtils;
import org.h2.util.Task;
/**
* Tests the H2 Console application.
*/
public class TestWeb extends TestBase {
private static volatile String lastUrl;
/**
* Run just this test.
*
* @param a ignored
*/
public static void main(String... a) throws Exception {
TestBase.createCaller().init().test();
}
@Override
public void test() throws Exception {
testServlet();
testWrongParameters();
testTools();
testAlreadyRunning();
testStartWebServerWithConnection();
testServer();
testWebApp();
testIfExists();
}
private void testServlet() throws Exception {
WebServlet servlet = new WebServlet();
final HashMap<String, String> configMap = new HashMap<String, String>();
configMap.put("ifExists", "");
configMap.put("", "");
configMap.put("", "");
configMap.put("", "");
ServletConfig config = new ServletConfig() {
@Override
public String getServletName() {
return "H2Console";
}
@Override
public Enumeration<String> getInitParameterNames() {
return new Vector<String>(configMap.keySet()).elements();
}
@Override
public String getInitParameter(String name) {
return configMap.get(name);
}
@Override
public ServletContext getServletContext() {
return null;
}
};
servlet.init(config);
TestHttpServletRequest request = new TestHttpServletRequest();
request.setPathInfo("/");
TestHttpServletResponse response = new TestHttpServletResponse();
TestServletOutputStream out = new TestServletOutputStream();
response.setServletOutputStream(out);
servlet.doGet(request, response);
assertContains(out.toString(), "location.href = 'login.jsp");
servlet.destroy();
}
private static void testWrongParameters() {
new AssertThrows(ErrorCode.FEATURE_NOT_SUPPORTED_1) {
@Override
public void test() throws SQLException {
Server.createPgServer("-pgPort 8182");
}};
new AssertThrows(ErrorCode.FEATURE_NOT_SUPPORTED_1) {
@Override
public void test() throws SQLException {
Server.createTcpServer("-tcpPort 8182");
}};
new AssertThrows(ErrorCode.FEATURE_NOT_SUPPORTED_1) {
@Override
public void test() throws SQLException {
Server.createWebServer("-webPort=8182");
}};
}
private void testAlreadyRunning() throws Exception {
Server server = Server.createWebServer(
"-webPort", "8182", "-properties", "null");
server.start();
assertContains(server.getStatus(), "server running");
Server server2 = Server.createWebServer(
"-webPort", "8182", "-properties", "null");
assertEquals("Not started", server2.getStatus());
try {
server2.start();
fail();
} catch (Exception e) {
assertContains(e.toString(), "port may be in use");
assertContains(server2.getStatus(),
"could not be started");
}
server.stop();
}
private void testTools() throws Exception {
if (config.memory || config.cipher != null) {
return;
}
deleteDb(getTestName());
Connection conn = getConnection(getTestName());
conn.createStatement().execute(
"create table test(id int) as select 1");
conn.close();
Server server = new Server();
server.setOut(new PrintStream(new ByteArrayOutputStream()));
server.runTool("-web", "-webPort", "8182",
"-properties", "null", "-tcp", "-tcpPort", "9101");
try {
String url = "http://localhost:8182";
WebClient client;
String result;
client = new WebClient();
result = client.get(url);
client.readSessionId(result);
result = client.get(url, "tools.jsp");
FileUtils.delete(getBaseDir() + "/backup.zip");
result = client.get(url, "tools.do?tool=Backup&args=-dir," +
getBaseDir() + ",-db," + getTestName() + ",-file," +
getBaseDir() + "/backup.zip");
deleteDb(getTestName());
assertTrue(FileUtils.exists(getBaseDir() + "/backup.zip"));
result = client.get(url,
"tools.do?tool=DeleteDbFiles&args=-dir," +
getBaseDir() + ",-db," + getTestName());
String fn = getBaseDir() + "/" + getTestName();
if (config.mvStore) {
fn += Constants.SUFFIX_MV_FILE;
} else {
fn += Constants.SUFFIX_PAGE_FILE;
}
assertFalse(FileUtils.exists(fn));
result = client.get(url, "tools.do?tool=Restore&args=-dir," +
getBaseDir() + ",-db," + getTestName() +",-file," + getBaseDir() +
"/backup.zip");
assertTrue(FileUtils.exists(fn));
FileUtils.delete(getBaseDir() + "/web.h2.sql");
FileUtils.delete(getBaseDir() + "/backup.zip");
result = client.get(url, "tools.do?tool=Recover&args=-dir," +
getBaseDir() + ",-db," + getTestName());
assertTrue(FileUtils.exists(getBaseDir() + "/" + getTestName() + ".h2.sql"));
FileUtils.delete(getBaseDir() + "/web.h2.sql");
result = client.get(url, "tools.do?tool=RunScript&args=-script," +
getBaseDir() + "/" + getTestName() + ".h2.sql,-url," +
getURL(getTestName(), true) +
",-user," + getUser() + ",-password," + getPassword());
FileUtils.delete(getBaseDir() + "/" + getTestName() + ".h2.sql");
assertTrue(FileUtils.exists(fn));
deleteDb(getTestName());
} finally {
server.shutdown();
}
}
private void testServer() throws Exception {
Server server = new Server();
server.setOut(new PrintStream(new ByteArrayOutputStream()));
server.runTool("-web", "-webPort", "8182", "-properties",
"null", "-tcp", "-tcpPort", "9101");
try {
String url = "http://localhost:8182";
WebClient client;
String result;
client = new WebClient();
client.setAcceptLanguage("de-de,de;q=0.5");
result = client.get(url);
client.readSessionId(result);
result = client.get(url, "login.jsp");
assertEquals("text/html", client.getContentType());
assertContains(result, "Einstellung");
client.get(url, "favicon.ico");
assertEquals("image/x-icon", client.getContentType());
client.get(url, "ico_ok.gif");
assertEquals("image/gif", client.getContentType());
client.get(url, "tree.js");
assertEquals("text/javascript", client.getContentType());
client.get(url, "stylesheet.css");
assertEquals("text/css", client.getContentType());
client.get(url, "admin.do");
try {
client.get(url, "adminShutdown.do");
} catch (IOException e) {
// expected
Thread.sleep(1000);
}
} finally {
server.shutdown();
}
// it should be stopped now
server = Server.createTcpServer("-tcpPort", "9101");
server.start();
server.stop();
}
private void testIfExists() throws Exception {
Connection conn = getConnection("jdbc:h2:mem:" + getTestName(),
getUser(), getPassword());
Server server = new Server();
server.setOut(new PrintStream(new ByteArrayOutputStream()));
server.runTool("-ifExists", "-web", "-webPort", "8182",
"-properties", "null", "-tcp", "-tcpPort", "9101");
try {
String url = "http://localhost:8182";
WebClient client;
String result;
client = new WebClient();
result = client.get(url);
client.readSessionId(result);
result = client.get(url, "login.jsp");
result = client.get(url, "test.do?driver=org.h2.Driver" +
"&url=jdbc:h2:mem:" + getTestName() +
"&user=" + getUser() + "&password=" +
getPassword() + "&name=_test_");
assertTrue(result.indexOf("Exception") < 0);
result = client.get(url, "test.do?driver=org.h2.Driver" +
"&url=jdbc:h2:mem:" + getTestName() + "Wrong" +
"&user=" + getUser() + "&password=" +
getPassword() + "&name=_test_");
assertContains(result, "Exception");
} finally {
server.shutdown();
conn.close();
}
}
private void testWebApp() throws Exception {
Server server = new Server();
server.setOut(new PrintStream(new ByteArrayOutputStream()));
server.runTool("-web", "-webPort", "8182",
"-properties", "null", "-tcp", "-tcpPort", "9101");
try {
String url = "http://localhost:8182";
WebClient client;
String result;
client = new WebClient();
result = client.get(url);
client.readSessionId(result);
client.get(url, "login.jsp");
client.get(url, "adminSave.do");
result = client.get(url, "index.do?language=de");
result = client.get(url, "login.jsp");
assertContains(result, "Einstellung");
result = client.get(url, "index.do?language=en");
result = client.get(url, "login.jsp");
assertTrue(result.indexOf("Einstellung") < 0);
result = client.get(url, "test.do?driver=abc" +
"&url=jdbc:abc:mem: " + getTestName() +
"&user=sa&password=sa&name=_test_");
assertContains(result, "Exception");
result = client.get(url, "test.do?driver=org.h2.Driver" +
"&url=jdbc:h2:mem:" + getTestName() +
"&user=sa&password=sa&name=_test_");
assertTrue(result.indexOf("Exception") < 0);
result = client.get(url, "login.do?driver=org.h2.Driver" +
"&url=jdbc:h2:mem:" + getTestName() +
"&user=sa&password=sa&name=_test_");
result = client.get(url, "header.jsp");
result = client.get(url, "query.do?sql=" +
"create table test(id int primary key, name varchar);" +
"insert into test values(1, 'Hello')");
result = client.get(url, "query.do?sql=create sequence test_sequence");
result = client.get(url, "query.do?sql=create schema test_schema");
result = client.get(url, "query.do?sql=" +
"create view test_view as select * from test");
result = client.get(url, "tables.do");
result = client.get(url, "query.jsp");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "Hello");
result = client.get(url, "query.do?sql=select * from test");
result = client.get(url, "query.do?sql=@META select * from test");
assertContains(result, "typeName");
result = client.get(url, "query.do?sql=delete from test");
result = client.get(url, "query.do?sql=@LOOP 1000 " +
"insert into test values(?, 'Hello ' || ?/*RND*/)");
assertContains(result, "1000 * (Prepared)");
result = client.get(url, "query.do?sql=select * from test");
result = client.get(url, "query.do?sql=@list select * from test");
assertContains(result, "Row #");
result = client.get(url, "query.do?sql=@parameter_meta " +
"select * from test where id = ?");
assertContains(result, "INTEGER");
result = client.get(url, "query.do?sql=@edit select * from test");
assertContains(result, "editResult.do");
result = client.get(url, "query.do?sql=" +
StringUtils.urlEncode("select space(100001) a, 1 b"));
assertContains(result, "...");
result = client.get(url, "query.do?sql=" +
StringUtils.urlEncode("call '<&>'"));
assertContains(result, "<&>");
result = client.get(url, "query.do?sql=@HISTORY");
result = client.get(url, "getHistory.do?id=4");
assertContains(result, "select * from test");
result = client.get(url, "query.do?sql=delete from test");
// op 1 (row -1: insert, otherwise update): ok,
// 2: delete 3: cancel,
result = client.get(url, "editResult.do?sql=@edit " +
"select * from test&op=1&row=-1&r-1c1=1&r-1c2=Hello");
assertContains(result, "1");
assertContains(result, "Hello");
result = client.get(url, "editResult.do?sql=@edit " +
"select * from test&op=1&row=1&r1c1=1&r1c2=Hallo");
assertContains(result, "1");
assertContains(result, "Hallo");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "1");
assertContains(result, "Hallo");
result = client.get(url, "editResult.do?sql=@edit " +
"select * from test&op=2&row=1");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "no rows");
// autoComplete
result = client.get(url, "autoCompleteList.do?query=select 'abc");
assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=select 'abc''");
assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=select 'abc' ");
assertContains(StringUtils.urlDecode(result), "||");
result = client.get(url, "autoCompleteList.do?query=select 'abc' |");
assertContains(StringUtils.urlDecode(result), "|");
result = client.get(url, "autoCompleteList.do?query=select 'abc' || ");
assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=call timestamp '2");
assertContains(result, "20");
result = client.get(url, "autoCompleteList.do?query=call time '1");
assertContains(StringUtils.urlDecode(result), "12:00:00");
result = client.get(url, "autoCompleteList.do?query=" +
"call timestamp '2001-01-01 12:00:00.");
assertContains(result, "nanoseconds");
result = client.get(url, "autoCompleteList.do?query=" +
"call timestamp '2001-01-01 12:00:00.00");
assertContains(result, "nanoseconds");
result = client.get(url, "autoCompleteList.do?query=" +
"call $$ hello world");
assertContains(StringUtils.urlDecode(result), "$$");
result = client.get(url, "autoCompleteList.do?query=alter index ");
assertContains(StringUtils.urlDecode(result), "character");
result = client.get(url, "autoCompleteList.do?query=alter index idx");
assertContains(StringUtils.urlDecode(result), "character");
result = client.get(url, "autoCompleteList.do?query=alter index \"IDX_");
assertContains(StringUtils.urlDecode(result), "\"");
result = client.get(url, "autoCompleteList.do?query=alter index \"IDX_\"\"");
assertContains(StringUtils.urlDecode(result), "\"");
result = client.get(url, "autoCompleteList.do?query=help ");
assertContains(result, "anything");
result = client.get(url, "autoCompleteList.do?query=help select");
assertContains(result, "anything");
result = client.get(url, "autoCompleteList.do?query=call ");
assertContains(result, "0x");
result = client.get(url, "autoCompleteList.do?query=call 0");
assertContains(result, ".");
result = client.get(url, "autoCompleteList.do?query=se");
assertContains(result, "select");
assertContains(result, "set");
result = client.get(url, "tables.do");
assertContains(result, "TEST");
result = client.get(url, "autoCompleteList.do?query=" +
"select * from ");
assertContains(result, "test");
result = client.get(url, "autoCompleteList.do?query=" +
"select * from test t where t.");
assertContains(result, "id");
result = client.get(url, "autoCompleteList.do?query=" +
"select id x from test te where t");
assertContains(result, "te");
result = client.get(url, "autoCompleteList.do?query=" +
"select * from test where name = '");
assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=" +
"select * from information_schema.columns where columns.");
assertContains(result, "column_name");
result = client.get(url, "query.do?sql=delete from test");
// special commands
result = client.get(url, "query.do?sql=@autocommit_true");
assertContains(result, "Auto commit is now ON");
result = client.get(url, "query.do?sql=@autocommit_false");
assertContains(result, "Auto commit is now OFF");
result = client.get(url, "query.do?sql=@cancel");
assertContains(result, "There is currently no running statement");
result = client.get(url,
"query.do?sql=@generated insert into test(id) values(test_sequence.nextval)");
assertContains(result, "SCOPE_IDENTITY()");
result = client.get(url, "query.do?sql=@maxrows 2000");
assertContains(result, "Max rowcount is set");
result = client.get(url, "query.do?sql=@password_hash user password");
assertContains(result,
"501cf5c163c184c26e62e76d25d441979f8f25dfd7a683484995b4a43a112fdf");
result = client.get(url, "query.do?sql=@sleep 1");
assertContains(result, "Ok");
result = client.get(url, "query.do?sql=@catalogs");
assertContains(result, "PUBLIC");
result = client.get(url,
"query.do?sql=@column_privileges null null null TEST null");
assertContains(result, "PRIVILEGE");
result = client.get(url,
"query.do?sql=@cross_references null null null TEST");
assertContains(result, "PKTABLE_NAME");
result = client.get(url,
"query.do?sql=@exported_keys null null null TEST");
assertContains(result, "PKTABLE_NAME");
result = client.get(url,
"query.do?sql=@imported_keys null null null TEST");
assertContains(result, "PKTABLE_NAME");
result = client.get(url,
"query.do?sql=@primary_keys null null null TEST");
assertContains(result, "PK_NAME");
result = client.get(url, "query.do?sql=@procedures null null null");
assertContains(result, "PROCEDURE_NAME");
result = client.get(url, "query.do?sql=@procedure_columns");
assertContains(result, "PROCEDURE_NAME");
result = client.get(url, "query.do?sql=@schemas");
assertContains(result, "PUBLIC");
result = client.get(url, "query.do?sql=@table_privileges");
assertContains(result, "PRIVILEGE");
result = client.get(url, "query.do?sql=@table_types");
assertContains(result, "SYSTEM TABLE");
result = client.get(url, "query.do?sql=@type_info");
assertContains(result, "CLOB");
result = client.get(url, "query.do?sql=@version_columns");
assertContains(result, "PSEUDO_COLUMN");
result = client.get(url, "query.do?sql=@attributes");
assertContains(result, "Feature not supported: "attributes"");
result = client.get(url, "query.do?sql=@super_tables");
assertContains(result, "SUPERTABLE_NAME");
result = client.get(url, "query.do?sql=@super_types");
assertContains(result, "Feature not supported: "superTypes"");
result = client.get(url, "query.do?sql=@prof_start");
assertContains(result, "Ok");
result = client.get(url, "query.do?sql=@prof_stop");
assertContains(result, "Top Stack Trace(s)");
result = client.get(url,
"query.do?sql=@best_row_identifier null null TEST");
assertContains(result, "SCOPE");
assertContains(result, "COLUMN_NAME");
assertContains(result, "ID");
result = client.get(url, "query.do?sql=@udts");
assertContains(result, "CLASS_NAME");
result = client.get(url, "query.do?sql=@udts null null null 1,2,3");
assertContains(result, "CLASS_NAME");
result = client.get(url, "query.do?sql=@LOOP 10 " +
"@STATEMENT insert into test values(?, 'Hello')");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "8");
result = client.get(url, "query.do?sql=@EDIT select * from test");
assertContains(result, "editRow");
result = client.get(url, "query.do?sql=@AUTOCOMMIT TRUE");
result = client.get(url, "query.do?sql=@AUTOCOMMIT FALSE");
result = client.get(url, "query.do?sql=@TRANSACTION_ISOLATION");
result = client.get(url, "query.do?sql=@SET MAXROWS 1");
result = client.get(url, "query.do?sql=select * from test order by id");
result = client.get(url, "query.do?sql=@SET MAXROWS 1000");
result = client.get(url, "query.do?sql=@TABLES");
assertContains(result, "TEST");
result = client.get(url, "query.do?sql=@COLUMNS null null TEST");
assertContains(result, "ID");
result = client.get(url, "query.do?sql=@INDEX_INFO null null TEST");
assertContains(result, "PRIMARY");
result = client.get(url, "query.do?sql=@CATALOG");
assertContains(result, "PUBLIC");
result = client.get(url, "query.do?sql=@MEMORY");
assertContains(result, "Used");
result = client.get(url, "query.do?sql=@INFO");
assertContains(result, "getCatalog");
result = client.get(url, "logout.do");
result = client.get(url, "login.do?driver=org.h2.Driver&" +
"url=jdbc:h2:mem:" + getTestName() +
"&user=sa&password=sa&name=_test_");
result = client.get(url, "logout.do");
result = client.get(url, "settingRemove.do?name=_test_");
client.get(url, "admin.do");
} finally {
server.shutdown();
}
}
private void testStartWebServerWithConnection() throws Exception {
String old = System.getProperty(SysProperties.H2_BROWSER);
try {
System.setProperty(SysProperties.H2_BROWSER,
"call:" + TestWeb.class.getName() + ".openBrowser");
Server.openBrowser("testUrl");
assertEquals("testUrl", lastUrl);
String oldUrl = lastUrl;
final Connection conn = getConnection(getTestName());
Task t = new Task() {
@Override
public void call() throws Exception {
Server.startWebServer(conn);
}
};
t.execute();
for (int i = 0; lastUrl == oldUrl; i++) {
if (i > 100) {
throw new Exception("Browser not started");
}
Thread.sleep(100);
}
String url = lastUrl;
WebClient client = new WebClient();
client.readSessionId(url);
url = client.getBaseUrl(url);
try {
client.get(url, "logout.do");
} catch (Exception e) {
// the server stops on logout
}
t.get();
conn.close();
} finally {
if (old != null) {
System.setProperty(SysProperties.H2_BROWSER, old);
} else {
System.clearProperty(SysProperties.H2_BROWSER);
}
}
}
/**
* This method is called via reflection.
*
* @param url the browser url
*/
public static void openBrowser(String url) {
lastUrl = url;
}
/**
* A HTTP servlet request for testing.
*/
static class TestHttpServletRequest implements HttpServletRequest {
private String pathInfo;
void setPathInfo(String pathInfo) {
this.pathInfo = pathInfo;
}
@Override
public Object getAttribute(String name) {
return null;
}
@Override
public Enumeration<String> getAttributeNames() {
return new Vector<String>().elements();
}
@Override
public String getCharacterEncoding() {
return null;
}
@Override
public int getContentLength() {
return 0;
}
@Override
public String getContentType() {
return null;
}
@Override
public ServletInputStream getInputStream() throws IOException {
return null;
}
@Override
public String getLocalAddr() {
return null;
}
@Override
public String getLocalName() {
return null;
}
@Override
public int getLocalPort() {
return 0;
}
@Override
public Locale getLocale() {
return null;
}
@Override
public Enumeration<Locale> getLocales() {
return null;
}
@Override
public String getParameter(String name) {
return null;
}
@Override
public Map<String, String[]> getParameterMap() {
return null;
}
@Override
public Enumeration<String> getParameterNames() {
return new Vector<String>().elements();
}
@Override
public String[] getParameterValues(String name) {
return null;
}
@Override
public String getProtocol() {
return null;
}
@Override
public BufferedReader getReader() throws IOException {
return null;
}
@Override
@Deprecated
public String getRealPath(String path) {
return null;
}
@Override
public String getRemoteAddr() {
return null;
}
@Override
public String getRemoteHost() {
return null;
}
@Override
public int getRemotePort() {
return 0;
}
@Override
public RequestDispatcher getRequestDispatcher(String name) {
return null;
}
@Override
public String getScheme() {
return null;
}
@Override
public String getServerName() {
return null;
}
@Override
public int getServerPort() {
return 0;
}
@Override
public boolean isSecure() {
return false;
}
@Override
public void removeAttribute(String name) {
// ignore
}
@Override
public void setAttribute(String name, Object value) {
// ignore
}
@Override
public void setCharacterEncoding(String encoding)
throws UnsupportedEncodingException {
// ignore
}
@Override
public String getAuthType() {
return null;
}
@Override
public String getContextPath() {
return null;
}
@Override
public Cookie[] getCookies() {
return null;
}
@Override
public long getDateHeader(String x) {
return 0;
}
@Override
public String getHeader(String name) {
return null;
}
@Override
public Enumeration<String> getHeaderNames() {
return null;
}
@Override
public Enumeration<String> getHeaders(String name) {
return null;
}
@Override
public int getIntHeader(String name) {
return 0;
}
@Override
public String getMethod() {
return null;
}
@Override
public String getPathInfo() {
return pathInfo;
}
@Override
public String getPathTranslated() {
return null;
}
@Override
public String getQueryString() {
return null;
}
@Override
public String getRemoteUser() {
return null;
}
@Override
public String getRequestURI() {
return null;
}
@Override
public StringBuffer getRequestURL() {
return null;
}
@Override
public String getRequestedSessionId() {
return null;
}
@Override
public String getServletPath() {
return null;
}
@Override
public HttpSession getSession() {
return null;
}
@Override
public HttpSession getSession(boolean x) {
return null;
}
@Override
public Principal getUserPrincipal() {
return null;
}
@Override
public boolean isRequestedSessionIdFromCookie() {
return false;
}
@Override
public boolean isRequestedSessionIdFromURL() {
return false;
}
@Override
@Deprecated
public boolean isRequestedSessionIdFromUrl() {
return false;
}
@Override
public boolean isRequestedSessionIdValid() {
return false;
}
@Override
public boolean isUserInRole(String x) {
return false;
}
@Override
public java.util.Collection<Part> getParts() {
return null;
}
@Override
public Part getPart(String name) {
return null;
}
@Override
public boolean authenticate(HttpServletResponse response) {
return false;
}
@Override
public void login(String username, String password) {
// ignore
}
@Override
public void logout() {
// ignore
}
@Override
public ServletContext getServletContext() {
return null;
}
@Override
public AsyncContext startAsync() {
return null;
}
@Override
public AsyncContext startAsync(
ServletRequest servletRequest,
ServletResponse servletResponse) {
return null;
}
@Override
public boolean isAsyncStarted() {
return false;
}
@Override
public boolean isAsyncSupported() {
return false;
}
@Override
public AsyncContext getAsyncContext() {
return null;
}
@Override
public DispatcherType getDispatcherType() {
return null;
}
@Override
public long getContentLengthLong() {
return 0;
}
@Override
public String changeSessionId() {
return null;
}
@Override
public <T extends HttpUpgradeHandler> T upgrade(Class<T> handlerClass)
throws IOException, ServletException {
return null;
}
}
/**
* A HTTP servlet response for testing.
*/
static class TestHttpServletResponse implements HttpServletResponse {
ServletOutputStream servletOutputStream;
void setServletOutputStream(ServletOutputStream servletOutputStream) {
this.servletOutputStream = servletOutputStream;
}
@Override
public void flushBuffer() throws IOException {
// ignore
}
@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 ServletOutputStream getOutputStream() throws IOException {
return servletOutputStream;
}
@Override
public PrintWriter getWriter() throws IOException {
return null;
}
@Override
public boolean isCommitted() {
return false;
}
@Override
public void reset() {
// ignore
}
@Override
public void resetBuffer() {
// ignore
}
@Override
public void setBufferSize(int arg0) {
// ignore
}
@Override
public void setCharacterEncoding(String arg0) {
// ignore
}
@Override
public void setContentLength(int arg0) {
// ignore
}
@Override
public void setContentLengthLong(long arg0) {
// ignore
}
@Override
public void setContentType(String arg0) {
// ignore
}
@Override
public void setLocale(Locale arg0) {
// ignore
}
@Override
public void addCookie(Cookie arg0) {
// ignore
}
@Override
public void addDateHeader(String arg0, long arg1) {
// ignore
}
@Override
public void addHeader(String arg0, String arg1) {
// ignore
}
@Override
public void addIntHeader(String arg0, int arg1) {
// ignore
}
@Override
public boolean containsHeader(String arg0) {
return false;
}
@Override
public String encodeRedirectURL(String arg0) {
return null;
}
@Override
@Deprecated
public String encodeRedirectUrl(String arg0) {
return null;
}
@Override
public String encodeURL(String arg0) {
return null;
}
@Override
@Deprecated
public String encodeUrl(String arg0) {
return null;
}
@Override
public void sendError(int arg0) throws IOException {
// ignore
}
@Override
public void sendError(int arg0, String arg1) throws IOException {
// ignore
}
@Override
public void sendRedirect(String arg0) throws IOException {
// ignore
}
@Override
public void setDateHeader(String arg0, long arg1) {
// ignore
}
@Override
public void setHeader(String arg0, String arg1) {
// ignore
}
@Override
public void setIntHeader(String arg0, int arg1) {
// ignore
}
@Override
public void setStatus(int arg0) {
// ignore
}
@Override
@Deprecated
public void setStatus(int arg0, String arg1) {
// ignore
}
@Override
public int getStatus() {
return 0;
}
@Override
public String getHeader(String name) {
return null;
}
@Override
public java.util.Collection<String> getHeaders(String name) {
return null;
}
@Override
public java.util.Collection<String> getHeaderNames() {
return null;
}
}
/**
* A servlet output stream for testing.
*/
static class TestServletOutputStream extends ServletOutputStream {
private final ByteArrayOutputStream buff = new ByteArrayOutputStream();
@Override
public void write(int b) throws IOException {
buff.write(b);
}
@Override
public String toString() {
try {
return new String(buff.toByteArray(), "UTF-8");
} catch (UnsupportedEncodingException e) {
return e.toString();
}
}
@Override
public boolean isReady() {
return true;
}
@Override
public void setWriteListener(WriteListener writeListener) {
// ignore
}
}
}