@Test
  public void testAllMessageTypes() {
    int clientVMNumber =
        versions.clientProductVersion.equals(TestVersion.current())
            ? DUnitLauncher.DEBUGGING_VM_NUM : 0;
    int locatorVMNumber =
        versions.locatorProductVersion.equals(TestVersion.current())
            ? DUnitLauncher.DEBUGGING_VM_NUM : 0;
    VM clientVM = VM.getVM(versions.clientProductVersion.toString(), clientVMNumber);
    VM locatorVM = VM.getVM(versions.locatorProductVersion.toString(), locatorVMNumber);
    int locatorPort = createLocator(locatorVM);

    clientVM.invoke("issue version request",
        createRequestResponseFunction(locatorPort, VersionRequest.class.getName(),
            VersionResponse.class.getName()));
    testDeprecatedMessageTypes(clientVM, locatorPort);
    clientVM.invoke("issue shutdown request",
        createRequestResponseFunction(locatorPort, ShutdownRequest.class.getName(),
            ShutdownResponse.class.getName()));
    locatorVM.invoke("wait for locator to stop", () -> {
      Locator locator = Locator.getLocator();
      if (locator != null) {
        ((InternalLocator) locator).stop(false, false, false);
        GeodeAwaitility.await().until(((InternalLocator) locator)::isStopped);
      }
    });
  }
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