    @Test
    public void testRestore() throws InterruptedException {

        AsyncSuroClient client = injector.getInstance(AsyncSuroClient.class);

        for (SuroServer4Test c : servers) {
            c.setTryLater();
        }

        AsyncSuroSender sender = new AsyncSuroSender(
                TestConnectionPool.createMessageSet(600),
                client,
                injector.getInstance(ClientConfig.class));

        sender.run();

        assertEquals(client.getSentMessageCount(), 0);
        assertTrue(client.getRestoredMessageCount() >= 600);
        for (SuroServer4Test c : servers) {
            c.cancelTryLater();
        }
        injector.getInstance(ConnectionPool.class).populateClients();

        // wait until client restored
        while (client.getSentMessageCount() < 600) {
            System.out.println("sent: " + client.getSentMessageCount());
            Thread.sleep(1000);
        }
        client.shutdown();
        TestConnectionPool.checkMessageCount(servers, 600);
    }