GEODE-8770: RollingUpgradeDUnitTest assigns ports (#5819)

RollingUpgradeDUnitTest now assigns available HTTP and JMX ports when
launching and rolling locators, rather than using the default ports.
This allows the tests to run in parallel outside of docker.
diff --git a/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java b/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java
index 8b7c2be..5c27768 100644
--- a/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java
+++ b/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java
@@ -14,6 +14,9 @@
  */
 package org.apache.geode.internal.cache.rollingupgrade;
 
+import static org.apache.geode.distributed.ConfigurationProperties.HTTP_SERVICE_PORT;
+import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_PORT;
+import static org.apache.geode.internal.AvailablePortHelper.getRandomAvailableTCPPorts;
 import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertTrue;
@@ -54,7 +57,6 @@
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.distributed.internal.membership.api.MembershipView;
 import org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLeave;
-import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.test.dunit.DistributedTestUtils;
@@ -145,7 +147,6 @@
     VM server2 = host.getVM(startingVersion, 1); // testingDirs[1]
     VM locator = host.getVM(startingVersion, 2); // locator must be last
 
-
     String regionName = "aRegion";
     String shortcutName = RegionShortcut.REPLICATE.name();
     if (regionType.equals("replicate")) {
@@ -164,10 +165,16 @@
       }
     }
 
-    int[] locatorPorts = AvailablePortHelper.getRandomAvailableTCPPorts(1);
+    int[] ports = getRandomAvailableTCPPorts(3);
+    int[] locatorPorts = new int[] {ports[0]};
+    int jmxManagerPort = ports[1];
+    int httpServicePort = ports[2];
     String hostName = NetworkUtils.getServerHostName(host);
     String locatorString = getLocatorString(locatorPorts);
     final Properties locatorProps = new Properties();
+    locatorProps.setProperty(JMX_MANAGER_PORT, String.valueOf(jmxManagerPort));
+    locatorProps.setProperty(HTTP_SERVICE_PORT, String.valueOf(httpServicePort));
+
     // configure all class loaders for each vm
 
     try {
@@ -196,8 +203,8 @@
       }
 
       putAndVerify(objectType, server1, regionName, 0, 10, server2);
-      locator = rollLocatorToCurrent(locator, hostName, locatorPorts[0], getTestMethodName(),
-          locatorString);
+      locator = rollLocatorToCurrent(locator, hostName, locatorPorts[0], jmxManagerPort,
+          httpServicePort, getTestMethodName(), locatorString);
 
       server1 = rollServerToCurrentAndCreateRegion(server1, regionType, testingDirs[0],
           shortcutName, regionName, locatorPorts);
@@ -351,12 +358,14 @@
   }
 
   private VM rollLocatorToCurrent(VM oldLocator, final String serverHostName, final int port,
-      final String testName, final String locatorString) {
+      int jmxManagerPort, int httpServicePort, final String testName, final String locatorString) {
     // Roll the locator
     oldLocator.invoke(invokeStopLocator());
     VM rollLocator = Host.getHost(0).getVM(VersionManager.CURRENT_VERSION, oldLocator.getId());
     final Properties props = new Properties();
     props.setProperty(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME, "false");
+    props.setProperty(JMX_MANAGER_PORT, String.valueOf(jmxManagerPort));
+    props.setProperty(HTTP_SERVICE_PORT, String.valueOf(httpServicePort));
     rollLocator
         .invoke(invokeStartLocator(serverHostName, port, testName, locatorString, props, false));
     return rollLocator;