blob: 6c5bc524a6f9f3621d54aded7b94497f9395b05b [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.
*/
/*
* A Super class for pluggable connectors used by
* nsk/jdi/PlugConnectors tests
*/
package nsk.share.jdi;
import com.sun.jdi.*;
import com.sun.jdi.connect.*;
import java.io.*;
import java.util.*;
public class PlugConnectors implements Connector {
String plugConnectorName = "Undefined_PlugConnector_Name";
String plugConnectorDescription = "Undefined_PlugConnector_Description";
Transport plugConnectorTransport = new PlugConnectorsTransport();
Map<java.lang.String,com.sun.jdi.connect.Connector.Argument> plugConnectorDefaultArguments = new HashMap<java.lang.String,com.sun.jdi.connect.Connector.Argument>();
/*
* Simple implementation of Connector.Argument
*/
public static class TestArgument implements Connector.Argument {
String argName;
String argLabel;
String argDescription;
String argStringValue;
boolean argMustSpecify;
public TestArgument(
String argName,
String argLabel,
String argDescription,
String argValue,
boolean argMustSpecify) {
this.argName = argName;
this.argLabel = argLabel;
this.argDescription = argDescription;
this.argStringValue = argValue;
this.argMustSpecify = argMustSpecify;
}
public String name() {
return argName;
}
public String label() {
return argLabel;
}
public String description() {
return argDescription;
}
public String value() {
return argStringValue;
}
public void setValue(String argValue) {
this.argStringValue = argValue;
}
public boolean isValid(String argValue) {
if ( argValue != null ) {
if (argValue.length() > 0) {
return true;
}
}
return false;
}
public boolean mustSpecify() {
return argMustSpecify;
}
} // end of TestArgument static class
/*
* Simple implementation of Connector.StringArgument
*/
public static class TestStringArgument extends TestArgument implements Connector.StringArgument {
public TestStringArgument( String argName,
String argLabel,
String argDescription,
String argValue,
boolean argMustSpecify) {
super(argName, argLabel, argDescription, argValue, argMustSpecify);
}
} // end of TestStringArgument static class
/*
* Simple implementation of Connector.IntegerArgument
*/
public static class TestIntegerArgument extends TestArgument implements Connector.IntegerArgument {
int argIntValue;
int minArgIntValue;
int maxArgIntValue;
public TestIntegerArgument(String argName,
String argLabel,
String argDescription,
int argValue,
int minArgIntValue,
int maxArgIntValue,
boolean argMustSpecify) {
super(argName, argLabel, argDescription, "" + argValue, argMustSpecify);
this.argIntValue = argValue;
this.minArgIntValue = minArgIntValue;
this.maxArgIntValue = maxArgIntValue;
}
public int intValue() {
return argIntValue;
}
public boolean isValid(int value) {
if ( value >= minArgIntValue && value <= maxArgIntValue ) {
return true;
}
return false;
}
public boolean isValid(String stringValue) {
int intValue;
try {
intValue = Integer.parseInt(stringValue);
} catch (NumberFormatException exception) {
return false;
}
return isValid(intValue);
}
public int max() {
return maxArgIntValue;
}
public int min() {
return minArgIntValue;
}
public void setValue(int value) {
argIntValue = value;
}
public String stringValueOf(int value) {
return "" + value;
}
} // end of TestIntegerArgument static class
/*
* Simple implementation of Connector.BooleanArgument
*/
public static class TestBooleanArgument extends TestArgument implements Connector.BooleanArgument {
static final String argStringValueTrue = "true";
static final String argStringValueFalse = "false";
boolean argBooleanValue;
public TestBooleanArgument(String argName,
String argLabel,
String argDescription,
boolean argValue,
boolean argMustSpecify) {
super(argName, argLabel, argDescription,
argValue ? argStringValueTrue : argStringValueFalse,
argMustSpecify);
this.argBooleanValue = argValue;
}
public boolean booleanValue() {
return argBooleanValue;
}
public boolean isValid(String stringValue) {
if ( argStringValueTrue.equals(stringValue) || argStringValueFalse.equals(stringValue) ) {
return true;
}
return false;
}
public void setValue(boolean value) {
argBooleanValue = value;
}
public String stringValueOf(boolean value) {
if ( value ) {
return argStringValueTrue;
}
return argStringValueFalse;
}
} // end of TestBooleanArgument static class
/*
* Simple implementation of Connector.SelectedArgument
*/
public static class TestSelectedArgument extends TestArgument implements Connector.SelectedArgument {
List<String> acceptableArgsList;
public TestSelectedArgument( String argName,
String argLabel,
String argDescription,
String argValue,
List<String> acceptableArgsList,
boolean argMustSpecify) {
super(argName, argLabel, argDescription, argValue, argMustSpecify);
this.acceptableArgsList = acceptableArgsList;
}
public List<String> choices() {
return acceptableArgsList;
}
public boolean isValid(String stringValue) {
return acceptableArgsList.contains(stringValue);
}
} // end of TestSelectedArgument static class
public PlugConnectors(
String plugConnectorName,
String plugConnectorDescription,
Transport plugConnectorTransport,
Map<java.lang.String,com.sun.jdi.connect.Connector.Argument> plugConnectorDefaultArguments
) {
this.plugConnectorName = plugConnectorName;
this.plugConnectorDescription = plugConnectorDescription;
this.plugConnectorTransport = plugConnectorTransport;
this.plugConnectorDefaultArguments = plugConnectorDefaultArguments;
}
public String name() {
return plugConnectorName;
}
public String description() {
return plugConnectorDescription;
}
public Transport transport() {
return plugConnectorTransport;
}
public Map<java.lang.String,com.sun.jdi.connect.Connector.Argument> defaultArguments() {
return plugConnectorDefaultArguments;
}
public VirtualMachine launch(Map<String,? extends Connector.Argument> arguments) throws
IOException,
IllegalConnectorArgumentsException,
VMStartException {
String exceptionMessage = "## PlugConnectors: Connector name = '" +
plugConnectorName + "';\nNon-authorized call of launch(...) method!";
if ( true ) {
throw new RuntimeException(exceptionMessage);
}
return null;
}
public VirtualMachine attach(Map<String,? extends Connector.Argument> arguments) throws
java.io.IOException,
IllegalConnectorArgumentsException {
String exceptionMessage = "## PlugConnectors: Connector name = '" +
plugConnectorName + "';\nNon-authorized call of attach(...) method!";
if ( true ) {
throw new RuntimeException(exceptionMessage);
}
return null;
}
public String startListening(Map<String,? extends Connector.Argument> arguments) throws
java.io.IOException,
IllegalConnectorArgumentsException {
String exceptionMessage = "## PlugConnectors: Connector name = '" +
plugConnectorName + "';\nNon-authorized call of startListening(...) method!";
if ( true ) {
throw new RuntimeException(exceptionMessage);
}
return null;
}
public void stopListening(Map<String,? extends Connector.Argument> arguments) throws
java.io.IOException,
IllegalConnectorArgumentsException {
String exceptionMessage = "## PlugConnectors: Connector name = '" +
plugConnectorName + "';\nNon-authorized call of stopListening(...) method!";
if ( true ) {
throw new RuntimeException(exceptionMessage);
}
}
public VirtualMachine accept(Map<String,? extends Connector.Argument> arguments) throws
java.io.IOException,
IllegalConnectorArgumentsException {
String exceptionMessage = "## PlugConnectors: Connector name = '" +
plugConnectorName + "';\nNon-authorized call of accept(...) method!";
if ( true ) {
throw new RuntimeException(exceptionMessage);
}
return null;
}
public boolean supportsMultipleConnections() {
String exceptionMessage = "## PlugConnectors: Connector name = '" +
plugConnectorName + "';\nNon-authorized call of supportsMultipleConnections() method!";
if ( true ) {
throw new RuntimeException(exceptionMessage);
}
return false;
}
public static class PlugConnectorsTransport implements Transport {
String transportName = "Undefined_Transport_Name";
public PlugConnectorsTransport() {
}
public PlugConnectorsTransport(String transportName) {
this.transportName = transportName;
}
public String name() {
return transportName;
}
} // end of PlugConnectorsTransport class
// Auxiliary general purpose methods for pluggable connectors' tests.
public static String compareConnectors(
String errorLogPrefixHead,
String errorLogPrefix,
Connector referenceConnector,
Connector checkedConnector) {
String emptyString = "";
String errorMessage = emptyString;
// check that connectors have the same name
String referenceConnectorName = referenceConnector.name();
String checkedConnectorName = checkedConnector.name();
if ( ! referenceConnectorName.equals(checkedConnectorName) ) {
errorMessage = errorMessage +
errorLogPrefixHead + "Checked pluggable Connector has unexpected name:\n"
+ errorLogPrefix + "Expected Connector's name = '" + referenceConnectorName + "'\n"
+ errorLogPrefix + "Actual Connector's name = '" + checkedConnectorName + "'\n";
}
// check that connectors have the same description
String referenceConnectorDescription = referenceConnector.description();
String checkedConnectorDescription = checkedConnector.description();
if ( ! referenceConnectorDescription.equals(checkedConnectorDescription) ) {
errorMessage = errorMessage +
errorLogPrefixHead + "Checked pluggable Connector has unexpected description:\n"
+ errorLogPrefix + "Expected Connector's description = '" + referenceConnectorDescription + "'\n"
+ errorLogPrefix + "Actual Connector's description = '" + checkedConnectorDescription + "'\n";
}
// check that connectors have the same transport name
String referenceConnectorTransportName = referenceConnector.transport().name();
String checkedConnectorTransportName = checkedConnector.transport().name();
if ( ! referenceConnectorTransportName.equals(checkedConnectorTransportName) ) {
errorMessage = errorMessage +
errorLogPrefixHead + "Checked pluggable Connector has unexpected transport name:\n"
+ errorLogPrefix + "Expected Connector's transport name = '" + referenceConnectorTransportName + "'\n"
+ errorLogPrefix + "Actual Connector's transport name = '" + checkedConnectorTransportName + "'\n";
}
// check that connectors have the same number of default arguments
int referenceConnectorArgumentsNumber = referenceConnector.defaultArguments().size();
int checkedConnectorArgumentsNumber = checkedConnector.defaultArguments().size();
if ( referenceConnectorArgumentsNumber != checkedConnectorArgumentsNumber ) {
errorMessage = errorMessage +
errorLogPrefixHead + "Checked pluggable Connector has unexpected number of default arguments:\n"
+ errorLogPrefix + "Expected number of default arguments = '" + referenceConnectorArgumentsNumber + "'\n"
+ errorLogPrefix + "Actual number of default arguments = '" + checkedConnectorArgumentsNumber + "'\n";
}
return errorMessage;
} // end of compareConnectors(...) method
public static String compareConnectorArguments(
String errorLogPrefixHead,
String errorLogPrefix,
Connector.Argument referenceArgument,
Connector.Argument checkedArgument) {
String emptyString = "";
String errorMessage = emptyString;
if ( referenceArgument == null ) {
errorMessage =
errorLogPrefixHead + "Reference connector's argument is null!\n";
}
if ( checkedArgument == null ) {
errorMessage = errorMessage +
errorLogPrefixHead + "Checked connector's argument is null!\n";
}
if ( ! errorMessage.equals(emptyString) ) {
return errorMessage;
}
String referenceArgumentName = referenceArgument.name();
String checkedArgumentName = checkedArgument.name();
if ( ! referenceArgumentName.equals(checkedArgumentName) ) {
errorMessage =
errorLogPrefixHead + "Checked connector's argument has unexpected name:\n"
+ errorLogPrefix + "Expected connector's argument name = '" + referenceArgumentName + "'\n"
+ errorLogPrefix + "Actual connector's argument name = '" + checkedArgumentName + "'";
return errorMessage;
}
String referenceArgumentLabel = referenceArgument.label();
String checkedArgumentLabel = checkedArgument.label();
if ( ! referenceArgumentLabel.equals(checkedArgumentLabel) ) {
errorMessage =
errorLogPrefixHead + "Checked connector's argument has unexpected label:\n"
+ errorLogPrefix + "Expected connector's argument label = '" + referenceArgumentLabel + "'\n"
+ errorLogPrefix + "Actual connector's argument label = '" + checkedArgumentLabel + "'";
return errorMessage;
}
String referenceArgumentDescription = referenceArgument.description();
String checkedArgumentDescription = checkedArgument.description();
if ( ! referenceArgumentDescription.equals(checkedArgumentDescription) ) {
errorMessage =
errorLogPrefixHead + "Checked connector's argument has unexpected description:\n"
+ errorLogPrefix + "Expected connector's argument description = '" + referenceArgumentDescription + "'\n"
+ errorLogPrefix + "Actual connector's argument description = '" + checkedArgumentDescription + "'";
return errorMessage;
}
String referenceArgumentValue = referenceArgument.value();
String checkedArgumentValue = checkedArgument.value();
if ( ! referenceArgumentValue.equals(checkedArgumentValue) ) {
errorMessage =
errorLogPrefixHead + "Checked connector's argument has unexpected value:\n"
+ errorLogPrefix + "Expected connector's argument value = '" + referenceArgumentValue + "'\n"
+ errorLogPrefix + "Actual connector's argument value = '" + checkedArgumentValue + "'";
return errorMessage;
}
boolean referenceArgumentMustSpecify = referenceArgument.mustSpecify();
boolean checkedArgumentMustSpecify = checkedArgument.mustSpecify();
if ( referenceArgumentMustSpecify != checkedArgumentMustSpecify ) {
errorMessage =
errorLogPrefixHead + "Checked connector's argument has unexpected 'mustSpecify' property:\n"
+ errorLogPrefix + "Expected connector's argument 'mustSpecify' property = '"
+ referenceArgumentMustSpecify + "'\n"
+ errorLogPrefix + "Actual connector's argument 'mustSpecify' property = '"
+ checkedArgumentMustSpecify + "'";
return errorMessage;
}
if ( referenceArgument instanceof Connector.IntegerArgument ) {
int referenceArgumentMin = ((Connector.IntegerArgument)referenceArgument).min();
int checkedArgumentMin = ((Connector.IntegerArgument)checkedArgument).min();
if ( referenceArgumentMin != checkedArgumentMin ) {
errorMessage =
errorLogPrefixHead + "Checked connector's integer argument has unexpected min value:\n"
+ errorLogPrefix + "Expected connector's argument min value = "
+ referenceArgumentMin + "\n"
+ errorLogPrefix + "Actual connector's argument min value = "
+ checkedArgumentMin + "\n";
}
int referenceArgumentMax = ((Connector.IntegerArgument)referenceArgument).max();
int checkedArgumentMax = ((Connector.IntegerArgument)checkedArgument).max();
if ( referenceArgumentMax != checkedArgumentMax ) {
errorMessage = errorMessage +
errorLogPrefixHead + "Checked connector's integer argument has unexpected max value:\n"
+ errorLogPrefix + "Expected connector's argument max value = "
+ referenceArgumentMax + "\n"
+ errorLogPrefix + "Actual connector's argument max value = "
+ checkedArgumentMax + "\n";
}
}
if ( referenceArgument instanceof Connector.SelectedArgument ) {
List referenceArgumentChoices = ((Connector.SelectedArgument)referenceArgument).choices();
List checkedArgumentChoices = ((Connector.SelectedArgument)checkedArgument).choices();
int referenceArgumentChoicesSize = referenceArgumentChoices.size();
int checkedArgumentChoicesSize = checkedArgumentChoices.size();
if ( referenceArgumentChoicesSize != checkedArgumentChoicesSize) {
errorMessage = errorMessage +
errorLogPrefixHead + "Checked connector's Selected argument has unexpected choices' size:\n"
+ errorLogPrefix + "Expected size = '"
+ referenceArgumentChoicesSize + "'\n"
+ errorLogPrefix + "Actual size = "
+ checkedArgumentChoicesSize;
return errorMessage;
}
for (int i=0; i < referenceArgumentChoicesSize; i++) {
String referenceArgumentChoice = (String)(referenceArgumentChoices.get(i));
if ( ! checkedArgumentChoices.contains(referenceArgumentChoice) ) {
errorMessage = errorMessage +
errorLogPrefixHead + "Checked connector's Selected argument has NOT expected choices' element:\n"
+ errorLogPrefix + "Expected choices' element = '"
+ referenceArgumentChoice + "'\n";
}
String checkedArgumentChoice = (String)(checkedArgumentChoices.get(i));
if ( ! referenceArgumentChoices.contains(checkedArgumentChoice) ) {
errorMessage = errorMessage +
errorLogPrefixHead + "Checked connector's Selected argument has unexpected choices' element:\n"
+ errorLogPrefix + "Unexpected choices' element = '"
+ checkedArgumentChoice + "'\n";
}
}
}
return errorMessage;
} // end of compareConnectorArguments(...) method
public static Connector.Argument getConnectorDefaultArgument(
Connector connector,
String argumentName) {
Connector.Argument foundArgument = null;
Map connectorDefaultArguments = connector.defaultArguments();
Object[] defaultArgumentsArray = connectorDefaultArguments.values().toArray();
for (int i=0; i < defaultArgumentsArray.length; i++) {
Connector.Argument connectorArgument = (Connector.Argument)defaultArgumentsArray[i];
if ( argumentName.equals(connectorArgument.name()) ) {
foundArgument = connectorArgument;
break;
}
}
return foundArgument;
}
} // end of PlugConnectors class