package org.glassfish.jdbc.devtests.v3;
import java.io.*;
import java.lang.reflect.Constructor;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.DataSource;
import java.util.Map;
import javax.annotation.Resource;
import org.glassfish.jdbc.devtests.v3.test.SimpleTest;
import org.glassfish.jdbc.devtests.v3.util.HtmlUtil;
/**
*
* @author jagadish
*/
public class TestResultServlet extends HttpServlet {
@Resource(name = "jdbc/jdbc-common-resource", mappedName = "jdbc/jdbc-common-resource")
DataSource dsCommon;
@Resource(name = "jdbc/jdbc-multiple-user-test-resource", mappedName = "jdbc/jdbc-multiple-user-test-resource")
DataSource dsMultipleUserCred;
@Resource(name = "jdbc/jdbc-app-auth-test-resource", mappedName = "jdbc/jdbc-app-auth-test-resource")
DataSource dsAppAuth;
@Resource(name = "jdbc/jdbc-stmt-timeout-test-resource", mappedName = "jdbc/jdbc-stmt-timeout-test-resource")
DataSource dsStmtTimeout;
@Resource(name = "jdbc/jdbc-max-conn-usage-test-resource", mappedName = "jdbc/jdbc-max-conn-usage-test-resource")
DataSource dsMaxConnUsage;
@Resource(name = "jdbc/jdbc-conn-leak-tracing-test-resource", mappedName = "jdbc/jdbc-conn-leak-tracing-test-resource")
DataSource dsConnLeakTracing;
@Resource(name = "jdbc/jdbc-associate-with-thread-test-resource", mappedName = "jdbc/jdbc-associate-with-thread-test-resource")
DataSource dsAssocWithThread;
@Resource(name = "jdbc/jdbc-lazy-assoc-resource", mappedName = "jdbc/jdbc-lazy-assoc-test-resource")
DataSource dsLazyAssoc;
@Resource(name = "jdbc/jdbc-simple-xa-test-resource-1", mappedName = "jdbc/jdbc-simple-xa-test-resource-1")
DataSource dsXA;
@Resource(name = "jdbc/jdbc-lazy-enlist-resource-1", mappedName = "jdbc/jdbc-lazy-enlist-resource-1")
DataSource dsLazyEnlist;
@Resource(name = "jdbc/double-resource-reference-resource-1", mappedName = "jdbc/double-resource-reference-resource-1")
DataSource dsDoubleReference;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
SimpleTest testMultipleUserCred = null;
SimpleTest testAppAuth = null;
SimpleTest testStmtTimeout = null;
SimpleTest testMaxConnUsage = null;
SimpleTest testConnLeakTracing = null;
SimpleTest testAssocWithThread = null;
SimpleTest testLazyAssoc = null;
SimpleTest testXA = null;
SimpleTest testLazyEnlist = null;
SimpleTest testDoubleResourceReference = null;
SimpleTest[] testsOther = null;
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet TestResultServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet TestResultServlet at " + request.getContextPath() + "</h1>");
StringBuffer buf = new StringBuffer();
//TODO should be configurable to run any individual test
boolean lazyAssocAlone = false;
String testName = (String) request.getParameter("testName");
if (testName != null && testName.equalsIgnoreCase("lazy-assoc")) {
lazyAssocAlone = true;
}
try {
testMultipleUserCred = loadMultipleUserCredTest();
testAppAuth = loadAppAuthTest();
testStmtTimeout = loadStmtTimeoutTest();
testMaxConnUsage = loadMaxConnUsageTest();
testConnLeakTracing = loadConnLeakTracingTest();
testAssocWithThread = loadAssocWithThreadTest();
testXA = loadSimpleXATest();
testsOther = initializeTests();
testLazyAssoc = loadLazyAssocTest();
testLazyEnlist = loadLazyEnlistTest();
testDoubleResourceReference = loadDoubleResourceReferenceTest();
} catch (Exception e) {
HtmlUtil.printException(e, out);
}
try {
buf.append("<table border=1><tr><th>Test Name</th><th> Pass </th></tr>");
if (!lazyAssocAlone) {
//Run Multiple User Credentials Test
Map<String, Boolean> mapMultipleUserCred =
testMultipleUserCred.runTest(dsMultipleUserCred, out);
for (Map.Entry entry : mapMultipleUserCred.entrySet()) {
buf.append("<tr> <td>");
buf.append(entry.getKey());
buf.append("</td>");
buf.append("<td>");
buf.append(entry.getValue());
buf.append("</td></tr>");
}
//Run Application Authentication Test
Map<String, Boolean> mapAppAuth =
testAppAuth.runTest(dsAppAuth, out);
for (Map.Entry entry : mapAppAuth.entrySet()) {
buf.append("<tr> <td>");
buf.append(entry.getKey());
buf.append("</td>");
buf.append("<td>");
buf.append(entry.getValue());
buf.append("</td></tr>");
}
//Run Statement Timeout Test
Map<String, Boolean> mapStmtTimeout =
testStmtTimeout.runTest(dsStmtTimeout, out);
for (Map.Entry entry : mapStmtTimeout.entrySet()) {
buf.append("<tr> <td>");
buf.append(entry.getKey());
buf.append("</td>");
buf.append("<td>");
buf.append(entry.getValue());
buf.append("</td></tr>");
}
//Run Max Connection Usage Test
Map<String, Boolean> mapMaxConnUsage =
testMaxConnUsage.runTest(dsMaxConnUsage, out);
for (Map.Entry entry : mapMaxConnUsage.entrySet()) {
buf.append("<tr> <td>");
buf.append(entry.getKey());
buf.append("</td>");
buf.append("<td>");
buf.append(entry.getValue());
buf.append("</td></tr>");
}
//Run Associate With Thread Test
Map<String, Boolean> mapAssocWithThread =
testAssocWithThread.runTest(dsAssocWithThread, out);
for (Map.Entry entry : mapAssocWithThread.entrySet()) {
buf.append("<tr> <td>");
buf.append(entry.getKey());
buf.append("</td>");
buf.append("<td>");
buf.append(entry.getValue());
buf.append("</td></tr>");
}
//Run SimpleXADS test
/* Map<String, Boolean> mapXADStest =
testXA.runTest(dsXA, out);
for (Map.Entry entry : mapXADStest.entrySet()) {
buf.append("<tr> <td>");
buf.append(entry.getKey());
buf.append("</td>");
buf.append("<td>");
buf.append(entry.getValue());
buf.append("</td></tr>");
} */
//Run other tests
for (SimpleTest test : testsOther) {
Map<String, Boolean> map = test.runTest(dsCommon, out);
for (Map.Entry entry : map.entrySet()) {
buf.append("<tr> <td>");
buf.append(entry.getKey());
buf.append("</td>");
buf.append("<td>");
buf.append(entry.getValue());
buf.append("</td></tr>");
}
}
//Order of test is important : lazy enlist has to be before connection leak tracing
Map<String, Boolean> mapDoubleResourceReference =
testDoubleResourceReference.runTest(dsDoubleReference, out);
for (Map.Entry entry : mapDoubleResourceReference.entrySet()) {
buf.append("<tr> <td>");
buf.append(entry.getKey());
buf.append("</td>");
buf.append("<td>");
buf.append(entry.getValue());
buf.append("</td></tr>");
}
//Order of test is important : lazy enlist has to be before connection leak tracing
Map<String, Boolean> mapLazyEnlist =
testLazyEnlist.runTest(dsLazyEnlist, out);
for (Map.Entry entry : mapLazyEnlist.entrySet()) {
buf.append("<tr> <td>");
buf.append(entry.getKey());
buf.append("</td>");
buf.append("<td>");
buf.append(entry.getValue());
buf.append("</td></tr>");
}
//Order of test is important : lazy enlist has to be before connection leak tracing
//Run Connection Leak Tracing Test
Map<String, Boolean> mapConnLeakTracing =
testConnLeakTracing.runTest(dsConnLeakTracing, out);
for (Map.Entry entry : mapConnLeakTracing.entrySet()) {
buf.append("<tr> <td>");
buf.append(entry.getKey());
buf.append("</td>");
buf.append("<td>");
buf.append(entry.getValue());
buf.append("</td></tr>");
}
}
//Always Run Lazy Connection Association Test as last test
Map<String, Boolean> mapLazyAssoc =
testLazyAssoc.runTest(dsLazyAssoc, out);
for (Map.Entry entry : mapLazyAssoc.entrySet()) {
buf.append("<tr> <td>");
buf.append(entry.getKey());
buf.append("</td>");
buf.append("<td>");
buf.append(entry.getValue());
buf.append("</td></tr>");
}
buf.append("</table>");
out.println(buf.toString());
} catch (Throwable e) {
out.println("got outer excpetion");
out.println(e.getMessage());
HtmlUtil.printException(e, out);
} finally {
out.println("</body>");
out.println("</html>");
out.close();
out.flush();
}
}
private SimpleTest loadDoubleResourceReferenceTest() throws Exception {
String test = "org.glassfish.jdbc.devtests.v3.test.DoubleResourceReferenceTest";
Class testClass = Class.forName(test);
Constructor c = testClass.getConstructor();
SimpleTest testInstance = (SimpleTest) c.newInstance();
return testInstance;
}
private SimpleTest loadAppAuthTest() throws Exception {
String test = "org.glassfish.jdbc.devtests.v3.test.ApplicationAuthTest";
Class testClass = Class.forName(test);
Constructor c = testClass.getConstructor();
SimpleTest testInstance = (SimpleTest) c.newInstance();
return testInstance;
}
private SimpleTest loadAssocWithThreadTest() throws Exception {
String test = "org.glassfish.jdbc.devtests.v3.test.AssocWithThreadTest";
Class testClass = Class.forName(test);
Constructor c = testClass.getConstructor();
SimpleTest testInstance = (SimpleTest) c.newInstance();
return testInstance;
}
private SimpleTest loadLazyAssocTest() throws Exception {
String test = "org.glassfish.jdbc.devtests.v3.test.LazyConnectionAssociationTest";
Class testClass = Class.forName(test);
Constructor c = testClass.getConstructor();
SimpleTest testInstance = (SimpleTest) c.newInstance();
return testInstance;
}
private SimpleTest loadLazyEnlistTest() throws Exception {
String test = "org.glassfish.jdbc.devtests.v3.test.LazyConnectionEnlistmentTest";
Class testClass = Class.forName(test);
Constructor c = testClass.getConstructor();
SimpleTest testInstance = (SimpleTest) c.newInstance();
return testInstance;
}
private SimpleTest loadConnLeakTracingTest() throws Exception {
String test = "org.glassfish.jdbc.devtests.v3.test.ConnectionLeakTracingTest";
Class testClass = Class.forName(test);
Constructor c = testClass.getConstructor();
SimpleTest testInstance = (SimpleTest) c.newInstance();
return testInstance;
}
private SimpleTest loadMaxConnUsageTest() throws Exception {
String test = "org.glassfish.jdbc.devtests.v3.test.MaxConnectionUsageTest";
Class testClass = Class.forName(test);
Constructor c = testClass.getConstructor();
SimpleTest testInstance = (SimpleTest) c.newInstance();
return testInstance;
}
private SimpleTest loadMultipleUserCredTest() throws Exception {
String test = "org.glassfish.jdbc.devtests.v3.test.MultipleUserCredentialsTest";
Class testClass = Class.forName(test);
Constructor c = testClass.getConstructor();
SimpleTest testInstance = (SimpleTest) c.newInstance();
return testInstance;
}
private SimpleTest[] initializeTests() throws Exception {
String[] tests = {"org.glassfish.jdbc.devtests.v3.test.ConnectionSharingTest",
"org.glassfish.jdbc.devtests.v3.test.LeakTest",
"org.glassfish.jdbc.devtests.v3.test.UserTxTest",
"org.glassfish.jdbc.devtests.v3.test.NoTxConnTest",
"org.glassfish.jdbc.devtests.v3.test.MultipleConnectionCloseTest",
"org.glassfish.jdbc.devtests.v3.test.MarkConnectionAsBadTest",
"org.glassfish.jdbc.devtests.v3.test.ContainerAuthTest"
};
SimpleTest[] testInstances = new SimpleTest[tests.length];
for (int i = 0; i < tests.length; i++) {
Class testClass = Class.forName(tests[i]);
//Constructor c = testClass.getConstructor(javax.sql.DataSource.class, java.io.PipedInputStream.class);
Constructor c = testClass.getConstructor();
testInstances[i] = (SimpleTest) c.newInstance();
}
return testInstances;
} // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
private SimpleTest loadSimpleXATest() throws Exception {
String test = "org.glassfish.jdbc.devtests.v3.test.SimpleXATest";
Class testClass = Class.forName(test);
Constructor c = testClass.getConstructor();
SimpleTest testInstance = (SimpleTest) c.newInstance();
return testInstance;
}
private SimpleTest loadStmtTimeoutTest() throws Exception {
String test = "org.glassfish.jdbc.devtests.v3.test.StatementTimeoutTest";
Class testClass = Class.forName(test);
Constructor c = testClass.getConstructor();
SimpleTest testInstance = (SimpleTest) c.newInstance();
return testInstance;
}
// </editor-fold>
}