blob: a9e4f69f2484e5f96a7e5aa7ad848b9fde254191 [file] [log] [blame]
/*
* Copyright (c) 2010, 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 admin;
import com.sun.appserv.test.BaseDevTest;
/*
import com.sun.messaging.AdminConnectionConfiguration;
import com.sun.messaging.AdminConnectionFactory;
*/
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import java.util.HashMap;
import java.util.Map;
/*
* @author Satish
*/
public class DynamicSyncBrokerListTest extends AdminBaseDevTest {
private static final String CLUSTER_NAME = "cluster1";
private static final String INSTANCE1_NAME = "instance1";
private static final String INSTANCE2_NAME = "instance2";
private static final String INSTANCE3_NAME = "instance3";
private static final String CLUSTER2_NAME = "cluster2";
public static void main(String[] args) {
new DynamicSyncBrokerListTest().runTests();
}
@Override
protected String getTestDescription() {
return "Unit test for the dynamic sync list broker feature";
}
@Override
public void cleanup() {
try {
asadmin("stop-local-instance", INSTANCE1_NAME);
asadmin("stop-local-instance", INSTANCE2_NAME);
asadmin("stop-cluster", CLUSTER_NAME);
//asadmin("stop-cluster", CLUSTER2_NAME);
asadmin("delete-local-instance", INSTANCE1_NAME);
asadmin("delete-local-instance", INSTANCE2_NAME);
asadmin("delete-cluster", CLUSTER_NAME);
//asadmin("delete-cluster", CLUSTER2_NAME);
asadmin("stop-database");
} catch (Exception e) {
e.printStackTrace();
}
}
public void runTests() {
startDomain();
asadmin("create-cluster", CLUSTER_NAME);
asadmin("create-local-instance", "--cluster", CLUSTER_NAME,
/*"--node", "localhost",*/ "--systemproperties",
"HTTP_LISTENER_PORT=18080:HTTP_SSL_LISTENER_PORT=18181:IIOP_SSL_LISTENER_PORT=13800:IIOP_LISTENER_PORT=13700:JMX_SYSTEM_CONNECTOR_PORT=17676:IIOP_SSL_MUTUALAUTH_PORT=13801:JMS_PROVIDER_PORT=18686:ASADMIN_LISTENER_PORT=14848",
INSTANCE1_NAME);
asadmin("create-local-instance", "--cluster", CLUSTER_NAME,
/*"--node", "localhost",*/ "--systemproperties",
"HTTP_LISTENER_PORT=28080:HTTP_SSL_LISTENER_PORT=28181:IIOP_SSL_LISTENER_PORT=23800:IIOP_LISTENER_PORT=23700:JMX_SYSTEM_CONNECTOR_PORT=27676:IIOP_SSL_MUTUALAUTH_PORT=23801:JMS_PROVIDER_PORT=28686:ASADMIN_LISTENER_PORT=24848",
INSTANCE2_NAME);
asadmin("start-cluster", CLUSTER_NAME);
asadmin("create-local-instance",
"--node", "localhost-domain1","--cluster", CLUSTER_NAME, "--systemproperties",
"HTTP_LISTENER_PORT=28080:HTTP_SSL_LISTENER_PORT=38181:IIOP_SSL_LISTENER_PORT=33800:IIOP_LISTENER_PORT=33700:JMX_SYSTEM_CONNECTOR_PORT=37676:IIOP_SSL_MUTUALAUTH_PORT=33801:JMS_PROVIDER_PORT=38686:ASADMIN_LISTENER_PORT=34848",
INSTANCE3_NAME);
checkAdd2brokerlist("18686");
asadmin("stop-local-instance", INSTANCE3_NAME);
asadmin("delete-local-instance", INSTANCE3_NAME);
checkDeleteFromBrokerlist("18686");
cleanup();
stopDomain();
stat.printSummary();
}
private void checkAdd2brokerlist(String jmsport){
String testName = "InstanceAdditionJmsClusterCheck";
Object retval = jmxCall(jmsport, "com.sun.messaging.jms.server:type=Cluster,subtype=Monitor");
AsadminReturn result = new AsadminReturn();
if (retval != null && retval instanceof String[]){
String[] addresses = (String[]) retval;
result.out="";
result.err="";
for(String address : addresses)
result.out=result.out + address + ",";
System.out.println("Broker Address List " + result.out);
if (addresses.length == 3) {
result.returnValue=true;
}
} else result.returnValue=false;
reportResultStatus(testName, result);
reportExpectedResult(testName, result, "38686");
}
private void checkDeleteFromBrokerlist(String jmsport){
String testName = "InstanceDeletionJmsClusterCheck";
Object retval = jmxCall(jmsport, "com.sun.messaging.jms.server:type=Cluster,subtype=Monitor");
AsadminReturn result = new AsadminReturn();
if (retval != null && retval instanceof String[]){
String[] addresses = (String[]) retval;
result.out="";
result.err="";
for(String address : addresses)
result.out=result.out + address + ",";
System.out.println("Broker Address List " + result.out);
if (addresses.length == 2) {
result.returnValue=true;
}
} else result.returnValue=false;
reportResultStatus(testName, result);
reportExpectedFailureResult(testName, result, "38686");
}
public Object jmxCall(String jmsProviderPort, String objectName){
/*
* Commented out because building this code depends on having GlassFish already downloaded.
* The admin devtest must build without having GlassFish present.
try{
AdminConnectionFactory acf = new AdminConnectionFactory();
acf.setProperty(AdminConnectionConfiguration.imqAddress, "localhost:" + jmsProviderPort);
JMXConnector connector = acf.createConnection("admin","admin");
MBeanServerConnection mbsc = connector.getMBeanServerConnection();
System.out.println("connected to target server");
ObjectName objName
= new ObjectName(objectName); //"com.sun.messaging.jms.server:type=Broker,subtype=Monitor");
Object [] params = null;
String [] signature = new String[0];
Object retval= mbsc.invoke(objName, "getBrokerAddresses", params, signature);
connector.close();
return retval;
}catch(Exception ex){
ex.printStackTrace();
}
*/
return null;
}
private void reportFailureResultStatus(String testName, AsadminReturn result) {
report(testName, ! result.returnValue);
report(testName, ! result.err.isEmpty());
}
private void reportResultStatus(String testName, AsadminReturn result) {
report(testName, result.returnValue);
report(testName, result.err.isEmpty());
}
private void reportExpectedFailureResult(String testName, AsadminReturn result, String... expected) {
for (String token : expected) {
report(testName, ! result.out.contains(token));
}
}
private void reportExpectedResult(String testName, AsadminReturn result, String... expected) {
for (String token : expected) {
report(testName, result.out.contains(token));
}
}
private void reportUnexpectedResult(String testName, AsadminReturn result, String... unexpected) {
for (String token : unexpected) {
report(testName, !result.out.contains(token));
}
}
}