/** Test that handleHTTPError does in fact backoff. */ @Test public void testBackoffCalledByHandleHTTPError() { try { final MockGlobalSessionCallback callback = new MockGlobalSessionCallback(TEST_CLUSTER_URL); SyncConfiguration config = new SyncConfiguration( TEST_USERNAME, new BasicAuthHeaderProvider(TEST_USERNAME, TEST_PASSWORD), new MockSharedPreferences(), new KeyBundle(TEST_USERNAME, TEST_SYNC_KEY)); final GlobalSession session = new MockGlobalSession(config, callback); final HttpResponse response = new BasicHttpResponse( new BasicStatusLine( new ProtocolVersion("HTTP", 1, 1), 503, "Illegal method/protocol")); response.addHeader( "X-Weave-Backoff", Long.toString(TEST_BACKOFF_IN_SECONDS)); // Backoff given in seconds. getTestWaiter() .performWait( WaitHelper.onThreadRunnable( new Runnable() { @Override public void run() { session.handleHTTPError( new SyncStorageResponse(response), "Illegal method/protocol"); } })); assertEquals(false, callback.calledSuccess); assertEquals(true, callback.calledError); assertEquals(false, callback.calledAborted); assertEquals(true, callback.calledRequestBackoff); assertEquals( TEST_BACKOFF_IN_SECONDS * 1000, callback.weaveBackoff); // Backoff returned in milliseconds. } catch (Exception e) { e.printStackTrace(); fail("Got exception."); } }