ClientResult implements IResultReceiver<T>, Iterable<ClientResult<T>.Entry> { public long getStartTime() { return startTime; } ClientResult(IClosedListener closedListener, Collection<String> allShards);  ClientResult(IClosedListener closedListener, String... allShards); void addResult(T result, Collection<String> shards); void addResult(T result, String... shards); void addError(Throwable error, Collection<String> shards); synchronized void addError(Throwable error, String... shards); synchronized void close(); boolean isClosed(); Set<String> getAllShards(); synchronized Set<String> getSeenShards(); synchronized Set<String> getMissingShards(); synchronized Collection<T> getResults(); synchronized Collection<T> getResultsOrThrowException(); synchronized Collection<T> getResultsOrThrowKattaException(); synchronized Collection<Throwable> getErrors(); synchronized Throwable getError(); synchronized KattaException getKattaException(); synchronized Entry getResultEntry(T result); synchronized Entry getErrorEntry(Throwable error); synchronized boolean isComplete(); synchronized boolean isError(); synchronized boolean isOK(); synchronized double getShardCoverage(); long getStartTime(); Set<Entry> entrySet(); Iterator<Entry> iterator(); List<Entry> getArrivalTimes(); void waitFor(IResultPolicy<T> policy); @Override synchronized String toString();  }
@Test public void testStartTime() { ClientResult<String> r1 = new ClientResult<String>(null, "a", "b", "c"); sleep(10); ClientResult<String> r2 = new ClientResult<String>(null, "a", "b", "c"); assertTrue(r2.getStartTime() - r1.getStartTime() >= 10); }