Skip to content

Commit a0249e5

Browse files
test: fix mock server ARRAY<BYTES> parameter cast (#2344)
* test: fix mock server ARRAY<BYTES> parameter cast The recent change that made decoding BYTES and ARRAY<BYTES> lazy did not update all code paths in the mock Spanner server that is used for testing. This meant that tests that tried to use ARRAY<BYTES> query parameters would run into a ClassCastException. This problem only occurs in (internal) test code and does not affect user code. * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent 4c4b14a commit a0249e5

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static com.google.cloud.spanner.MockSpannerTestUtil.READ_ONE_KEY_VALUE_STATEMENT;
2222
import static com.google.cloud.spanner.MockSpannerTestUtil.READ_TABLE_NAME;
2323
import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1;
24+
import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1_RESULTSET;
2425
import static com.google.cloud.spanner.SpannerApiFutures.get;
2526
import static com.google.common.truth.Truth.assertThat;
2627
import static org.junit.Assert.assertEquals;
@@ -2943,6 +2944,24 @@ public void testMetadataUnknownTypes() {
29432944
}
29442945
}
29452946

2947+
@Test
2948+
public void testStatementWithBytesArrayParameter() {
2949+
Statement statement =
2950+
Statement.newBuilder("select id from test where b=@p1")
2951+
.bind("p1")
2952+
.toBytesArray(
2953+
ImmutableList.of(ByteArray.copyFrom("test1"), ByteArray.copyFrom("test2")))
2954+
.build();
2955+
mockSpanner.putStatementResult(StatementResult.query(statement, SELECT1_RESULTSET));
2956+
DatabaseClient client =
2957+
spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
2958+
try (ResultSet resultSet = client.singleUse().executeQuery(statement)) {
2959+
assertTrue(resultSet.next());
2960+
assertEquals(1L, resultSet.getLong(0));
2961+
assertFalse(resultSet.next());
2962+
}
2963+
}
2964+
29462965
static void assertAsString(String expected, ResultSet resultSet, int col) {
29472966
assertEquals(expected, resultSet.getValue(col).getAsString());
29482967
assertEquals(ImmutableList.of(expected), resultSet.getValue(col).getAsStringList());

google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.google.cloud.ByteArray;
2121
import com.google.cloud.Date;
2222
import com.google.cloud.spanner.AbstractResultSet.GrpcStruct;
23+
import com.google.cloud.spanner.AbstractResultSet.LazyByteArray;
2324
import com.google.cloud.spanner.SessionPool.SessionPoolTransactionContext;
2425
import com.google.cloud.spanner.TransactionRunnerImpl.TransactionContextImpl;
2526
import com.google.common.base.Optional;
@@ -1362,9 +1363,11 @@ private Statement buildStatement(
13621363
builder
13631364
.bind(fieldName)
13641365
.toBytesArray(
1365-
(Iterable<ByteArray>)
1366-
GrpcStruct.decodeArrayValue(
1367-
com.google.cloud.spanner.Type.bytes(), value.getListValue()));
1366+
Iterables.transform(
1367+
(Iterable<LazyByteArray>)
1368+
GrpcStruct.decodeArrayValue(
1369+
com.google.cloud.spanner.Type.bytes(), value.getListValue()),
1370+
LazyByteArray::getByteArray));
13681371
break;
13691372
case DATE:
13701373
builder

0 commit comments

Comments
 (0)