Skip to content

Commit 391c330

Browse files
committed
test(bigtable): add BoundStatementDeserializerTest to test-proxy module
Change-Id: Ib27d1c22cf20ec7752681eab1fefbb181bbeb45e
1 parent 6d10dc2 commit 391c330

1 file changed

Lines changed: 125 additions & 0 deletions

File tree

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
/*
2+
* Copyright 2024 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.google.cloud.bigtable.testproxy;
17+
18+
import static com.google.common.truth.Truth.assertThat;
19+
import static org.junit.Assert.assertThrows;
20+
import static org.mockito.ArgumentMatchers.anyString;
21+
import static org.mockito.ArgumentMatchers.nullable;
22+
import static org.mockito.Mockito.mock;
23+
import static org.mockito.Mockito.verify;
24+
import static org.mockito.Mockito.when;
25+
26+
import com.google.bigtable.v2.ExecuteQueryRequest;
27+
import com.google.bigtable.v2.Type;
28+
import com.google.bigtable.v2.Value;
29+
import com.google.cloud.bigtable.data.v2.models.sql.BoundStatement;
30+
import com.google.cloud.bigtable.data.v2.models.sql.PreparedStatement;
31+
import org.junit.Test;
32+
import org.junit.runner.RunWith;
33+
import org.junit.runners.JUnit4;
34+
35+
@RunWith(JUnit4.class)
36+
public class BoundStatementDeserializerTest {
37+
38+
@Test
39+
public void testDeserializeStringViewParameter() {
40+
PreparedStatement preparedStatement = mock(PreparedStatement.class);
41+
BoundStatement.Builder builder = mock(BoundStatement.Builder.class);
42+
when(preparedStatement.bind()).thenReturn(builder);
43+
when(builder.setStringViewParameter(anyString(), nullable(String.class))).thenReturn(builder);
44+
45+
Value stringVal =
46+
Value.newBuilder()
47+
.setType(Type.newBuilder().setStringType(Type.String.getDefaultInstance()))
48+
.setStringValue("alice")
49+
.build();
50+
com.google.cloud.bigtable.testproxy.ExecuteQueryRequest request =
51+
com.google.cloud.bigtable.testproxy.ExecuteQueryRequest.newBuilder()
52+
.setRequest(ExecuteQueryRequest.newBuilder().putViewParameters("user_id", stringVal))
53+
.build();
54+
55+
BoundStatementDeserializer.toBoundStatement(preparedStatement, request);
56+
verify(builder).setStringViewParameter("user_id", "alice");
57+
}
58+
59+
@Test
60+
public void testDeserializeNullStringViewParameter() {
61+
PreparedStatement preparedStatement = mock(PreparedStatement.class);
62+
BoundStatement.Builder builder = mock(BoundStatement.Builder.class);
63+
when(preparedStatement.bind()).thenReturn(builder);
64+
when(builder.setStringViewParameter(anyString(), nullable(String.class))).thenReturn(builder);
65+
66+
Value nullStringVal =
67+
Value.newBuilder()
68+
.setType(Type.newBuilder().setStringType(Type.String.getDefaultInstance()))
69+
.build();
70+
com.google.cloud.bigtable.testproxy.ExecuteQueryRequest request =
71+
com.google.cloud.bigtable.testproxy.ExecuteQueryRequest.newBuilder()
72+
.setRequest(
73+
ExecuteQueryRequest.newBuilder().putViewParameters("user_id", nullStringVal))
74+
.build();
75+
76+
BoundStatementDeserializer.toBoundStatement(preparedStatement, request);
77+
verify(builder).setStringViewParameter("user_id", null);
78+
}
79+
80+
@Test
81+
public void testDeserializeInvalidTypeViewParameterThrows() {
82+
PreparedStatement preparedStatement = mock(PreparedStatement.class);
83+
BoundStatement.Builder builder = mock(BoundStatement.Builder.class);
84+
when(preparedStatement.bind()).thenReturn(builder);
85+
86+
Value intVal =
87+
Value.newBuilder()
88+
.setType(Type.newBuilder().setInt64Type(Type.Int64.getDefaultInstance()))
89+
.setIntValue(123)
90+
.build();
91+
com.google.cloud.bigtable.testproxy.ExecuteQueryRequest request =
92+
com.google.cloud.bigtable.testproxy.ExecuteQueryRequest.newBuilder()
93+
.setRequest(ExecuteQueryRequest.newBuilder().putViewParameters("user_id", intVal))
94+
.build();
95+
96+
IllegalArgumentException e =
97+
assertThrows(
98+
IllegalArgumentException.class,
99+
() -> BoundStatementDeserializer.toBoundStatement(preparedStatement, request));
100+
assertThat(e.getMessage()).contains("Unexpected view parameter type in param");
101+
}
102+
103+
@Test
104+
public void testDeserializeMalformedStringViewParameterThrows() {
105+
PreparedStatement preparedStatement = mock(PreparedStatement.class);
106+
BoundStatement.Builder builder = mock(BoundStatement.Builder.class);
107+
when(preparedStatement.bind()).thenReturn(builder);
108+
109+
Value malformedVal =
110+
Value.newBuilder()
111+
.setType(Type.newBuilder().setStringType(Type.String.getDefaultInstance()))
112+
.setIntValue(123)
113+
.build();
114+
com.google.cloud.bigtable.testproxy.ExecuteQueryRequest request =
115+
com.google.cloud.bigtable.testproxy.ExecuteQueryRequest.newBuilder()
116+
.setRequest(ExecuteQueryRequest.newBuilder().putViewParameters("user_id", malformedVal))
117+
.build();
118+
119+
IllegalArgumentException e =
120+
assertThrows(
121+
IllegalArgumentException.class,
122+
() -> BoundStatementDeserializer.toBoundStatement(preparedStatement, request));
123+
assertThat(e.getMessage()).contains("Malformed string value");
124+
}
125+
}

0 commit comments

Comments
 (0)