Skip to content

Commit 69133fc

Browse files
igorbernstein2chingor13
authored andcommitted
Bigtable: Add integration test to test nonexistent row handling (#3870)
1 parent 0d6839b commit 69133fc

File tree

1 file changed

+31
-0
lines changed
  • google-cloud-clients/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it

1 file changed

+31
-0
lines changed

google-cloud-clients/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/ReadIT.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717

1818
import static com.google.common.truth.Truth.assertThat;
1919

20+
import com.google.api.core.ApiFuture;
21+
import com.google.api.core.ApiFutureCallback;
22+
import com.google.api.core.ApiFutures;
2023
import com.google.api.core.SettableApiFuture;
2124
import com.google.api.gax.rpc.ResponseObserver;
2225
import com.google.api.gax.rpc.StreamController;
@@ -27,11 +30,14 @@
2730
import com.google.cloud.bigtable.data.v2.models.RowMutation;
2831
import com.google.common.collect.ImmutableList;
2932
import com.google.common.collect.Lists;
33+
import com.google.common.util.concurrent.MoreExecutors;
3034
import com.google.protobuf.ByteString;
3135
import java.util.ArrayList;
3236
import java.util.List;
37+
import java.util.concurrent.CountDownLatch;
3338
import java.util.concurrent.ExecutionException;
3439
import java.util.concurrent.TimeUnit;
40+
import java.util.concurrent.atomic.AtomicBoolean;
3541
import org.junit.Before;
3642
import org.junit.ClassRule;
3743
import org.junit.Test;
@@ -111,6 +117,31 @@ public void read() throws Throwable {
111117
assertThat(observer.responses).containsExactlyElementsIn(expectedRows);
112118
}
113119

120+
@Test
121+
public void readSingleNonexistentAsyncCallback() throws Exception {
122+
ApiFuture<Row> future = testEnvRule.env().getDataClient()
123+
.readRowAsync(testEnvRule.env().getTableName().getTable(), "somenonexistentkey");
124+
125+
final AtomicBoolean found = new AtomicBoolean();
126+
final CountDownLatch latch = new CountDownLatch(1);
127+
128+
ApiFutures.addCallback(future, new ApiFutureCallback<Row>() {
129+
@Override
130+
public void onFailure(Throwable t) {
131+
latch.countDown();
132+
}
133+
134+
@Override
135+
public void onSuccess(Row result) {
136+
found.set(true);
137+
latch.countDown();
138+
}
139+
}, MoreExecutors.directExecutor());
140+
141+
latch.await(1, TimeUnit.MINUTES);
142+
assertThat(found.get()).isTrue();
143+
}
144+
114145
static class AccumulatingObserver implements ResponseObserver<Row> {
115146
final List<Row> responses = Lists.newArrayList();
116147
final SettableApiFuture<Void> completionFuture = SettableApiFuture.create();

0 commit comments

Comments
 (0)