|
27 | 27 | import com.google.api.gax.rpc.StreamController;
|
28 | 28 | import com.google.bigtable.v2.MutateRowsRequest;
|
29 | 29 | import com.google.bigtable.v2.MutateRowsResponse;
|
| 30 | +import com.google.bigtable.v2.Mutation; |
30 | 31 | import com.google.bigtable.v2.RateLimitInfo;
|
31 | 32 | import com.google.cloud.bigtable.gaxx.testing.FakeStatusCode;
|
| 33 | +import com.google.protobuf.ByteString; |
32 | 34 | import com.google.protobuf.Duration;
|
| 35 | +import com.google.rpc.Code; |
| 36 | +import com.google.rpc.Status; |
33 | 37 | import org.junit.Before;
|
34 | 38 | import org.junit.Test;
|
35 | 39 | import org.junit.runner.RunWith;
|
@@ -138,6 +142,46 @@ public void testErrorInfoLowerQPS() throws Exception {
|
138 | 142 | assertThat(newQps).isWithin(0.1).of(oldQps * RateLimitingServerStreamingCallable.MIN_FACTOR);
|
139 | 143 | }
|
140 | 144 |
|
| 145 | + @Test |
| 146 | + public void testResponseIsPropagated() { |
| 147 | + MutateRowsResponse expectedResponse = |
| 148 | + MutateRowsResponse.newBuilder() |
| 149 | + .addEntries( |
| 150 | + MutateRowsResponse.Entry.newBuilder() |
| 151 | + .setIndex(0) |
| 152 | + .setStatus(Status.newBuilder().setCode(Code.PERMISSION_DENIED_VALUE))) |
| 153 | + .build(); |
| 154 | + innerCallable = |
| 155 | + new MockCallable() { |
| 156 | + @Override |
| 157 | + public void call( |
| 158 | + MutateRowsRequest mutateRowsRequest, |
| 159 | + ResponseObserver<MutateRowsResponse> responseObserver, |
| 160 | + ApiCallContext apiCallContext) { |
| 161 | + responseObserver.onResponse(expectedResponse); |
| 162 | + responseObserver.onComplete(); |
| 163 | + } |
| 164 | + }; |
| 165 | + |
| 166 | + callableToTest = new RateLimitingServerStreamingCallable(innerCallable); |
| 167 | + |
| 168 | + ResponseObserver<MutateRowsResponse> mockObserver = Mockito.mock(ResponseObserver.class); |
| 169 | + |
| 170 | + MutateRowsRequest req = |
| 171 | + MutateRowsRequest.newBuilder() |
| 172 | + .addEntries( |
| 173 | + MutateRowsRequest.Entry.newBuilder() |
| 174 | + .setRowKey(ByteString.copyFromUtf8("k1")) |
| 175 | + .addMutations( |
| 176 | + Mutation.newBuilder() |
| 177 | + .setDeleteFromRow(Mutation.DeleteFromRow.getDefaultInstance()))) |
| 178 | + .build(); |
| 179 | + |
| 180 | + callableToTest.call(req, mockObserver, context); |
| 181 | + |
| 182 | + Mockito.verify(mockObserver, Mockito.times(1)).onResponse(Mockito.eq(expectedResponse)); |
| 183 | + } |
| 184 | + |
141 | 185 | private static class MockResponseObserver implements ResponseObserver<MutateRowsResponse> {
|
142 | 186 |
|
143 | 187 | private ResponseObserver<MutateRowsResponse> observer;
|
|
0 commit comments