@Test
  public void performARollingUpgrade() {
    Optional<VmConfiguration> sourceConfiguration = VmConfigurations.upgrades().stream()
        // Skip the configurations with the current Geode
        .filter(hasGeodeVersion(TestVersions.lessThan(TestVersion.current())))
        // Get the configuration with the latest Geode
        .max(comparing(VmConfiguration::geodeVersion));
    assumeThat(sourceConfiguration)
        .as("newest old configuration")
        .isNotEmpty();

    // create a cluster with the previous version of Geode
    VM locatorVM = Host.getHost(0).getVM(sourceConfiguration.get(), 0);
    VM server1VM = Host.getHost(0).getVM(sourceConfiguration.get(), 1);
    int locatorPort = createLocator(locatorVM, true);
    createCacheAndRegion(server1VM, locatorPort);
    performCreate(getVM(1));

    // roll the locator to the current version
    locatorVM.invoke("stop locator", () -> Locator.getLocator().stop());
    locatorVM = Host.getHost(0).getVM(VersionManager.CURRENT_VERSION, 0);
    locatorVM.invoke("roll locator to current version", () -> {
      // if you need to debug SSL communications use this property:
      // System.setProperty("javax.net.debug", "all");
      Properties props = getDistributedSystemProperties();
      props.setProperty(HTTP_SERVICE_PORT, "0");
      // locator must restart with the same port so that it reconnects to the server
      await().atMost(getTimeout().getSeconds(), TimeUnit.SECONDS)
          .until(() -> Locator.startLocatorAndDS(locatorPort, new File(""), props) != null);
      assertThat(Locator.getLocator().getDistributedSystem().getAllOtherMembers().size())
          .isGreaterThan(0);
    });

    // start server2 with current version
    VM server2VM = Host.getHost(0).getVM(VersionManager.CURRENT_VERSION, 2);
    createCacheAndRegion(server2VM, locatorPort);

    // roll server1 to the current version
    server1VM.invoke("stop server1", () -> cache.close());
    server1VM = Host.getHost(0).getVM(VersionManager.CURRENT_VERSION, 1);
    createCacheAndRegion(server1VM, locatorPort);

    verifyCreatedEntry(server1VM);
    verifyCreatedEntry(server2VM);
  }
This class tests cluster tcp/ip communications both with and without SSL enabled
geode-core/src/upgradeTest/java/org/apache/geode/ClusterCommunicationsDUnitTest.java