blob: 5140b91fa00ad0888e9b931b524b312beff5202a [file] [log] [blame]
/*
* Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package com.sun.s1asdev.jdbc.markconnectionasbad.xa.client;
import javax.naming.*;
import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
import java.util.Set;
import java.util.HashSet;
import java.sql.*;
public class Client {
SimpleReporterAdapter stat = new SimpleReporterAdapter();
public static final int MAX_POOL_SIZE = 5;
public static void main(String[] args)
throws Exception {
Client client = new Client();
client.runTest();
}
public void runTest() throws Exception {
Set<Integer> localdsSet = new HashSet();
Set<Integer> localdsAfterSet = new HashSet();
int countLocalds = 0;
InitialContext ic = new InitialContext();
com.sun.appserv.jdbc.DataSource ds = (com.sun.appserv.jdbc.DataSource) ic.lookup("jdbc/localdatasource");
stat.addDescription("DMMCF Mark-Connection-As-Bad Appclient ");
localdsSet = getFromLocalDS(MAX_POOL_SIZE, ds);
System.out.println("localds = " + localdsSet);
//jdbc-local-pool
test1(ds);
localdsAfterSet = getFromLocalDS(MAX_POOL_SIZE, ds);
System.out.println("localdsAfter = " + localdsAfterSet);
countLocalds = compareAndGetCount(localdsSet, localdsAfterSet);
if(MAX_POOL_SIZE-countLocalds == 5) {
stat.addStatus(" Mark-Connection-As-Bad destroyedCount localds: ", stat.PASS);
} else {
stat.addStatus(" Mark-Connection-As-Bad destroyedCount localds: ", stat.FAIL);
}
stat.printSummary();
}
public int compareAndGetCount(Set<Integer> beforeSet, Set<Integer> afterSet) {
//denotes the count of hashcodes that matched in both sets.
int contains = 0;
if(!beforeSet.containsAll(afterSet)) {
//if it does not contain all the elements of the after set
//find how many are absent from the beforeSet
for(int afterInt : afterSet) {
if(beforeSet.contains(afterInt)) {
contains++;
}
}
}
return contains;
}
public Set<Integer> getFromLocalDS(int count, com.sun.appserv.jdbc.DataSource localds1) {
int connHashCode = 0;
Connection conn = null;
Set<Integer> hashCodeSet = new HashSet();
for (int i = 0; i < count; i++) {
try {
conn = localds1.getNonTxConnection();
connHashCode = (localds1.getConnection(conn)).hashCode();
hashCodeSet.add(connHashCode);
} catch (Exception e) {
} finally {
if (conn != null) {
try {
conn.close();
} catch (Exception e1) {
}
}
}
}
return hashCodeSet;
}
/* Read Operation - Driver - shareable */
public boolean test1(com.sun.appserv.jdbc.DataSource localds1) {
boolean passed = true;
for (int i = 0; i < 5; i++) {
Connection conn = null;
try {
conn = localds1.getConnection();
} catch (Exception e) {
passed = false;
} finally {
if (conn != null) {
try {
localds1.markConnectionAsBad(conn);
conn.close();
} catch (Exception e1) {
}
}
}
}
return passed;
}
}