blob: d1857f44d6c936c4fda8736246f52b8edea0ae4c [file] [log] [blame]
/*
* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
*
* @summary converted from VM Testbase nsk/jdi/PlugConnectors/LaunchConnector/plugLaunchConnect002.
* VM Testbase keywords: [quick, jpda, jdi]
* VM Testbase readme:
* DESCRIPTION:
* nsk/jdi/PlugConnectors/LaunchConnector/plugLaunchConnect002 test:
* This test is the test for the mechanism for creating pluggable Connectors
* on base of classes which implement the Connector interfaces
* (AttachingConnector, ListeningConnector, or LaunchingConnector).
* The test checks up that at start-up time when
* Bootstrap.virtualMachineManager() is invoked the pluggable
* connector named "PlugLaunchConnector002_Name" is created on base
* of PlugLaunchConnector002 class which implements
* com.sun.jdi.connect.LaunchingConnector interface.
* This pluggable connector has to be contained in lists returned
* by VirtualMachineManager.launchingConnectors() and
* by VirtualMachineManager.allConnectors() methods.
* This pluggable connector has to have:
* Connector.description() = "PlugLaunchConnector002_Description";
* Connector.transport().name() = "PlugLaunchConnector002_Transport";
* Connector.defaultArguments() = List of 4 Connector.Argument:
* Connector.StringArgument named
* 'PlugLaunchConnector002_StringArgument_Name'
* Connector.IntegerArgument named
* 'PlugLaunchConnector002_IntegerArgument_Name'
* Connector.BooleanArgument named
* 'PlugLaunchConnector002_BooleanArgument_Name'
* Connector.SelectedArgument named
* 'PlugLaunchConnector002_SelectedArgument_Name'
* COMMENTS:
* Fixed bug 6426609: nsk/share/jdi/plug_connectors_jar_file.pl should use
* "system" instead of back-quotes
*
* @library /vmTestbase
* /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @build nsk.jdi.PlugConnectors.LaunchConnector.plugLaunchConnect002.plugLaunchConnect002
*
* @comment build connectors.jar to jars
* @build nsk.share.jdi.PlugConnectors
* @run driver nsk.jdi.ConnectorsJarBuilder
*
* @build ExecDriver
* @run driver PropertyResolvingWrapper ExecDriver --java
* -cp jars${file.separator}connectors.jar${path.separator}${test.class.path}
* nsk.jdi.PlugConnectors.LaunchConnector.plugLaunchConnect002.plugLaunchConnect002
* -verbose
* -arch=${os.family}-${os.simpleArch}
* -waittime=5
* -debugee.vmkind=java
* -transport.address=dynamic
*/
package nsk.jdi.PlugConnectors.LaunchConnector.plugLaunchConnect002;
import nsk.jdi.PlugConnectors.LaunchConnector.plugLaunchConnect002.connectors.*;
import nsk.share.*;
import nsk.share.jdi.*;
import com.sun.jdi.*;
import com.sun.jdi.connect.*;
import java.util.*;
import java.io.*;
/**
* The test for the mechanism for creating pluggable Connectors <BR>
* on base of classes which implement the Connector interfaces <BR>
* (AttachingConnector, ListeningConnector, or LaunchingConnector). <BR>
* <BR>
* The test checks up that at start-up time when <BR>
* Bootstrap.virtualMachineManager() is invoked the pluggable <BR>
* connector named "PlugLaunchConnector002_Name" is created on base <BR>
* of PlugLaunchConnector002 class which implements <BR>
* com.sun.jdi.connect.LaunchingConnector interface. <BR>
* <BR>
* This pluggable connector has to be contained in lists returned <BR>
* by VirtualMachineManager.launchingConnectors() and <BR>
* by VirtualMachineManager.allConnectors() methods. <BR>
* <BR>
* This pluggable connector has to have: <BR>
* Connector.description() = "PlugLaunchConnector002_Description"; <BR>
* Connector.transport().name() = "PlugLaunchConnector002_Transport"; <BR>
* Connector.defaultArguments() = List of 4 Connector.Argument: <BR>
* Connector.StringArgument named <BR>
* 'PlugLaunchConnector002_StringArgument_Name' <BR>
* Connector.IntegerArgument named <BR>
* 'PlugLaunchConnector002_IntegerArgument_Name' <BR>
* Connector.BooleanArgument named <BR>
* 'PlugLaunchConnector002_BooleanArgument_Name' <BR>
* Connector.SelectedArgument named <BR>
* 'PlugLaunchConnector002_SelectedArgument_Name' <BR>
* <BR>
*/
public class plugLaunchConnect002 {
static final int STATUS_PASSED = 0;
static final int STATUS_FAILED = 2;
static final int STATUS_TEMP = 95;
static final String errorLogPrefixHead = "plugLaunchConnect002: ";
static final String errorLogPrefix = " ";
static final String infoLogPrefixNead = "--> plugLaunchConnect002: ";
static final String infoLogPrefix = "--> ";
static ArgumentHandler argsHandler;
static Log logHandler;
private static void logOnVerbose(String message) {
logHandler.display(message);
}
private static void logOnError(String message) {
logHandler.complain(message);
}
private static void logAlways(String message) {
logHandler.println(message);
}
public static void main (String argv[]) {
int result = run(argv, System.out);
System.exit(result + STATUS_TEMP);
}
public static int run (String argv[], PrintStream out) {
int result = new plugLaunchConnect002().runThis(argv, out);
if ( result == STATUS_FAILED ) {
logAlways("\n##> nsk/jdi/PlugConnectors/LaunchConnector/plugLaunchConnect002 test FAILED");
}
else {
logAlways("\n==> nsk/jdi/PlugConnectors/LaunchConnector/plugLaunchConnect002 test PASSED");
}
return result;
}
private int runThis (String argv[], PrintStream out) {
int testResult = STATUS_PASSED;
argsHandler = new ArgumentHandler(argv);
logHandler = new Log(out, argsHandler);
logHandler.enableErrorsSummary(false);
String checkedPlugLaunchConnectorName = "PlugLaunchConnector002_Name";
String checkedPlugLaunchConnectorDescription = "PlugLaunchConnector002_Description";
String checkedPlugLaunchConnectorTransportName = "PlugLaunchConnector002_Transport";
logAlways("==> nsk/jdi/PlugConnectors/LaunchConnector/plugLaunchConnect002 test...");
logOnVerbose
("==> Test checks that expected pluggable launching connector is created properly.");
VirtualMachineManager virtualMachineManager = Bootstrap.virtualMachineManager();
if (virtualMachineManager == null) {
logOnError(errorLogPrefixHead + "Bootstrap.virtualMachineManager() returns null.");
return STATUS_FAILED;
}
// check that expected pluggable launching connector is found out in launchingConnectors() List
List launchingConnectorsList = virtualMachineManager.launchingConnectors();
int launchingConnectorsNumber = launchingConnectorsList.size();
LaunchingConnector checkedPlugLaunchConnector = null;
for (int i=0; i < launchingConnectorsNumber; i++ ) {
LaunchingConnector launchingConnector = (LaunchingConnector)launchingConnectorsList.get(i);
String launchConnectorName = launchingConnector.name();
if ( checkedPlugLaunchConnectorName.equals(launchConnectorName) ) {
checkedPlugLaunchConnector = launchingConnector;
break;
}
}
if ( checkedPlugLaunchConnector == null ) {
logOnError(errorLogPrefixHead + "Expected pluggable launching connector is NOT found out.");
logOnError(errorLogPrefix + "Expected connector name = '" + checkedPlugLaunchConnectorName + "'");
return STATUS_FAILED;
}
// check that expected pluggable launching connector is found out in allConnectors() List too
List allConnectorsList = virtualMachineManager.allConnectors();
int allConnectorsNumber = allConnectorsList.size();
boolean checkedPlugLaunchConnectorFound = false;
for (int i=0; i < allConnectorsNumber; i++ ) {
Connector foundConnector = (Connector)allConnectorsList.get(i);
if ( foundConnector instanceof LaunchingConnector ) {
LaunchingConnector foundLaunchingConnector = (LaunchingConnector)foundConnector;
if ( checkedPlugLaunchConnector.equals(foundLaunchingConnector) ) {
checkedPlugLaunchConnectorFound = true;
break;
}
}
}
if ( ! checkedPlugLaunchConnectorFound ) {
logOnError(errorLogPrefixHead
+ "Expected pluggable launching connector is NOT found out in allConnectors() List");
logOnError(errorLogPrefix + "Expected connector = " + checkedPlugLaunchConnector);
testResult = STATUS_FAILED;
}
LaunchingConnector referencePlugLaunchConnector = new PlugLaunchConnector002();
String emptyString = "";
String errorMessage = PlugConnectors.compareConnectors(
errorLogPrefixHead,
errorLogPrefix,
referencePlugLaunchConnector,
checkedPlugLaunchConnector);
if ( ! emptyString.equals(errorMessage) ) {
logOnError(errorMessage);
return STATUS_FAILED;
}
// check default Arguments of checked pluggable connector
// strings below are for info only
// String plugLaunchConnectorStringArgumentKey = "PlugLaunchConnector002_StringArgument_Key";
// String plugLaunchConnectorIntegerArgumentKey = "PlugLaunchConnector002_IntegerArgument_Key";
// String plugLaunchConnectorBooleanArgumentKey = "PlugLaunchConnector002_BooleanArgument_Key";
// String plugLaunchConnectorSelectedArgumentKey = "PlugLaunchConnector002_SelectedArgument_Key";
Map referenceDefaultArguments = referencePlugLaunchConnector.defaultArguments();
Map checkedDefaultArguments = checkedPlugLaunchConnector.defaultArguments();
int referenceDefaultArgumentsNumber = referenceDefaultArguments.size();
Object[] referenceDefaultArgumentsKeys = referenceDefaultArguments.keySet().toArray();
for (int i=0; i < referenceDefaultArgumentsNumber; i++) {
String referenceKey = (String)referenceDefaultArgumentsKeys[i];
Connector.Argument referenceArgument =
(Connector.Argument)(referenceDefaultArguments.get(referenceKey));
Connector.Argument checkedArgument =
(Connector.Argument)(checkedDefaultArguments.get(referenceKey));
errorMessage = PlugConnectors.compareConnectorArguments(
errorLogPrefixHead,
errorLogPrefix,
referenceArgument,
checkedArgument);
if ( ! emptyString.equals(errorMessage) ) {
logOnError(errorMessage);
testResult = STATUS_FAILED;
}
}
return testResult;
}
} // end of plugLaunchConnect002 class