@Override
      public Object call() {
        final Region<String, String> r = getCache().getRegion(regionName);

        suspendExpiration();
        Region.Entry entry = null;
        long tilt;
        try {
          r.put("key", "value");
          LocalRegion lr = (LocalRegion) r;
          r.put("nonTXkey", "nonTXvalue");
          getCache().getCacheTransactionManager().begin();
          r.put("key", "newvalue");
          waitForEntryExpiration(lr, "key");
        } finally {
          permitExpiration();
        }
        TransactionId tx = getCache().getCacheTransactionManager().suspend();

        ThrowingRunnable runnable =
            () -> assertThat(!r.containsKey("key") && !r.containsKey("nonTXKey")).isTrue();

        // A remote tx will allow expiration to happen on the side that
        // is not hosting the tx. But it will not allow an expiration
        // initiated on the hosting jvm.
        // tx is hosted in vm2 so expiration can happen in vm1.
        GeodeAwaitility.await().untilAsserted(runnable);
        getCache().getCacheTransactionManager().resume(tx);
        assertThat(r.containsKey("key")).isTrue();
        getCache().getCacheTransactionManager().commit();
        GeodeAwaitility.await().untilAsserted(runnable);

        return null;
      }
disabled because rather than throwing an exception, getAll catches all exceptions and logs a
warning message
geode-core/src/distributedTest/java/org/apache/geode/internal/cache/RemoteTransactionDUnitTest.java