Skip to content
This repository was archived by the owner on Sep 26, 2023. It is now read-only.

Commit 471a134

Browse files
committed
test(queryparam): atomized tests
Also added tests for serializing objects that contain Any typed messages. Note that the type registry must have the tested types beforehand, so they were added in the test class setup
1 parent 46b8bd7 commit 471a134

File tree

1 file changed

+70
-19
lines changed

1 file changed

+70
-19
lines changed

gax-httpjson/src/test/java/com/google/api/gax/httpjson/ProtoRestSerializerTest.java

Lines changed: 70 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
package com.google.api.gax.httpjson;
3232

3333
import com.google.common.truth.Truth;
34+
import com.google.protobuf.Any;
3435
import com.google.protobuf.Duration;
3536
import com.google.protobuf.Field;
3637
import com.google.protobuf.Field.Cardinality;
@@ -39,6 +40,7 @@
3940
import com.google.protobuf.Int32Value;
4041
import com.google.protobuf.Option;
4142
import com.google.protobuf.Timestamp;
43+
import com.google.protobuf.TypeRegistry;
4244
import java.io.IOException;
4345
import java.io.StringReader;
4446
import java.util.Arrays;
@@ -58,7 +60,14 @@ public class ProtoRestSerializerTest {
5860

5961
@Before
6062
public void setUp() {
61-
requestSerializer = ProtoRestSerializer.create();
63+
// tests with Any type messages require corresponding descriptors in the type registry
64+
requestSerializer =
65+
ProtoRestSerializer.create(
66+
TypeRegistry.newBuilder()
67+
.add(FieldMask.getDescriptor())
68+
.add(Duration.getDescriptor())
69+
.build());
70+
6271
field =
6372
Field.newBuilder()
6473
.setNumber(2)
@@ -189,30 +198,72 @@ public void putQueryParamPrimitive() {
189198
@Test
190199
public void putQueryParamComplexObject() {
191200
Map<String, List<String>> fields = new HashMap<>();
192-
requestSerializer.putQueryParam(
193-
fields, "optName1", Duration.newBuilder().setSeconds(1).setNanos(1).build());
194-
requestSerializer.putQueryParam(
195-
fields, "optName2", Timestamp.newBuilder().setSeconds(1).setNanos(1).build());
196-
requestSerializer.putQueryParam(
197-
fields, "optName3", FieldMask.newBuilder().addPaths("a.b").addPaths("c.d").build());
198-
requestSerializer.putQueryParam(fields, "optName4", Int32Value.of(1));
199-
requestSerializer.putQueryParam(fields, "optName5", FloatValue.of(1.1f));
200-
requestSerializer.putQueryParam(fields, "optName6", field);
201+
Any fieldMask = Any.pack(FieldMask.newBuilder().addPaths("a.b.c").addPaths("d.e.f").build());
202+
Any duration1 = Any.pack(Duration.newBuilder().setSeconds(1).setNanos(1).build());
203+
Any duration2 = Any.pack(Duration.newBuilder().setSeconds(2).setNanos(2).build());
204+
Field value =
205+
Field.newBuilder()
206+
.setNumber(2)
207+
.setName("well_known_container")
208+
.addOptions(Option.newBuilder().setName("duration").setValue(duration1).build())
209+
.addOptions(Option.newBuilder().setName("duration").setValue(duration2).build())
210+
.addOptions(Option.newBuilder().setName("mask").setValue(fieldMask).build())
211+
.setCardinality(Cardinality.CARDINALITY_OPTIONAL)
212+
.build();
213+
requestSerializer.putQueryParam(fields, "object", value);
201214

202215
Map<String, List<String>> expectedFields = new HashMap<>();
203-
expectedFields.put("optName1", Arrays.asList("1.000000001s"));
204-
expectedFields.put("optName2", Arrays.asList("1970-01-01T00:00:01.000000001Z"));
205-
expectedFields.put("optName3", Arrays.asList("a.b,c.d"));
206-
expectedFields.put("optName4", Arrays.asList("1"));
207-
expectedFields.put("optName5", Arrays.asList("1.1"));
208-
expectedFields.put("optName6.name", Arrays.asList("field_name1"));
209-
expectedFields.put("optName6.number", Arrays.asList("2"));
210-
expectedFields.put("optName6.options.name", Arrays.asList("opt_name1", "opt_name2"));
211-
expectedFields.put("optName6.cardinality", Arrays.asList("1"));
216+
expectedFields.put("object.name", Arrays.asList("well_known_container"));
217+
expectedFields.put("object.number", Arrays.asList("2"));
218+
expectedFields.put("object.options.name", Arrays.asList("duration", "duration", "mask"));
219+
expectedFields.put(
220+
"object.options.value.value", Arrays.asList("1.000000001s", "2.000000002s", "a.b.c,d.e.f"));
221+
// used by JSON parser to obtain descriptors from this type url
222+
expectedFields.put(
223+
"object.options.value.@type",
224+
Arrays.asList(
225+
"type.googleapis.com/google.protobuf.Duration",
226+
"type.googleapis.com/google.protobuf.Duration",
227+
"type.googleapis.com/google.protobuf.FieldMask"));
228+
expectedFields.put("object.cardinality", Arrays.asList("1"));
212229

213230
Truth.assertThat(fields).isEqualTo(expectedFields);
214231
}
215232

233+
@Test
234+
public void putQueryParamDuration() {
235+
queryParamHelper(Duration.newBuilder().setSeconds(1).setNanos(1).build(), "1.000000001s");
236+
}
237+
238+
@Test
239+
public void putQueryParamTimestamp() {
240+
queryParamHelper(
241+
Timestamp.newBuilder().setSeconds(1).setNanos(1).build(), "1970-01-01T00:00:01.000000001Z");
242+
}
243+
244+
@Test
245+
public void putQueryParamFieldMask() {
246+
queryParamHelper(FieldMask.newBuilder().addPaths("a.b").addPaths("c.d").build(), "a.b,c.d");
247+
}
248+
249+
@Test
250+
public void putQueryParamInt32Value() {
251+
queryParamHelper(Int32Value.of(1), "1");
252+
}
253+
254+
@Test
255+
public void putQueryParamFloatValue() {
256+
queryParamHelper(FloatValue.of(1.1f), "1.1");
257+
}
258+
259+
private void queryParamHelper(Object value, String expected) {
260+
Map<String, List<String>> fields = new HashMap<>();
261+
requestSerializer.putQueryParam(fields, "value", value);
262+
Map<String, List<String>> expectedFields = new HashMap<>();
263+
expectedFields.put("value", Arrays.asList(expected));
264+
Truth.assertThat(fields).isEqualTo(expectedFields);
265+
}
266+
216267
@Test
217268
public void toBody() {
218269
String body = requestSerializer.toBody("bodyField1", field, false);

0 commit comments

Comments
 (0)