private CompletionStage<RestResponse> pushStateStatus(RestRequest request) {
      return statusOperation(request, PUSH_STATE_STATUS);
   }
@Test
   public void testPushAllCaches() {
      RestClient restClientLon = clientPerSite.get(LON);
      RestClient restClientSfo = clientPerSite.get(SFO);

      RestCacheClient cache1Lon = restClientLon.cache(CACHE_1);
      RestCacheClient cache2Lon = restClientLon.cache(CACHE_2);

      RestCacheClient cache1Sfo = restClientSfo.cache(CACHE_1);
      RestCacheClient cache2Sfo = restClientSfo.cache(CACHE_2);

      // Take SFO offline for all caches
      assertSuccessful(restClientLon.container().takeOffline(SFO));
      Json backupStatuses = jsonResponseBody(restClientLon.container().backupStatuses());
      assertEquals("offline", backupStatuses.at(SFO).at("status").asString());

      // Write to the caches
      int entries = 10;
      IntStream.range(0, entries).forEach(i -> {
         String key = String.valueOf(i);
         String value = "value";
         assertNoContent(cache1Lon.put(key, value));
         assertNoContent(cache2Lon.put(key, value));
      });

      // Backups should be empty
      assertEquals(0, getCacheSize(cache1Sfo));
      assertEquals(0, getCacheSize(cache2Sfo));

      // Start state push
      assertSuccessful(restClientLon.container().pushSiteState(SFO));

      // Backups go online online immediately
      assertEquals(ONLINE, getBackupStatus(LON, SFO));

      // State push should eventually finish
      eventuallyEquals("OK", () -> pushStateStatus(cache1Lon, SFO));
      eventuallyEquals("OK", () -> pushStateStatus(cache2Lon, SFO));

      // ... and with state
      assertEquals(entries, getCacheSize(cache1Sfo));
      assertEquals(entries, getCacheSize(cache2Sfo));
   }