private int createLocator(VM memberVM) {
    final int port = AvailablePortHelper.getRandomAvailableTCPPort();

    return memberVM.invoke("create locator", () -> {
      System.setProperty(GMSJoinLeave.BYPASS_DISCOVERY_PROPERTY, "true");
      try {
        // for stress-tests make sure that an older-version locator doesn't try
        // to read state persisted by another run's newer-version locator
        DistributedTestUtils.deleteLocatorStateFile(port);
        return Locator.startLocatorAndDS(port, new File(""), getDistributedSystemProperties())
            .getPort();
      } finally {
        System.clearProperty(GMSJoinLeave.BYPASS_DISCOVERY_PROPERTY);
      }
    });
  }
In version 1.12 TcpServer changed: the three pairs of message types used to derive from
DataSerializable, but as of 1.12 they derive from BasicSerializable.

This test verifies that the current version (1.12 or later) is compatible with the latest
version before 1.12
geode-tcp-server/src/upgradeTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerProductVersionUpgradeTest.java