package org.glassfish.jdbc.devtests.v3.test; import com.sun.faces.util.HtmlUtils; import java.io.PrintWriter; import java.sql.Connection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.sql.DataSource; import org.glassfish.jdbc.devtests.v3.util.HtmlUtil; /** * * @author jagadish */ public class MarkConnectionAsBadTest implements SimpleTest { Map<String, Boolean> resultsMap = new HashMap<String, Boolean>(); public Map<String, Boolean> runTest(DataSource ds1, PrintWriter out) { try { if (markConnectionAsBad_test_1(ds1, out)) { resultsMap.put("mark-connection-as-bad-1", true); } else { resultsMap.put("mark-connection-as-bad-1", false); } } catch (Exception e) { resultsMap.put("mark-connection-as-bad-1", false); } try { if (markConnectionAsBad_test_2(ds1, out)) { resultsMap.put("mark-connection-as-bad-2", true); } else { resultsMap.put("mark-connection-as-bad-2", false); } } catch (Exception e) { resultsMap.put("mark-connection-as-bad-2", false); } HtmlUtil.printHR(out); return resultsMap; } public boolean markConnectionAsBad_test_1(DataSource ds, PrintWriter out) { boolean result = true; Connection physicalConnection = null; Set physicalConnections = new HashSet(); com.sun.appserv.jdbc.DataSource ds1 = (com.sun.appserv.jdbc.DataSource) ds; Connection[] conn = new Connection[32]; out.println("<h4> Mark connection as bad - Test1 </h4>"); for (int i = 0; i < 32; i++) { try { conn[i] = ds.getConnection(); physicalConnections.add(ds1.getConnection(conn[i])); } catch (Exception e) { HtmlUtil.printException(e, out); result = false; } } for (int i = 0; i < 32; i++) { if (conn[i] != null) { try { ds1.markConnectionAsBad(conn[i]); conn[i].close(); } catch (Exception e1) { HtmlUtil.printException(e1, out); return false; //TEMPORARY; //result = false; } } } for (int i = 0; i < 32; i++) { try { conn[i] = ds.getConnection(); if (physicalConnections.contains(ds1.getConnection(conn[i]))) { result = false; } } catch (Exception e) { HtmlUtil.printException(e, out); result = false; } } for (int i = 0; i < 32; i++) { if (conn[i] != null) { try { conn[i].close(); } catch (Exception e1) { HtmlUtil.printException(e1, out); result = false; } } } out.println("<br> Test result : " + result); return result; } public boolean markConnectionAsBad_test_2(DataSource ds, PrintWriter out) { boolean result = true; Connection physicalConnection = null; Set physicalConnections = new HashSet(); com.sun.appserv.jdbc.DataSource ds1 = (com.sun.appserv.jdbc.DataSource) ds; Connection[] conn = new Connection[32]; out.println("<h4> Mark connection as bad - Test2 </h4>"); for (int i = 0; i < 32; i++) { try { conn[i] = ds.getConnection(); physicalConnections.add(ds1.getConnection(conn[i])); } catch (Exception e) { HtmlUtil.printException(e, out); result = false; } } for (int i = 0; i < 32; i++) { if (conn[i] != null) { try { conn[i].close(); } catch (Exception e1) { HtmlUtil.printException(e1, out); result = false; } } } for (int i = 0; i < 32; i++) { try { conn[i] = ds.getConnection(); if (!physicalConnections.contains(ds1.getConnection(conn[i]))) { result = false; } } catch (Exception e) { HtmlUtil.printException(e, out); result = false; } } for (int i = 0; i < 32; i++) { if (conn[i] != null) { try { conn[i].close(); } catch (Exception e1) { HtmlUtil.printException(e1, out); result = false; } } } out.println("<br> Test result : " + result); return result; } }