diff options
Diffstat (limited to 'documentapi')
3 files changed, 51 insertions, 0 deletions
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/Result.java b/documentapi/src/main/java/com/yahoo/documentapi/Result.java index 779f081a8e3..c905fa24cb1 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/Result.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/Result.java @@ -98,4 +98,5 @@ public class Result { /** Condition specified in operation not met error */ CONDITION_NOT_MET_ERROR } + } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/local/LocalAsyncSession.java b/documentapi/src/main/java/com/yahoo/documentapi/local/LocalAsyncSession.java index 041c8187a97..4e331071be7 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/local/LocalAsyncSession.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/local/LocalAsyncSession.java @@ -142,4 +142,5 @@ public class LocalAsyncSession implements AsyncSession { responses.add(response); } } + } diff --git a/documentapi/src/test/java/com/yahoo/documentapi/local/test/LocalDocumentApiTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/local/test/LocalDocumentApiTestCase.java index 0c3c9f1e076..a9f80ef73ad 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/local/test/LocalDocumentApiTestCase.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/local/test/LocalDocumentApiTestCase.java @@ -9,6 +9,11 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + import static org.junit.Assert.*; /** @@ -51,4 +56,48 @@ public class LocalDocumentApiTestCase extends AbstractDocumentApiTestCase { assertFalse(response.isSuccess()); session.destroy(); } + + @Test + public void testAsyncFetch() { + AsyncSession session = access.createAsyncSession(new AsyncParameters()); + List<DocumentId> ids = new ArrayList<>(); + ids.add(new DocumentId("id:music:music::1")); + ids.add(new DocumentId("id:music:music::2")); + ids.add(new DocumentId("id:music:music::3")); + for (DocumentId id : ids) + session.put(new Document(access.getDocumentTypeManager().getDocumentType("music"), id)); + int timeout = 100; + + long startTime = System.currentTimeMillis(); + Set<Long> outstandingRequests = new HashSet<>(); + for (DocumentId id : ids) { + Result result = session.get(id); + if ( ! result.isSuccess()) + throw new IllegalStateException("Failed requesting document " + id, result.getError().getCause()); + outstandingRequests.add(result.getRequestId()); + } + + List<Document> documents = new ArrayList<>(); + try { + while ( ! outstandingRequests.isEmpty()) { + int timeSinceStart = (int)(System.currentTimeMillis() - startTime); + Response response = session.getNext(timeout - timeSinceStart); + if (response == null) + throw new RuntimeException("Timed out waiting for documents"); // or return what you have + if ( ! outstandingRequests.contains(response.getRequestId())) continue; // Stale: Ignore + + if (response.isSuccess()) + documents.add(((DocumentResponse)response).getDocument()); + outstandingRequests.remove(response.getRequestId()); + } + } + catch (InterruptedException e) { + throw new RuntimeException("Interrupted while waiting for documents", e); + } + + assertEquals(3, documents.size()); + for (Document document : documents) + assertNotNull(document); + } + } |