/*
* JBoss, Home of Professional Open Source.
* Copyright 2011, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.as.connector.subsystems.complextestcases;
import java.util.Enumeration;
import java.util.Properties;
import org.jboss.dmr.ModelNode;
import org.junit.Assert;
/**Common utility class for parsing operation tests
*
* @author <a href="vrastsel@redhat.com">Vladimir Rastseluev</a>
*/
public class ParseUtils {
/**
* Returns common properties for both XA and Non-XA datasource
* @param indiName
*/
public static Properties commonDsProperties(String jndiName){
Properties params=new Properties();
//attributes
params.put("use-java-context","true");
params.put("spy","false");
params.put("use-ccm","true");
params.put("jndi-name", jndiName);
//common elements
params.put("driver-name","h2");
params.put("new-connection-sql","select 1");
params.put("transaction-isolation","TRANSACTION_READ_COMMITTED");
params.put("url-delimiter",":");
params.put("url-selector-strategy-class-name","someClass");
//pool
params.put("min-pool-size","1");
params.put("max-pool-size","5");
params.put("pool-prefill","true");
params.put("pool-use-strict-min","true");
params.put("flush-strategy","EntirePool");
//security
params.put("user-name","sa");
params.put("password","sa");
params.put("reauth-plugin-class-name","someClass1");
//validation
params.put("valid-connection-checker-class-name","someClass2");
params.put("check-valid-connection-sql","select 1");
params.put("validate-on-match","true");
params.put("background-validation","true");
params.put("background-validation-millis","2000");
params.put("use-fast-fail","true");
params.put("stale-connection-checker-class-name","someClass3");
params.put("exception-sorter-class-name","someClass4");
//time-out
params.put("blocking-timeout-wait-millis","20000");
params.put("idle-timeout-minutes","4");
params.put("set-tx-query-timeout","true");
params.put("query-timeout","120");
params.put("use-try-lock","100");
params.put("allocation-retry","2");
params.put("allocation-retry-wait-millis","3000");
//statement
params.put("track-statements","nowarn");
params.put("prepared-statements-cache-size","30");
params.put("share-prepared-statements","true");
return params;
}
/**
* Returns properties for complex XA datasource
* @param indiName
*/
public static Properties xaDsProperties(String jndiName){
Properties params=commonDsProperties(jndiName);
//attributes
//common
params.put("xa-datasource-class","org.jboss.as.connector.subsystems.datasources.ModifiableXaDataSource");
//xa-pool
params.put("same-rm-override","true");
params.put("interleaving","true");
params.put("no-tx-separate-pool","true");
params.put("pad-xid","true");
params.put("wrap-xa-resource","true");
//time-out
params.put("xa-resource-timeout","120");
//recovery
params.put("no-recovery","false");
params.put("recovery-plugin-class-name","someClass5");
params.put("recovery-username","sa");
params.put("recovery-password","sa");
return params;
}
/**
* Returns properties for non XA datasource
* @param jndiName
*/
public static Properties nonXaDsProperties(String jndiName){
Properties params=commonDsProperties(jndiName); //attributes
params.put("jta","false");
//common
params.put("driver-class","org.hsqldb.jdbcDriver");
params.put("datasource-class","org.jboss.as.connector.subsystems.datasources.ModifiableDataSource");
params.put("connection-url","jdbc:h2:mem:test;DB_CLOSE_DELAY=-1");
return params;
}
/**
* Returns common properties for resource-adapter element
*/
public static Properties raCommonProperties(){
Properties params=new Properties();
params.put("archive","some.rar");
params.put("transaction-support","XATransaction");
params.put("bootstrap-context","someContext");
return params;
}
/**
* Returns properties for RA connection-definition element
*/
public static Properties raConnectionProperties(){
Properties params=new Properties();
//attributes
params.put("use-java-context","false");
params.put("class-name","Class1");
params.put("use-ccm","true");
params.put("jndi-name", "java:jboss/name1");
params.put("enabled","false");
//pool
params.put("min-pool-size","1");
params.put("max-pool-size","5");
params.put("pool-prefill","true");
params.put("pool-use-strict-min","true");
params.put("flush-strategy","IdleConnections");
//xa-pool
params.put("same-rm-override","true");
params.put("interleaving","true");
params.put("no-tx-separate-pool","true");
params.put("pad-xid","true");
params.put("wrap-xa-resource","true");
//security
params.put("security-application","true");
//validation
params.put("background-validation","true");
params.put("background-validation-millis","5000");
params.put("use-fast-fail","true");
//time-out
params.put("blocking-timeout-wait-millis","5000");
params.put("idle-timeout-minutes","4");
params.put("allocation-retry","2");
params.put("allocation-retry-wait-millis","3000");
params.put("xa-resource-timeout","300");
//recovery
params.put("no-recovery","false");
params.put("recovery-plugin-class-name","someClass2");
params.put("recovery-username","sa");
params.put("recovery-password","sa-pass");
return params;
}
/**
* Returns properties for RA admin-object element
*/
public static Properties raAdminProperties(){
Properties params=new Properties();
//attributes
params.put("use-java-context","false");
params.put("class-name","Class3");
params.put("jndi-name", "java:jboss/Name3");
params.put("enabled","true");
return params;
}
/**
* Sets parameters for DMR operation
* @param operation
* @param params
*/
public static void setOperationParams(ModelNode operation,Properties params){
String str;
Enumeration<?> e = params.propertyNames();
while (e.hasMoreElements()) {
str=(String)e.nextElement();
operation.get(str).set(params.getProperty(str));
}
}
/**
* Adds properties of Extension type to the operation
* TODO: not implemented jet in DMR
*/
public static void addExtensionProperties(ModelNode operation){
/*
operation.get("reauth-plugin-properties","Property").set("A");
operation.get("valid-connection-checker-properties","Property").set("B");
operation.get("stale-connect,roperties","Property").set("C");
operation.get("exception-sorter-properties","Property").set("D");
*/
/*final ModelNode sourcePropertiesAddress = address.clone();
sourcePropertiesAddress.add("reauth-plugin-properties", "Property");
sourcePropertiesAddress.protect();
final ModelNode sourcePropertyOperation = new ModelNode();
sourcePropertyOperation.get(OP).set("add");
sourcePropertyOperation.get(OP_ADDR).set(sourcePropertiesAddress);
sourcePropertyOperation.get("value").set("A");
execute(sourcePropertyOperation);*/
}
/**
* Controls if result of reparsing contains certain parameters
* @param model
* @param params
*/
public static void checkModelParams(ModelNode node, Properties params){
String str;
StringBuffer sb = new StringBuffer();
String par,child;
Enumeration<?> e = params.propertyNames();
while (e.hasMoreElements()) {
str=(String)e.nextElement();
par=params.getProperty(str);
if (node.get(str) == null) {
sb.append("Parameter <"+str+"> is not set, but must be set to '"+par+"' \n");
}
else{
child= node.get(str).asString();
if (!child.equals(par)) {
sb.append("Parameter <"+str+"> is set to '"+child+"', but must be set to '"+par+"' \n");
}
}
}
if (sb.length()>0) Assert.fail("There are parsing errors:\n"+sb.toString()+"Parsed configuration:\n"+node);
}
}