Skip to content

Commit c6a7a00

Browse files
authored
Increase test coverage for proto/TypeMapper.java (#962)
1 parent 31dd17f commit c6a7a00

File tree

3 files changed

+213
-53
lines changed

3 files changed

+213
-53
lines changed

src/test/java/com/uber/cadence/internal/compatibility/ProtoObjects.java

+36-34
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,14 @@ public final class ProtoObjects {
201201
.setScheduledTimeOfThisAttempt(timestampNanos(3))
202202
.setTaskToken(utf8("taskToken"))
203203
.build();
204+
public static final BadBinaryInfo BAD_BINARY_INFO =
205+
BadBinaryInfo.newBuilder()
206+
.setReason("reason")
207+
.setOperator("operator")
208+
.setCreatedTime(timestampNanos(3))
209+
.build();
210+
public static final BadBinaries BAD_BINARIES =
211+
BadBinaries.newBuilder().putBinaries("badBinaryKey", BAD_BINARY_INFO).build();
204212
public static final Domain DOMAIN =
205213
Domain.newBuilder()
206214
.setId("uuid")
@@ -210,15 +218,7 @@ public final class ProtoObjects {
210218
.setOwnerEmail("email")
211219
.putAllData(DATA)
212220
.setWorkflowExecutionRetentionPeriod(days(2))
213-
.setBadBinaries(
214-
BadBinaries.newBuilder()
215-
.putBinaries(
216-
"badBinaryKey",
217-
BadBinaryInfo.newBuilder()
218-
.setReason("reason")
219-
.setOperator("operator")
220-
.setCreatedTime(timestampNanos(3))
221-
.build()))
221+
.setBadBinaries(BAD_BINARIES)
222222
.setHistoryArchivalStatus(ArchivalStatus.ARCHIVAL_STATUS_ENABLED)
223223
.setHistoryArchivalUri("historyArchivalUri")
224224
.setVisibilityArchivalStatus(ArchivalStatus.ARCHIVAL_STATUS_DISABLED)
@@ -228,6 +228,24 @@ public final class ProtoObjects {
228228
.setFailoverVersion(1)
229229
.setIsGlobalDomain(true)
230230
.build();
231+
public static final WorkerVersionInfo WORKER_VERSION_INFO =
232+
WorkerVersionInfo.newBuilder().setFeatureVersion("featureVersion").setImpl("impl").build();
233+
public static final StartTimeFilter START_TIME_FILTER =
234+
StartTimeFilter.newBuilder()
235+
.setEarliestTime(timestampNanos(2))
236+
.setLatestTime(timestampNanos(3))
237+
.build();
238+
public static final WorkflowExecutionFilter WORKFLOW_EXECUTION_FILTER =
239+
WorkflowExecutionFilter.newBuilder()
240+
.setWorkflowId(WORKFLOW_EXECUTION.getWorkflowId())
241+
.setRunId(WORKFLOW_EXECUTION.getRunId())
242+
.build();
243+
public static final WorkflowTypeFilter WORKFLOW_TYPE_FILTER =
244+
WorkflowTypeFilter.newBuilder().setName(WORKFLOW_TYPE.getName()).build();
245+
public static final StatusFilter STATUS_FILTER =
246+
StatusFilter.newBuilder()
247+
.setStatus(WorkflowExecutionCloseStatus.WORKFLOW_EXECUTION_CLOSE_STATUS_COMPLETED)
248+
.build();
231249

232250
public static Decision DECISION_SCHEDULE_ACTIVITY_TASK =
233251
Decision.newBuilder()
@@ -930,8 +948,7 @@ public final class ProtoObjects {
930948
.setResultType(QueryResultType.QUERY_RESULT_TYPE_ANSWERED)
931949
.setAnswer(payload("queryResult"))
932950
.setErrorMessage("errorMessage"))
933-
.setWorkerVersionInfo(
934-
WorkerVersionInfo.newBuilder().setFeatureVersion("featureVersion").setImpl("impl"))
951+
.setWorkerVersionInfo(WORKER_VERSION_INFO)
935952
.setTaskToken(utf8("taskToken"))
936953
.build();
937954
public static final ScanWorkflowExecutionsRequest SCAN_WORKFLOW_EXECUTIONS_REQUEST =
@@ -1144,36 +1161,21 @@ public final class ProtoObjects {
11441161
ListClosedWorkflowExecutionsRequest.newBuilder()
11451162
.setDomain("domain")
11461163
.setPageSize(1)
1147-
.setExecutionFilter(
1148-
WorkflowExecutionFilter.newBuilder()
1149-
.setWorkflowId(WORKFLOW_EXECUTION.getWorkflowId())
1150-
.setRunId(WORKFLOW_EXECUTION.getRunId()))
1151-
.setTypeFilter(WorkflowTypeFilter.newBuilder().setName(WORKFLOW_TYPE.getName()))
1152-
.setStatusFilter(
1153-
StatusFilter.newBuilder()
1154-
.setStatus(
1155-
WorkflowExecutionCloseStatus.WORKFLOW_EXECUTION_CLOSE_STATUS_COMPLETED))
1164+
.setExecutionFilter(WORKFLOW_EXECUTION_FILTER)
1165+
.setTypeFilter(WORKFLOW_TYPE_FILTER)
1166+
.setStatusFilter(STATUS_FILTER)
11561167
.setNextPageToken(utf8("nextPageToken"))
1157-
.setStartTimeFilter(
1158-
StartTimeFilter.newBuilder()
1159-
.setEarliestTime(timestampNanos(2))
1160-
.setLatestTime(timestampNanos(3)))
1168+
.setStartTimeFilter(START_TIME_FILTER)
11611169
.build();
11621170

11631171
public static final ListOpenWorkflowExecutionsRequest LIST_OPEN_WORKFLOW_EXECUTIONS_REQUEST =
11641172
ListOpenWorkflowExecutionsRequest.newBuilder()
11651173
.setDomain("domain")
11661174
.setPageSize(1)
1167-
.setExecutionFilter(
1168-
WorkflowExecutionFilter.newBuilder()
1169-
.setWorkflowId(WORKFLOW_EXECUTION.getWorkflowId())
1170-
.setRunId(WORKFLOW_EXECUTION.getRunId()))
1171-
.setTypeFilter(WorkflowTypeFilter.newBuilder().setName(WORKFLOW_TYPE.getName()))
1175+
.setExecutionFilter(WORKFLOW_EXECUTION_FILTER)
1176+
.setTypeFilter(WORKFLOW_TYPE_FILTER)
11721177
.setNextPageToken(utf8("nextPageToken"))
1173-
.setStartTimeFilter(
1174-
StartTimeFilter.newBuilder()
1175-
.setEarliestTime(timestampNanos(2))
1176-
.setLatestTime(timestampNanos(3)))
1178+
.setStartTimeFilter(START_TIME_FILTER)
11771179
.build();
11781180

11791181
public static final StartWorkflowExecutionResponse START_WORKFLOW_EXECUTION_RESPONSE =
@@ -1385,7 +1387,7 @@ public final class ProtoObjects {
13851387

13861388
private ProtoObjects() {}
13871389

1388-
private static Payload payload(String value) {
1390+
public static Payload payload(String value) {
13891391
return Payload.newBuilder().setData(utf8(value)).build();
13901392
}
13911393

src/test/java/com/uber/cadence/internal/compatibility/ThriftObjects.java

+20-19
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,8 @@ public final class ThriftObjects {
138138
.setStartedTimestamp(2)
139139
.setAttempt(3)
140140
.setOriginalScheduledTimestamp(4);
141+
public static final WorkerVersionInfo WORKER_VERSION_INFO =
142+
new WorkerVersionInfo().setFeatureVersion("featureVersion").setImpl("impl");
141143
public static final SupportedClientVersions SUPPORTED_CLIENT_VERSIONS =
142144
new SupportedClientVersions().setGoSdk("goSdk").setJavaSdk("javaSdk");
143145
public static final Map<String, IndexedValueType> INDEXED_VALUES =
@@ -161,23 +163,25 @@ public final class ThriftObjects {
161163
.setOwnerEmail("email")
162164
.setData(DATA)
163165
.setUuid("uuid");
166+
public static final BadBinaryInfo BAD_BINARY_INFO =
167+
new BadBinaryInfo().setReason("reason").setOperator("operator").setCreatedTimeNano(3);
168+
public static final BadBinaries BAD_BINARIES =
169+
new BadBinaries().setBinaries(ImmutableMap.of("badBinaryKey", BAD_BINARY_INFO));
164170
public static final DomainConfiguration DOMAIN_CONFIGURATION =
165171
new DomainConfiguration()
166172
.setWorkflowExecutionRetentionPeriodInDays(2)
167-
.setBadBinaries(
168-
new BadBinaries()
169-
.setBinaries(
170-
ImmutableMap.of(
171-
"badBinaryKey",
172-
new BadBinaryInfo()
173-
.setReason("reason")
174-
.setOperator("operator")
175-
.setCreatedTimeNano(3))))
173+
.setBadBinaries(BAD_BINARIES)
176174
.setHistoryArchivalStatus(ArchivalStatus.ENABLED)
177175
.setHistoryArchivalURI("historyArchivalUri")
178176
.setVisibilityArchivalStatus(ArchivalStatus.DISABLED)
179177
.setVisibilityArchivalURI("visibilityArchivalUri")
180178
.setEmitMetric(true);
179+
public static final StartTimeFilter START_TIME_FILTER =
180+
new StartTimeFilter().setEarliestTime(2).setLatestTime(3);
181+
public static final WorkflowExecutionFilter WORKFLOW_EXECUTION_FILTER =
182+
new WorkflowExecutionFilter().setWorkflowId(WORKFLOW_ID).setRunId(RUN_ID);
183+
public static final WorkflowTypeFilter WORKFLOW_TYPE_FILTER =
184+
new WorkflowTypeFilter().setName(WORKFLOW_TYPE.getName());
181185

182186
public static final DomainReplicationConfiguration DOMAIN_REPLICATION_CONFIGURATION =
183187
new DomainReplicationConfiguration()
@@ -814,8 +818,7 @@ public final class ThriftObjects {
814818
.setCompletedType(QueryTaskCompletedType.COMPLETED)
815819
.setQueryResult(utf8("queryResult"))
816820
.setErrorMessage("errorMessage")
817-
.setWorkerVersionInfo(
818-
new WorkerVersionInfo().setFeatureVersion("featureVersion").setImpl("impl"))
821+
.setWorkerVersionInfo(WORKER_VERSION_INFO)
819822
.setTaskToken(utf8("taskToken"));
820823

821824
public static final ListWorkflowExecutionsRequest LIST_WORKFLOW_EXECUTIONS_REQUEST =
@@ -990,22 +993,20 @@ public final class ThriftObjects {
990993
new ListClosedWorkflowExecutionsRequest()
991994
.setDomain("domain")
992995
.setMaximumPageSize(1)
993-
.setExecutionFilter(
994-
new WorkflowExecutionFilter().setWorkflowId(WORKFLOW_ID).setRunId(RUN_ID))
995-
.setTypeFilter(new WorkflowTypeFilter().setName(WORKFLOW_TYPE.getName()))
996+
.setExecutionFilter(WORKFLOW_EXECUTION_FILTER)
997+
.setTypeFilter(WORKFLOW_TYPE_FILTER)
996998
.setStatusFilter(WorkflowExecutionCloseStatus.COMPLETED)
997999
.setNextPageToken(utf8("nextPageToken"))
998-
.setStartTimeFilter(new StartTimeFilter().setEarliestTime(2).setLatestTime(3));
1000+
.setStartTimeFilter(START_TIME_FILTER);
9991001

10001002
public static final ListOpenWorkflowExecutionsRequest LIST_OPEN_WORKFLOW_EXECUTIONS_REQUEST =
10011003
new ListOpenWorkflowExecutionsRequest()
10021004
.setDomain("domain")
10031005
.setMaximumPageSize(1)
1004-
.setExecutionFilter(
1005-
new WorkflowExecutionFilter().setWorkflowId(WORKFLOW_ID).setRunId(RUN_ID))
1006-
.setTypeFilter(new WorkflowTypeFilter().setName(WORKFLOW_TYPE.getName()))
1006+
.setExecutionFilter(WORKFLOW_EXECUTION_FILTER)
1007+
.setTypeFilter(WORKFLOW_TYPE_FILTER)
10071008
.setNextPageToken(utf8("nextPageToken"))
1008-
.setStartTimeFilter(new StartTimeFilter().setEarliestTime(2).setLatestTime(3));
1009+
.setStartTimeFilter(START_TIME_FILTER);
10091010

10101011
public static final StartWorkflowExecutionResponse START_WORKFLOW_EXECUTION_RESPONSE =
10111012
new StartWorkflowExecutionResponse().setRunId(RUN_ID);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
/*
2+
* Copyright 2012-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Modifications copyright (C) 2017 Uber Technologies, Inc.
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License"). You may not
7+
* use this file except in compliance with the License. A copy of the License is
8+
* located at
9+
*
10+
* http://aws.amazon.com/apache2.0
11+
*
12+
* or in the "license" file accompanying this file. This file is distributed on
13+
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
14+
* express or implied. See the License for the specific language governing
15+
* permissions and limitations under the License.
16+
*/
17+
package com.uber.cadence.internal.compatibility.proto;
18+
19+
import static org.junit.Assert.assertEquals;
20+
import static org.junit.Assert.assertNull;
21+
import static org.junit.Assert.assertTrue;
22+
23+
import com.google.common.collect.ImmutableList;
24+
import com.google.common.collect.ImmutableMap;
25+
import com.google.protobuf.Message;
26+
import com.uber.cadence.WorkflowExecutionCloseStatus;
27+
import com.uber.cadence.internal.compatibility.ProtoObjects;
28+
import com.uber.cadence.internal.compatibility.ThriftObjects;
29+
import java.util.Arrays;
30+
import java.util.List;
31+
import java.util.Map;
32+
import java.util.function.Function;
33+
import org.junit.Test;
34+
import org.junit.runner.RunWith;
35+
import org.junit.runners.Parameterized;
36+
37+
@RunWith(Parameterized.class)
38+
public class TypeMapperTest<T, P> {
39+
40+
@Parameterized.Parameter(0)
41+
public String testName;
42+
43+
@Parameterized.Parameter(1)
44+
public T from;
45+
46+
@Parameterized.Parameter(2)
47+
public P to;
48+
49+
@Parameterized.Parameter(3)
50+
public Function<T, P> via;
51+
52+
@Test
53+
public void testMapper() {
54+
P actual = via.apply(from);
55+
assertEquals(to, actual);
56+
}
57+
58+
@Test
59+
public void testHandlesNull() {
60+
P actual = via.apply(null);
61+
62+
if (actual instanceof List<?>) {
63+
assertTrue(
64+
"Mapper functions returning a list should return an empty list",
65+
((List<?>) actual).isEmpty());
66+
} else if (actual instanceof Map<?, ?>) {
67+
assertTrue(
68+
"Mapper functions returning a map should return an empty map",
69+
((Map<?, ?>) actual).isEmpty());
70+
} else if (actual instanceof Message) {
71+
assertEquals(
72+
"Mapper functions returning a Message should return the default value",
73+
((Message) actual).getDefaultInstanceForType(),
74+
actual);
75+
} else {
76+
assertNull("Mapper functions should accept null, returning null", actual);
77+
}
78+
}
79+
80+
@Parameterized.Parameters(name = "{0}")
81+
public static Iterable<Object[]> cases() {
82+
return Arrays.asList(
83+
testCase(
84+
ThriftObjects.BAD_BINARY_INFO, ProtoObjects.BAD_BINARY_INFO, TypeMapper::badBinaryInfo),
85+
testCase(
86+
ThriftObjects.utf8Bytes("data"), ProtoObjects.payload("data"), TypeMapper::payload),
87+
testCase(ThriftObjects.ACTIVITY_TYPE, ProtoObjects.ACTIVITY_TYPE, TypeMapper::activityType),
88+
testCase(ThriftObjects.WORKFLOW_TYPE, ProtoObjects.WORKFLOW_TYPE, TypeMapper::workflowType),
89+
testCase(ThriftObjects.TASK_LIST, ProtoObjects.TASK_LIST, TypeMapper::taskList),
90+
testCase(
91+
ThriftObjects.TASK_LIST_METADATA,
92+
ProtoObjects.TASK_LIST_METADATA,
93+
TypeMapper::taskListMetadata),
94+
testCase(ThriftObjects.RETRY_POLICY, ProtoObjects.RETRY_POLICY, TypeMapper::retryPolicy),
95+
testCase(ThriftObjects.HEADER, ProtoObjects.HEADER, TypeMapper::header),
96+
testCase(ThriftObjects.MEMO, ProtoObjects.MEMO, TypeMapper::memo),
97+
testCase(
98+
ThriftObjects.SEARCH_ATTRIBUTES,
99+
ProtoObjects.SEARCH_ATTRIBUTES,
100+
TypeMapper::searchAttributes),
101+
testCase(ThriftObjects.BAD_BINARIES, ProtoObjects.BAD_BINARIES, TypeMapper::badBinaries),
102+
testCase(
103+
ThriftObjects.CLUSTER_REPLICATION_CONFIGURATION,
104+
ProtoObjects.CLUSTER_REPLICATION_CONFIGURATION,
105+
TypeMapper::clusterReplicationConfiguration),
106+
testCase(
107+
ThriftObjects.WORKFLOW_QUERY, ProtoObjects.WORKFLOW_QUERY, TypeMapper::workflowQuery),
108+
testCase(
109+
ThriftObjects.WORKFLOW_QUERY_RESULT,
110+
ProtoObjects.WORKFLOW_QUERY_RESULT,
111+
TypeMapper::workflowQueryResult),
112+
testCase(
113+
ThriftObjects.STICKY_EXECUTION_ATTRIBUTES,
114+
ProtoObjects.STICKY_EXECUTION_ATTRIBUTES,
115+
TypeMapper::stickyExecutionAttributes),
116+
testCase(
117+
ThriftObjects.WORKER_VERSION_INFO,
118+
ProtoObjects.WORKER_VERSION_INFO,
119+
TypeMapper::workerVersionInfo),
120+
testCase(
121+
ThriftObjects.START_TIME_FILTER,
122+
ProtoObjects.START_TIME_FILTER,
123+
TypeMapper::startTimeFilter),
124+
testCase(
125+
ThriftObjects.WORKFLOW_EXECUTION_FILTER,
126+
ProtoObjects.WORKFLOW_EXECUTION_FILTER,
127+
TypeMapper::workflowExecutionFilter),
128+
testCase(
129+
ThriftObjects.WORKFLOW_TYPE_FILTER,
130+
ProtoObjects.WORKFLOW_TYPE_FILTER,
131+
TypeMapper::workflowTypeFilter),
132+
testCase(
133+
WorkflowExecutionCloseStatus.COMPLETED,
134+
ProtoObjects.STATUS_FILTER,
135+
TypeMapper::statusFilter),
136+
testCase(
137+
ImmutableMap.of("key", ThriftObjects.utf8("data")),
138+
ImmutableMap.of("key", ProtoObjects.payload("data")),
139+
TypeMapper::payloadByteBufferMap),
140+
testCase(
141+
ImmutableMap.of("key", ThriftObjects.BAD_BINARY_INFO),
142+
ImmutableMap.of("key", ProtoObjects.BAD_BINARY_INFO),
143+
TypeMapper::badBinaryInfoMap),
144+
testCase(
145+
ImmutableList.of(ThriftObjects.CLUSTER_REPLICATION_CONFIGURATION),
146+
ImmutableList.of(ProtoObjects.CLUSTER_REPLICATION_CONFIGURATION),
147+
TypeMapper::clusterReplicationConfigurationArray),
148+
testCase(
149+
ImmutableMap.of("key", ThriftObjects.WORKFLOW_QUERY_RESULT),
150+
ImmutableMap.of("key", ProtoObjects.WORKFLOW_QUERY_RESULT),
151+
TypeMapper::workflowQueryResultMap));
152+
}
153+
154+
private static <T, P> Object[] testCase(T from, P to, Function<T, P> via) {
155+
return new Object[] {from.getClass().getSimpleName(), from, to, via};
156+
}
157+
}

0 commit comments

Comments
 (0)