@Test
  public void testClientEventsAreNotConflatedByGlobalRegionOnServer() throws Exception {
    VM[] serverVMs = new VM[] {Host.getHost(0).getVM(0), Host.getHost(0).getVM(1)};
    VM[] clientVMs = new VM[] {Host.getHost(0).getVM(2), Host.getHost(0).getVM(3)};
    final String name = getUniqueName() + "Region";

    int[] serverPorts = new int[] {createServerRegion(serverVMs[0], name, true, Scope.GLOBAL),
        createServerRegion(serverVMs[1], name, true, Scope.GLOBAL)};

    for (int i = 0; i < clientVMs.length; i++) {
      createClientRegion(clientVMs[i], name, serverPorts[i], false,
          ClientRegionShortcut.CACHING_PROXY, false);
    }

    getBlackboard().initBlackboard();

    final int numIterations = 500;

    AsyncInvocation<?>[] asyncInvocations = new AsyncInvocation[clientVMs.length];
    for (int i = 0; i < clientVMs.length; i++) {
      final String clientGateName = "client" + i + "Ready";
      asyncInvocations[i] = clientVMs[i].invokeAsync("doOps Thread", () -> {
        doOps(name, numIterations, clientGateName);
      });
      getBlackboard().waitForGate(clientGateName, 30, SECONDS);
    }

    getBlackboard().signalGate("proceed");

    for (final AsyncInvocation<?> asyncInvocation : asyncInvocations) {
      asyncInvocation.join();
    }

    for (final VM serverVM : serverVMs) {
      serverVM.invoke("verify thread", () -> {
        verifyServerState(name, numIterations);
      });
    }
  }
GEODE-3519 servers are not locking on remove or invalidate ops initiated by clients
<p>
This test sets up two servers each with a client attached. The clients perform operations on
the same key in a region which, in the servers, has Scope.GLOBAL. There should be no conflation
and each operation should obtain a lock.
geode-core/src/distributedTest/java/org/apache/geode/cache30/ClientServerCCEDUnitTest.java