blob: c6c96ca5a597e072eaa5ebe16b1216260d6b9722 [file] [log] [blame]
/*
* Copyright (c) 2003, 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.enterprise.admin;
import javax.management.*;
import com.sun.enterprise.admin.meta.*;
import com.sun.enterprise.config.ConfigContext;
import com.sun.enterprise.config.ConfigFactory;
import java.lang.reflect.*;
import java.util.*;
import java.io.*;
//junit imports
import junit.framework.*;
import junit.textui.TestRunner;
public class AdminTester
{
static int COMPARESAMPLES_MODE = 0;
static int CREATESAMPLES_MODE = 1;
static int PRINT_MODE = 2;
static int _mode = COMPARESAMPLES_MODE;
static String SAMPLES_DIR = "samples";
TestCase _caller;
MBeanRegistry _registry;
ConfigContext _configContext;
static PrintWriter _printStream; //for CREATESAMPLES_MODE only
static LineNumberReader _compareStream; //for COMPARE_MODE only
public AdminTester(TestCase caller, int mode, MBeanRegistry registry, ConfigContext configContext, String testpath)
{
_caller = caller;
_mode=mode;
_registry=registry;
_configContext=configContext;
SAMPLES_DIR = testpath+"/samples";
}
public static void println(String str) throws Exception
{
int idx = 0;
while((idx=str.indexOf('\n'))>=0)
{
printSplitedLine(str.substring(0,idx));
str = str.substring(idx+1);
}
printSplitedLine(str);
}
public static void printSplitedLine(String str) throws Exception
{
if(_mode==CREATESAMPLES_MODE)
_printStream.println(str);
else if(_mode==PRINT_MODE)
System.out.println(str);
if(_mode==COMPARESAMPLES_MODE)
{
if(_compareStream==null)
{
// System.out.println("--- _compareStream = "+_compareStream);
// System.out.println("---"+ str );
return;
}
String compStr = _compareStream.readLine();
String str0 = str;
String compStr0 = compStr;
if(!str.equals(compStr))
throw new AdminTestException( _compareStream.getLineNumber(), str, compStr);
}
}
public static void title(String str) throws Exception
{
println("\n\n************* " + str + " *******************");
}
public static void printObj(String title, String pref, Object obj) throws Exception
{
println(title);
printObj(pref, obj);
}
public static void printObj(String pref, Object obj) throws Exception
{
if(pref==null)
pref="";
if(obj==null)
println(pref+"null");
if(obj instanceof Object[])
{
Object[] objs = (Object[])obj;
if(objs.length==0)
println(pref+"array.length = 0");
for(int i=0; i<objs.length; i++)
{
printObj(pref+" ["+i+"] -> ", objs[i]);
}
}
else if(obj instanceof ArrayList)
{
ArrayList objs = (ArrayList)obj;
if(objs.size()==0)
println(pref+"list.size() = 0");
for(int i=0; i<objs.size(); i++)
{
printObj(pref/*+" ["+i+"] -> "*/, objs.get(i));
}
}
else if(obj instanceof Attribute)
{
println(pref+ ((Attribute)obj).getName() + "=" + ((Attribute)obj).getValue());
}
else if(obj instanceof BaseAdminMBean)
{
String str = obj.toString();
//cut the address
int idx = str.lastIndexOf('@');
if(idx>=0)
str = str.substring(0, idx);
println(pref+ str);
}
else
{
println(pref + obj);
}
}
public static void printAllAttributes(String title, String pref, DynamicMBean mbean) throws Exception
{
printObj(title, pref, mbean.getAttributes(new String[]{""}));
}
public static void printAllProperties(String title, String pref, DynamicMBean mbean) throws Exception
{
Object ret = mbean.invoke("getProperties", null, null);
// retObject = mbean.invoke("deployApplication", new Object[]{"testName", "testLocation", null, null, null}, new String[]{"java.lang.String", "java.lang.String", "java.lang.String", "java.lang.String", "java.lang.String"});
printObj(title, pref, ret);
}
public static Object getConfigMbeanProperty(String name, DynamicMBean mbean) throws Exception
{
return mbean.invoke("getPropertyValue", new Object[]{name}, new String[]{"java.lang.String"});
}
public static void setConfigMbeanProperty(String name, Object value, DynamicMBean mbean) throws Exception
{
Object ret = mbean.invoke("setProperty", new Object[]{new Attribute(name, value)}, new String[]{"javax.management.Attribute"});
}
public String runTestCase(String testName, String sampleName) throws Exception
{
return runTestCase(new String[]{testName}, sampleName);
}
public String runTestCase(String[] testNames, String sampleName) throws Exception
{
if(_mode==CREATESAMPLES_MODE)
{
if(_printStream!=null)
{
_printStream.close();
_printStream=null;
}
_printStream = new PrintWriter(new FileOutputStream(SAMPLES_DIR+"/"+sampleName+".smp"));
}
else if(_mode==COMPARESAMPLES_MODE)
{
if(_compareStream!=null)
{
_compareStream.close();
_compareStream=null;
}
if(sampleName!=null)
_compareStream = new LineNumberReader(new FileReader(SAMPLES_DIR+"/"+sampleName+".smp"));
}
for(int i=0; i<testNames.length; i++)
{
Class cl = this.getClass();
Method method = cl.getMethod(testNames[i], (Class[])null);
try {
method.invoke(this, (Object[])null);
} catch (InvocationTargetException ite)
{
Throwable t = ite.getTargetException();
if(t instanceof AdminTestException)
{
return testNames[i]+": "+t.getMessage();
}
throw ite;
}
}
if(_mode==CREATESAMPLES_MODE)
{
if(_printStream!=null)
{
_printStream.close();
_printStream=null;
}
}
else if(_mode==COMPARESAMPLES_MODE)
{
if(_compareStream!=null)
{
_compareStream.close();
_compareStream=null;
}
}
return null;
}
String[] location;
BaseAdminMBean mbean;
AttributeList attrs;
Object retObject;
public void testMBeanRegistry() throws Exception
{
_registry.sortRegistryEntries(_registry.SORT_BY_NAME);
println(_registry.toString());
}
//***********************************************************************************************
//**** TestCase emulators ****
private void assertNull(String str, Object obj) throws Exception
{
if(_caller!=null)
_caller.assertNull(str, obj);
}
private void assertEquals(String str, Object obj, Object sample) throws Exception
{
if(_caller!=null)
_caller.assertEquals(str, obj, sample);
}
//***********************************************************************************************
public void testMBeansInstantiation() throws Exception
{
//***********************************************************************************************
title("ejb-container INSTANTIATION (type+location)");
location = new String[]{"testdomain", "server-config"};
mbean = _registry.instantiateMBean("ejb-container", location, null, _configContext);
assertNull("MBean Instaniation: mbean==null", mbean);
println(""+mbean.getAttribute("cache_resize_quantity"));
assertEquals("not equal", mbean.getAttribute("cache_resize_quantity"), new Integer(33));
//***********************************************************************************************
title("ejb-container INSTANTIATION (ObjectName)");
mbean = _registry.instantiateConfigMBean(new ObjectName("testdomain:type=ejb-container,config=server-config,category=config"),
null, _configContext);
println(""+mbean.getAttribute("cache_resize_quantity"));
//***********************************************************************************************
title("ejb-container INSTANTIATION (ObjectName)");
mbean = _registry.instantiateConfigMBean(new ObjectName("testdomain:type=ejb-container,config=server-config,category=config"),
null, _configContext);
println(""+mbean.getAttribute("cache_resize_quantity"));
//***********************************************************************************************
title("config INSTANTIATION By ObjectName");
mbean = _registry.instantiateConfigMBean(new ObjectName("testdomain:type=config,name=server-config,category=config"),
null, _configContext);
println("" + ((mbean!=null)?"ok":"failed"));
}
public void testMBeansInfo() throws Exception
{
}
public void testMBeansGettersSetters() throws Exception
{
//***********************************************************************************************
title("ejb-container INSTANTIATION");
location = new String[]{"testdomain", "server-config"};
mbean = _registry.instantiateMBean("ejb-container", location, null, _configContext);
println(""+mbean.getAttribute("cache_resize_quantity"));
//***********************************************************************************************
title("ejb-container set steady_pool_size to 20");
printAllAttributes("************BEFORE SET ******", " ", mbean);
mbean.setAttribute(new Attribute("steady_pool_size", (Object)"20"));
printAllAttributes("\n************AFTER SET******", " ", mbean);
}
public void testChildOperations() throws Exception
{
//***********************************************************************************************
title("resources Instantiate()");
location = new String[]{"testdomain"};
mbean = _registry.instantiateMBean("resources", location, null, _configContext);
//***********************************************************************************************
title("resources-> getCustomResource()");
retObject = mbean.invoke("getCustomResource", null, null); //new Object[]{}, new String[]{});
printObj("Returned object:", " ", retObject);
//***********************************************************************************************
title("resources-> createCustomResource(testJndiName2/testResType2/testFactoryClass2)");
attrs = new AttributeList();
attrs.add(new Attribute("jndi_name", "testJndiName2"));
attrs.add(new Attribute("res_type", "testResType2"));
attrs.add(new Attribute("factory_class", "testFactoryClass2"));
printObj("Input Attributes:", " ", attrs);
// retObject = mbean.invoke("createCustomResource", new Object[]{attrs, null, null},
// new String[]{attrs.getClass().getName(),"java.util.Properties","java.lang.String"});
retObject = mbean.invoke("createCustomResource", new Object[]{attrs}, new String[]{attrs.getClass().getName()});
printObj("Returned object:", " ", retObject);
//***********************************************************************************************
title("resources-> getCustomResourceByJndiName(testJndiName2)");
retObject = mbean.invoke("getCustomResourceByJndiName", new Object[]{"testJndiName2"}, new String[]{"java.lang.String"});
printObj("Returned object:", " ", retObject);
//***********************************************************************************************
title("resources-> getCustomResource()");
retObject = mbean.invoke("getCustomResource", null, null); //new Object[]{}, new String[]{});
printObj("Returned object:", " ", retObject);
//***********************************************************************************************
title("custom-resource-> Instantiate(testJndiName2)");
mbean = _registry .instantiateMBean("custom-resource", new String[]{"testdomain","testJndiName2"}, null, _configContext);
printObj("returned custom-resource[testJndiName2] mbean:",mbean);
//***********************************************************************************************
title("custom-resource[testJndiName2]-> getAttributes()");
printAllAttributes("Attributes:", " ", mbean);
//***********************************************************************************************
title("custom-resource-> Instantiate(testJndiName2) using ObjectName");
mbean = _registry .instantiateConfigMBean(new ObjectName("testdomain:type=custom-resource,jndi-name=testJndiName2,category=config"), null, _configContext);
printObj("returned custom-resource[testJndiName2] mbean:",mbean);
//***********************************************************************************************
title("custom-resource[testJndiName2]-> getAttributes()");
printAllAttributes("Attributes:", " ", mbean);
title("resources-> getCustomResource()");
location = new String[]{"testdomain"};
mbean = _registry .instantiateMBean("resources", location, null, _configContext);
retObject = mbean.invoke("getCustomResource", null, null); //new Object[]{}, new String[]{});
printObj("Returned object:"," ",retObject);
title("resources-> removeCustomResourceByJndiName(testJndiName2)");
retObject = mbean.invoke("removeCustomResourceByJndiName", new Object[]{"testJndiName2"}, new String[]{"java.lang.String"});
printObj("Returned object:", " ", retObject);
//***********************************************************************************************
title("resources-> getCustomResource()");
location = new String[]{"testdomain"};
mbean = _registry .instantiateMBean("resources", location, null, _configContext);
retObject = mbean.invoke("getCustomResource", null, null); //new Object[]{}, new String[]{});
printObj("Returned object:"," ",retObject);
}
public void testPropertiesOperations() throws Exception
{
//***********************************************************************************************
title("Domain MBean Instantiate()");
location = new String[]{"testdomain"};
mbean = _registry.instantiateMBean("domain", location, null, _configContext);
//***********************************************************************************************
title("Domain -> setProperty()");
setConfigMbeanProperty("testPropName1", "testPropValue1", mbean);
setConfigMbeanProperty("testPropName2", "testPropValue2", mbean);
setConfigMbeanProperty("testPropName3", "testPropValue3", mbean);
setConfigMbeanProperty("testPropName4", "testPropValue4", mbean);
//***********************************************************************************************
title("Domain -> getProperties()");
printAllProperties("Properties:", " ", mbean);
}
public void testDottedNamesProducers() throws Exception
{
}
public void testDefaultValues() throws Exception
{
//***********************************************************************************************
title("Domain MBean Instantiate()");
location = new String[]{"testdomain"};
mbean = _registry.instantiateMBean("domain", location, null, _configContext);
/* NEEDS TO BE INVESTIGATED for FCS why not working
printObj("Returned object:"," ",mbean);
title("getDefaultAttributeValues('http-listener', null) test");
retObject = mbean.invoke("getDefaultAttributeValues", new Object[]{"http-listener", null}, new String[]{"java.lang.String", (new String[0]).getClass().getName()});
printObj("Returned object:", " ", retObject);
title("getDefaultAttributeValues('ejb-container', null) test");
retObject = mbean.invoke("getDefaultAttributeValues", new Object[]{"ejb-container", null}, new String[]{"java.lang.String", (new String[0]).getClass().getName()});
printObj("Returned object:", " ", retObject);
*/
}
public void testMBeanArrayAttrs() throws Exception
{
//***********************************************************************************************
title("thread-pools Instantiate()");
location = new String[]{"testdomain", "server-config"};
mbean = _registry.instantiateMBean("thread-pools", location, null, _configContext);
printObj("Returned object:"," ",mbean);
title("thread-pools-> createThreadPool");
attrs = new AttributeList();
attrs.add(new Attribute("thread_pool_id", "mytestThreadPool"));
attrs.add(new Attribute("min_thread_pool_size", "100"));
attrs.add(new Attribute("max_thread_pool_size", "200"));
attrs.add(new Attribute("num_work_queues", "12"));
attrs.add(new Attribute("idle_thread_timeout_in_seconds", "50"));
printObj("Input Attributes:", " ", attrs);
retObject = mbean.invoke("createThreadPool", new Object[]{attrs}, new String[]{attrs.getClass().getName()});
printObj("Returned object:", " ", retObject);
}
}