| /* |
| * 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); |
| } |
| |
| } |