392237 Port tests/login-service to jetty-9

This commit is contained in:
Jan Bartel 2012-11-19 16:27:53 +11:00
parent 82117bc833
commit be816d853b
2 changed files with 90 additions and 115 deletions

View File

@ -45,8 +45,6 @@
<module>test-webapps</module>
<module>test-sessions</module>
<module>test-continuation</module>
<!--
<module>test-loginservice</module>
-->
</modules>
</project>

View File

@ -36,6 +36,7 @@ import java.sql.DriverManager;
import java.util.HashSet;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.Future;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
@ -43,14 +44,18 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.derby.tools.ij;
import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.security.Realm;
import org.eclipse.jetty.client.security.SimpleRealmResolver;
import org.eclipse.jetty.http.HttpMethods;
import org.eclipse.jetty.client.HttpRequest;
import org.eclipse.jetty.client.api.AuthenticationStore;
import org.eclipse.jetty.client.api.ContentResponse;
import org.eclipse.jetty.client.api.Request;
import org.eclipse.jetty.client.util.BasicAuthentication;
import org.eclipse.jetty.client.util.ByteBufferContentProvider;
import org.eclipse.jetty.client.util.BytesContentProvider;
import org.eclipse.jetty.http.HttpMethod;
import org.eclipse.jetty.http.HttpStatus;
import org.eclipse.jetty.util.security.Constraint;
import org.eclipse.jetty.io.ByteArrayBuffer;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.eclipse.jetty.io.EofException;
import org.eclipse.jetty.security.ConstraintMapping;
import org.eclipse.jetty.security.ConstraintSecurityHandler;
@ -58,11 +63,10 @@ import org.eclipse.jetty.security.JDBCLoginService;
import org.eclipse.jetty.security.LoginService;
import org.eclipse.jetty.security.authentication.BasicAuthenticator;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.NetworkConnector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
@ -70,6 +74,7 @@ import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.Loader;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class JdbcLoginServiceTest
@ -91,7 +96,7 @@ public class JdbcLoginServiceTest
private static File _docRoot;
private static Server _server;
private static HttpClient _client;
private static Realm _realm;
private static String __realm = "JdbcRealm";
private static String _protocol;
private static String _baseUrl;
private static String _requestContent;
@ -132,28 +137,8 @@ public class JdbcLoginServiceTest
throws Exception
{
setProtocol("http");
setRealm(new Realm()
{
public String getId()
{
return "JdbcRealm";
}
public String getPrincipal()
{
return "jetty";
}
public String getCredentials()
{
return "jetty";
}
});
SelectChannelConnector connector = new SelectChannelConnector();
server.addConnector(connector);
LoginService loginService = new JDBCLoginService("JdbcRealm", "./src/test/resources/jdbcrealm.properties");
LoginService loginService = new JDBCLoginService(__realm, "./src/test/resources/jdbcrealm.properties");
server.addBean(loginService);
ConstraintSecurityHandler security = new ConstraintSecurityHandler();
@ -213,12 +198,14 @@ public class JdbcLoginServiceTest
createDB(dbPath, "src/test/resources/createdb.sql", "jdbc:derby:jdbcrealm;create=true");
}
_server = new Server();
_server = new Server(0);
configureServer(_server);
_server.start();
int port = _server.getConnectors()[0].getLocalPort();
int port = ((NetworkConnector)_server.getConnectors()[0]).getLocalPort();
_baseUrl = _protocol+"://localhost:"+port+ "/";
}
@AfterClass
@ -231,103 +218,100 @@ public class JdbcLoginServiceTest
_server = null;
}
}
@Test
public void testPut() throws Exception
{
startClient(_realm);
ContentExchange putExchange = new ContentExchange();
putExchange.setURL(getBaseUrl() + "output.txt");
putExchange.setMethod(HttpMethods.PUT);
putExchange.setRequestContent(new ByteArrayBuffer(_content.getBytes()));
_client.send(putExchange);
int state = putExchange.waitForDone();
int responseStatus = putExchange.getResponseStatus();
stopClient();
boolean statusOk = (responseStatus == 200 || responseStatus == 201);
assertTrue(statusOk);
String content = IO.toString(new FileInputStream(new File(_docRoot,"output.txt")));
assertEquals(_content,content);
try
{
startClient();
Request request = _client.newRequest(getBaseUrl() + "output.txt");
request.method(HttpMethod.PUT);
request.content(new BytesContentProvider(_content.getBytes()));
Future<ContentResponse> future = request.send();
ContentResponse response = future.get();
int responseStatus = response.getStatus();
boolean statusOk = (responseStatus == 200 || responseStatus == 201);
assertTrue(statusOk);
String content = IO.toString(new FileInputStream(new File(_docRoot,"output.txt")));
assertEquals(_content,content);
}
finally
{
stopClient();
}
}
@Test
public void testGet() throws Exception
{
startClient(_realm);
ContentExchange getExchange = new ContentExchange();
getExchange.setURL(getBaseUrl() + "input.txt");
getExchange.setMethod(HttpMethods.GET);
_client.send(getExchange);
int state = getExchange.waitForDone();
String content = "";
int responseStatus = getExchange.getResponseStatus();
if (responseStatus == HttpStatus.OK_200)
try
{
content = getExchange.getResponseContent();
startClient();
Future<ContentResponse> future = _client.GET(getBaseUrl() + "input.txt");
ContentResponse response = future.get();
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
assertEquals(_content, response.getContentAsString());
}
finally
{
stopClient();
}
stopClient();
assertEquals(HttpStatus.OK_200,responseStatus);
assertEquals(_content,content);
}
@Test
//Head requests to jetty-client are not working: see https://bugs.eclipse.org/bugs/show_bug.cgi?id=394552
@Ignore
public void testHead() throws Exception
{
startClient(_realm);
ContentExchange getExchange = new ContentExchange();
getExchange.setURL(getBaseUrl() + "input.txt");
getExchange.setMethod(HttpMethods.HEAD);
_client.send(getExchange);
int state = getExchange.waitForDone();
int responseStatus = getExchange.getResponseStatus();
try
{
startClient();
stopClient();
assertEquals(HttpStatus.OK_200,responseStatus);
Request request = _client.newRequest(getBaseUrl() + "input.txt");
request.method(HttpMethod.HEAD);
Future<ContentResponse> future = request.send();
ContentResponse response = future.get();
int responseStatus = response.getStatus();
assertEquals(HttpStatus.OK_200,responseStatus);
}
finally
{
stopClient();
}
}
@Test
public void testPost() throws Exception
{
startClient(_realm);
ContentExchange postExchange = new ContentExchange();
postExchange.setURL(getBaseUrl() + "test");
postExchange.setMethod(HttpMethods.POST);
postExchange.setRequestContent(new ByteArrayBuffer(_content.getBytes()));
_client.send(postExchange);
int state = postExchange.waitForDone();
int responseStatus = postExchange.getResponseStatus();
stopClient();
assertEquals(HttpStatus.OK_200,responseStatus);
assertEquals(_content,_requestContent);
try
{
startClient();
Request request = _client.newRequest(getBaseUrl() + "test");
request.method(HttpMethod.POST);
request.content(new BytesContentProvider(_content.getBytes()));
Future<ContentResponse> future = request.send();
ContentResponse response = future.get();
assertEquals(HttpStatus.OK_200,response.getStatus());
assertEquals(_content,_requestContent);
}
finally
{
stopClient();
}
}
protected void startClient(Realm realm)
protected void startClient()
throws Exception
{
_client = new HttpClient();
_client.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL);
if (realm != null)
_client.setRealmResolver(new SimpleRealmResolver(realm));
QueuedThreadPool executor = new QueuedThreadPool();
executor.setName(executor.getName() + "-client");
_client.setExecutor(executor);
AuthenticationStore authStore = _client.getAuthenticationStore();
authStore.addAuthentication(new BasicAuthentication(_baseUrl, __realm, "jetty", "jetty"));
_client.start();
}
@ -356,10 +340,6 @@ public class JdbcLoginServiceTest
return _client;
}
protected Realm getRealm()
{
return _realm;
}
protected String getContent()
{
@ -371,10 +351,7 @@ public class JdbcLoginServiceTest
_protocol = protocol;
}
protected static void setRealm(Realm realm)
{
_realm = realm;
}
public static void copyStream(InputStream in, OutputStream out)
{
@ -404,7 +381,7 @@ public class JdbcLoginServiceTest
this.resourcePath = repositoryPath;
}
public void handle(String target, Request baseRequest,
public void handle(String target, org.eclipse.jetty.server.Request baseRequest,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{