| /* | |
| * 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; | |
| /** | |
| * | |
| * @author bnevins | |
| */ | |
| public class PortTests extends AdminBaseDevTest { | |
| @Override | |
| protected String getTestDescription() { | |
| return "Tests Port Selection Algorithms for Instances."; | |
| } | |
| public static void main(String[] args) { | |
| PortTests tests = new PortTests(); | |
| tests.runTests(); | |
| } | |
| private void runTests() { | |
| report("01234567890123456789012345678901234567890123456789012345678901234567890123456789", true); | |
| startDomain(); | |
| verifyUserSuppliedPortNumbersAreUnique(); | |
| verifyPortsAreLegal(); | |
| testConflictResolution(); | |
| stopDomain(); | |
| stat.printSummary(); | |
| } | |
| private void verifyUserSuppliedPortNumbersAreUnique() { | |
| final int[] nums = new int[]{18080, 18181, 13800, 13700, 17676, 13801, 18686, 14848}; | |
| String ports = assembleEnormousPortsString(nums); | |
| String iname = generateInstanceName(); | |
| report("create-instance-" + iname + "-noPortsSpecified", asadmin("create-local-instance", iname)); | |
| report("delete-instance-" + iname + "-noPortsSpecified", asadmin("delete-local-instance", iname)); | |
| report("create-instance-" + iname + "-allGoodPortsSpecified", asadmin("create-local-instance", "--systemproperties", ports, iname)); | |
| report("delete-instance-" + iname + "-allGoodPortsSpecified", asadmin("delete-local-instance", iname)); | |
| for (int i = 0; i < 7; i++) { | |
| for (int j = i + 1; j < 8; j++) { | |
| ports = assembleEnormousPortsString(i, j, nums); | |
| AsadminReturn ret = asadminWithOutput("create-local-instance", | |
| "--systemproperties", | |
| ports, | |
| iname); | |
| if (ret.returnValue) { | |
| System.out.println("ERROR -- should have returned failure - it returned success!"); | |
| System.out.println(ret.outAndErr); | |
| System.out.println(ports); | |
| System.out.println("**** i,j = " + i + ", " + j); | |
| } | |
| report("create-instance-" + iname + "-duplicatePortsSpecified" + i + "-" + j, !ret.returnValue); | |
| } | |
| } | |
| } | |
| private void verifyPortsAreLegal() { | |
| final int[] nums = new int[]{18080, 18181, 13800, 13700, 17676, 13801, 18686, 14848}; | |
| String iname = generateInstanceName(); | |
| nums[3] = -100; | |
| report("create-instance-" + iname + "illegalPortsSpecified", !asadmin("create-local-instance", "--systemproperties", assembleEnormousPortsString(nums), iname)); | |
| report("delete-instance-" + iname + "legalPortsSpecified", !asadmin("delete-local-instance", iname)); | |
| // UNIX -- if you are not superuser then we try incrementing 50 times and then quit. Which is WAY under 1024. | |
| int newPort = 1000; | |
| if(isWindows()) | |
| newPort = 0; | |
| nums[3] = newPort; | |
| report("create-instance-" + iname + "illegalPortsSpecified", asadmin("create-local-instance", "--systemproperties", assembleEnormousPortsString(nums), iname)); | |
| report("delete-instance-" + iname + "legalPortsSpecified", asadmin("delete-local-instance", iname)); | |
| nums[3] = 65535; | |
| report("create-instance-" + iname + "illegalPortsSpecified", asadmin("create-local-instance", "--systemproperties", assembleEnormousPortsString(nums), iname)); | |
| report("delete-instance-" + iname + "legalPortsSpecified", asadmin("delete-local-instance", iname)); | |
| nums[3] += 1; | |
| report("create-instance-" + iname + "illegalPortsSpecified", !asadmin("create-local-instance", "--systemproperties", assembleEnormousPortsString(nums), iname)); | |
| report("delete-instance-" + iname + "legalPortsSpecified", !asadmin("delete-local-instance", iname)); | |
| } | |
| private void testConflictResolution() { | |
| //verifyCleanSlate(); | |
| buildup(); | |
| // check that the first instance is using the port that we expect | |
| report("byron1-uses-24848", doesGetMatch( | |
| "configs.config.byron1-config.system-property.ASADMIN_LISTENER_PORT.value", | |
| "24848")); | |
| report("instance-doesnt-use-22222", !doesGetMatch( | |
| "configs.config.byron1-config.system-property.ASADMIN_LISTENER_PORT.value", | |
| "22222")); | |
| // the **config** has 24848 | |
| report("byron2-config-uses-24848", doesGetMatch( | |
| "configs.config.byron2-config.system-property.ASADMIN_LISTENER_PORT.value", | |
| "24848")); | |
| checkAndReportPort("byron2", 24849); | |
| checkAndReportPort("byron3", 24850); | |
| // clog up port 24851. byron4 should automatically go to 24852 | |
| report("Started-Fake-Server-Daemon-24851", true); | |
| runFakeServerDaemon(24851); | |
| report("create-byron4", asadminWithOutput("create-local-instance", "byron4")); | |
| checkAndReportPort("byron4", 24852); | |
| // if I delete byron2, then byron5 ought to re-use the port which is 24849 | |
| report("delete-byron2", asadminWithOutput("delete-local-instance", "byron2")); | |
| report("create-byron5", asadminWithOutput("create-local-instance", "byron5")); | |
| checkAndReportPort("byron5", 24849); | |
| // bring byron2 up again -- teardown() will be looking for it | |
| report("delete-byron5", asadminWithOutput("delete-local-instance", "byron5")); | |
| report("create-byron2", asadminWithOutput("create-local-instance", "byron2")); | |
| checkAndReportPort("byron2", 24849); | |
| report("delete-byron4", asadmin("delete-local-instance", "byron4")); | |
| teardown(); | |
| //verifyCleanSlate(); | |
| } | |
| /* | |
| private void verifyCleanSlate() { | |
| // we are depending on there being ZERO instances and clusters! | |
| report("there-must-be-no-pre-existing-clusters", verifyNoClusters()); | |
| report("there-must-be-no-pre-existing-instances", verifyNoInstances()); | |
| } | |
| * | |
| */ | |
| private void buildup() { | |
| report("create-cluster", asadmin("create-cluster", "c1")); | |
| report("create-byron1", asadmin("create-local-instance", "byron1")); | |
| report("create-byron2", asadminWithOutput("create-local-instance", "byron2")); | |
| report("create-byron3", asadminWithOutput("create-local-instance", "byron3")); | |
| } | |
| private void teardown() { | |
| report("delete-byron3", asadmin("delete-local-instance", "byron3")); | |
| report("delete-byron2", asadmin("delete-local-instance", "byron2")); | |
| report("delete-byron1", asadmin("delete-local-instance", "byron1")); | |
| report("delete-cluster", asadmin("delete-cluster", "c1")); | |
| } | |
| private String assembleEnormousPortsString(int index1, int index2, final int[] nums) { | |
| return assembleEnormousPortsString(makeDupes(index1, index2, nums)); | |
| } | |
| private int[] makeDupes(int index1, int index2, int[] nums) { | |
| int[] copy = new int[8]; | |
| System.arraycopy(nums, 0, copy, 0, 8); | |
| copy[index2] = nums[index1]; | |
| return copy; | |
| } | |
| private String assembleEnormousPortsString(int[] nums) { | |
| if (nums == null || nums.length != 8) | |
| throw new IllegalArgumentException(); | |
| StringBuilder sb = new StringBuilder(); | |
| sb.append("HTTP_LISTENER_PORT").append("=" + nums[0]).append(":"); | |
| sb.append("HTTP_SSL_LISTENER_PORT").append("=" + nums[1]).append(":"); | |
| sb.append("IIOP_SSL_LISTENER_PORT").append("=" + nums[2]).append(":"); | |
| sb.append("IIOP_LISTENER_PORT").append("=" + nums[3]).append(":"); | |
| sb.append("JMX_SYSTEM_CONNECTOR_PORT").append("=" + nums[4]).append(":"); | |
| sb.append("IIOP_SSL_MUTUALAUTH_PORT").append("=" + nums[5]).append(":"); | |
| sb.append("JMS_PROVIDER_PORT").append("=" + nums[6]).append(":"); | |
| sb.append("ASADMIN_LISTENER_PORT").append("=" + nums[7]); | |
| return sb.toString(); | |
| } | |
| private void checkAndReportPort(String instance, int port) { | |
| report(instance + "-server-element-uses-" + port, doesGetMatch( | |
| "servers.server." + instance + ".system-property.ASADMIN_LISTENER_PORT.value", | |
| "" + port)); | |
| } | |
| } | |
| /* | |
| * --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 in1 | |
| * --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 | |
| configs.config.byron1-config.system-property.ASADMIN_LISTENER_PORT.name=ASADMIN_LISTENER_PORT | |
| configs.config.byron1-config.system-property.ASADMIN_LISTENER_PORT.value=24848 | |
| configs.config.byron1-config.system-property.HTTP_LISTENER_PORT.name=HTTP_LISTENER_PORT | |
| configs.config.byron1-config.system-property.HTTP_LISTENER_PORT.value=28080 | |
| configs.config.byron1-config.system-property.HTTP_SSL_LISTENER_PORT.name=HTTP_SSL_LISTENER_PORT | |
| configs.config.byron1-config.system-property.HTTP_SSL_LISTENER_PORT.value=28181 | |
| configs.config.byron1-config.system-property.IIOP_LISTENER_PORT.name=IIOP_LISTENER_PORT | |
| configs.config.byron1-config.system-property.IIOP_LISTENER_PORT.value=23700 | |
| configs.config.byron1-config.system-property.IIOP_SSL_LISTENER_PORT.name=IIOP_SSL_LISTENER_PORT | |
| configs.config.byron1-config.system-property.IIOP_SSL_LISTENER_PORT.value=23820 | |
| configs.config.byron1-config.system-property.IIOP_SSL_MUTUALAUTH_PORT.name=IIOP_SSL_MUTUALAUTH_PORT | |
| configs.config.byron1-config.system-property.IIOP_SSL_MUTUALAUTH_PORT.value=23920 | |
| configs.config.byron1-config.system-property.JMS_PROVIDER_PORT.name=JMS_PROVIDER_PORT | |
| configs.config.byron1-config.system-property.JMS_PROVIDER_PORT.value=27676 | |
| configs.config.byron1-config.system-property.JMX_SYSTEM_CONNECTOR_PORT.name=JMX_SYSTEM_CONNECTOR_PORT | |
| configs.config.byron1-config.system-property.JMX_SYSTEM_CONNECTOR_PORT.value=28686 | |
| */ |