Skip to content

Commit 36af448

Browse files
committed
Merge pull request #285 from ajkannan/test-deferred
Add test for deferred results in datastore get
2 parents e4da160 + d4530f6 commit 36af448

1 file changed

Lines changed: 84 additions & 2 deletions

File tree

gcloud-java-datastore/src/test/java/com/google/gcloud/datastore/DatastoreTest.java

Lines changed: 84 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.google.gcloud.datastore.StructuredQuery.PropertyFilter;
3636
import com.google.gcloud.datastore.testing.LocalGcdHelper;
3737
import com.google.gcloud.spi.DatastoreRpc;
38+
import com.google.gcloud.spi.DatastoreRpc.DatastoreRpcException;
3839
import com.google.gcloud.spi.DatastoreRpc.DatastoreRpcException.Reason;
3940
import com.google.gcloud.spi.DatastoreRpcFactory;
4041

@@ -49,9 +50,12 @@
4950
import org.junit.runners.JUnit4;
5051

5152
import java.io.IOException;
53+
import java.util.ArrayList;
5254
import java.util.Collections;
55+
import java.util.HashSet;
5356
import java.util.Iterator;
5457
import java.util.List;
58+
import java.util.Set;
5559

5660
@RunWith(JUnit4.class)
5761
public class DatastoreTest {
@@ -520,7 +524,7 @@ public void testGet() {
520524
}
521525

522526
@Test
523-
public void testGetArray() {
527+
public void testGetArrayNoDeferredResults() {
524528
datastore.put(ENTITY3);
525529
Iterator<Entity> result =
526530
datastore.fetch(KEY1, Key.builder(KEY1).name("bla").build(), KEY2, KEY3).iterator();
@@ -546,7 +550,85 @@ public void testGetArray() {
546550
// expected - no such property
547551
}
548552
assertFalse(result.hasNext());
549-
// TODO(ozarov): construct a test to verify more results
553+
}
554+
555+
public void testGetArrayDeferredResults() throws DatastoreRpcException {
556+
Set<Key> requestedKeys = new HashSet<>();
557+
requestedKeys.add(KEY1);
558+
requestedKeys.add(KEY2);
559+
requestedKeys.add(KEY3);
560+
requestedKeys.add(KEY4);
561+
requestedKeys.add(KEY5);
562+
Iterator<Entity> iter = createDatastoreForDeferredLookup().get(KEY1, KEY2, KEY3, KEY4, KEY5);
563+
Set<Key> keysOfFoundEntities = new HashSet<>();
564+
while (iter.hasNext()) {
565+
keysOfFoundEntities.add(iter.next().key());
566+
}
567+
assertEquals(requestedKeys, keysOfFoundEntities);
568+
}
569+
570+
public void testFetchArrayDeferredResults() throws DatastoreRpcException {
571+
List<Entity> foundEntities =
572+
createDatastoreForDeferredLookup().fetch(KEY1, KEY2, KEY3, KEY4, KEY5);
573+
assertEquals(foundEntities.get(0).key(), KEY1);
574+
assertEquals(foundEntities.get(1).key(), KEY2);
575+
assertEquals(foundEntities.get(2).key(), KEY3);
576+
assertEquals(foundEntities.get(3).key(), KEY4);
577+
assertEquals(foundEntities.get(4).key(), KEY5);
578+
assertEquals(foundEntities.size(), 5);
579+
}
580+
581+
private Datastore createDatastoreForDeferredLookup() throws DatastoreRpcException {
582+
List<DatastoreV1.Key> keysPb = new ArrayList<>();
583+
keysPb.add(KEY1.toPb());
584+
keysPb.add(KEY2.toPb());
585+
keysPb.add(KEY3.toPb());
586+
keysPb.add(KEY4.toPb());
587+
keysPb.add(KEY5.toPb());
588+
List<DatastoreV1.LookupRequest> lookupRequests = new ArrayList<>();
589+
lookupRequests.add(DatastoreV1.LookupRequest.newBuilder().addAllKey(keysPb).build());
590+
lookupRequests.add(
591+
DatastoreV1.LookupRequest.newBuilder()
592+
.addKey(keysPb.get(2))
593+
.addKey(keysPb.get(3))
594+
.addKey(keysPb.get(5))
595+
.build());
596+
lookupRequests.add(DatastoreV1.LookupRequest.newBuilder().addKey(keysPb.get(5)).build());
597+
Entity entity4 = Entity.builder(KEY4).set("value", StringValue.of("value")).build();
598+
Entity entity5 = Entity.builder(KEY5).set("value", "value").build();
599+
List<DatastoreV1.LookupResponse> lookupResponses = new ArrayList<>();
600+
lookupResponses.add(
601+
DatastoreV1.LookupResponse.newBuilder()
602+
.addFound(EntityResult.newBuilder().setEntity(ENTITY1.toPb()))
603+
.addFound(EntityResult.newBuilder().setEntity(entity4.toPb()))
604+
.addDeferred(keysPb.get(2))
605+
.addDeferred(keysPb.get(3))
606+
.addDeferred(keysPb.get(5))
607+
.build());
608+
lookupResponses.add(
609+
DatastoreV1.LookupResponse.newBuilder()
610+
.addFound(EntityResult.newBuilder().setEntity(ENTITY3.toPb()))
611+
.addFound(EntityResult.newBuilder().setEntity(entity4.toPb()))
612+
.addDeferred(keysPb.get(5))
613+
.build());
614+
lookupResponses.add(
615+
DatastoreV1.LookupResponse.newBuilder()
616+
.addFound(EntityResult.newBuilder().setEntity(entity5.toPb()))
617+
.build());
618+
DatastoreRpcFactory rpcFactoryMock = EasyMock.createStrictMock(DatastoreRpcFactory.class);
619+
DatastoreRpc rpcMock = EasyMock.createStrictMock(DatastoreRpc.class);
620+
EasyMock.expect(rpcFactoryMock.create(EasyMock.anyObject(DatastoreOptions.class)))
621+
.andReturn(rpcMock);
622+
for (int i = 0; i < lookupRequests.size(); i++) {
623+
EasyMock.expect(rpcMock.lookup(lookupRequests.get(i))).andReturn(lookupResponses.get(i));
624+
}
625+
EasyMock.replay(rpcFactoryMock, rpcMock);
626+
DatastoreOptions options =
627+
this.options.toBuilder()
628+
.retryParams(RetryParams.getDefaultInstance())
629+
.serviceRpcFactory(rpcFactoryMock)
630+
.build();
631+
return DatastoreFactory.instance().get(options);
550632
}
551633

552634
@Test

0 commit comments

Comments
 (0)