Skip to content

Commit 8f85c6e

Browse files
authored
test(bigtable): add unit test for omitted entry in multi-entry Mutate… (#14463)
…RowsResponse
1 parent 0d4e875 commit 8f85c6e

2 files changed

Lines changed: 43 additions & 12 deletions

File tree

‎java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/mutaterows/MutateRowsAttemptCallableTest.java‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,39 @@ public void testNoRpcTimeout() {
160160
assertThat(innerCallable.lastContext.getTimeout()).isNull();
161161
}
162162

163+
@Test
164+
public void partialOmissionMultiEntryTest() throws Exception {
165+
MutateRowsRequest request =
166+
MutateRowsRequest.newBuilder()
167+
.addEntries(Entry.newBuilder().setRowKey(ByteString.copyFromUtf8("0-ok")))
168+
.addEntries(Entry.newBuilder().setRowKey(ByteString.copyFromUtf8("1-omitted")))
169+
.addEntries(Entry.newBuilder().setRowKey(ByteString.copyFromUtf8("2-ok")))
170+
.build();
171+
innerCallable.response.add(
172+
MutateRowsResponse.newBuilder()
173+
.addEntries(
174+
MutateRowsResponse.Entry.newBuilder().setIndex(0).setStatus(OK_STATUS_PROTO))
175+
.addEntries(
176+
MutateRowsResponse.Entry.newBuilder().setIndex(2).setStatus(OK_STATUS_PROTO))
177+
.build());
178+
179+
MutateRowsAttemptCallable attemptCallable =
180+
new MutateRowsAttemptCallable(
181+
innerCallable, request, callContext, retryCodes, mockRetryAlgorithm);
182+
attemptCallable.setExternalFuture(parentFuture);
183+
attemptCallable.call();
184+
185+
MutateRowsAttemptResult result = parentFuture.attemptFuture.get();
186+
assertThat(result.getFailedMutations()).hasSize(1);
187+
FailedMutation failedMutation = result.getFailedMutations().get(0);
188+
assertThat(failedMutation.getIndex()).isEqualTo(1);
189+
assertThat(failedMutation.getError().getStatusCode().getCode()).isEqualTo(Code.INTERNAL);
190+
assertThat(failedMutation.getError().isRetryable()).isFalse();
191+
assertThat(failedMutation.getError())
192+
.hasMessageThat()
193+
.contains("Missing entry response for entry 1");
194+
}
195+
163196
@Test
164197
public void mixedTest() throws Exception {
165198
// Setup the request & response

‎java-bigtable/test-proxy/src/main/java/com/google/cloud/bigtable/testproxy/CbtTestProxy.java‎

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -321,10 +321,10 @@ public void bulkMutateRows(
321321
} catch (MutateRowsException e) {
322322
MutateRowsResult.Builder resultBuilder = MutateRowsResult.newBuilder();
323323
com.google.rpc.Status topLevelStatus =
324-
com.google.rpc.Status.newBuilder()
325-
.setCode(e.getStatusCode().getCode().ordinal())
326-
.setMessage(e.getMessage())
327-
.build();
324+
com.google.rpc.Status.newBuilder()
325+
.setCode(e.getStatusCode().getCode().ordinal())
326+
.setMessage(e.getMessage())
327+
.build();
328328
for (MutateRowsException.FailedMutation failed : e.getFailedMutations()) {
329329
resultBuilder
330330
.addEntriesBuilder()
@@ -335,15 +335,13 @@ public void bulkMutateRows(
335335
.setMessage(failed.getError().getMessage())
336336
.build());
337337

338-
topLevelStatus = com.google.rpc.Status.newBuilder()
339-
.setCode(failed.getError().getStatusCode().getCode().ordinal())
340-
.setMessage(failed.getError().getMessage())
341-
.build();
338+
topLevelStatus =
339+
com.google.rpc.Status.newBuilder()
340+
.setCode(failed.getError().getStatusCode().getCode().ordinal())
341+
.setMessage(failed.getError().getMessage())
342+
.build();
342343
}
343-
responseObserver.onNext(
344-
resultBuilder
345-
.setStatus(topLevelStatus)
346-
.build());
344+
responseObserver.onNext(resultBuilder.setStatus(topLevelStatus).build());
347345
responseObserver.onCompleted();
348346
return;
349347
} catch (ApiException e) {

0 commit comments

Comments
 (0)