Skip to content

Commit 8718412

Browse files
Fix event stream test bytes optionality
This fixes a bug in the event stream test trait where events without `bytes` would fail to serialize due to not using Optional.ofNullable.
1 parent e629796 commit 8718412

File tree

4 files changed

+116
-2
lines changed

4 files changed

+116
-2
lines changed

smithy-protocol-test-traits/src/main/java/software/amazon/smithy/protocoltests/traits/eventstream/Event.java

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
package software.amazon.smithy.protocoltests.traits.eventstream;
66

77
import java.nio.charset.StandardCharsets;
8+
import java.util.Arrays;
89
import java.util.Base64;
910
import java.util.List;
1011
import java.util.Map;
12+
import java.util.Objects;
1113
import java.util.Optional;
1214
import software.amazon.smithy.model.node.ObjectNode;
1315
import software.amazon.smithy.model.shapes.ShapeId;
@@ -137,7 +139,7 @@ public Optional<String> getBodyMediaType() {
137139
* @return Returns an optional binary representation of the entire event.
138140
*/
139141
public Optional<byte[]> getBytes() {
140-
return Optional.of(bytes);
142+
return Optional.ofNullable(bytes);
141143
}
142144

143145
/**
@@ -185,6 +187,37 @@ public static Builder builder() {
185187
return new Builder();
186188
}
187189

190+
@Override
191+
public boolean equals(Object o) {
192+
if (!(o instanceof Event)) {
193+
return false;
194+
}
195+
Event event = (Event) o;
196+
return type == event.type && Objects.equals(params, event.params)
197+
&& Objects.equals(headers, event.headers)
198+
&& Objects.equals(forbidHeaders, event.forbidHeaders)
199+
&& Objects.equals(requireHeaders, event.requireHeaders)
200+
&& Objects.equals(body, event.body)
201+
&& Objects.equals(bodyMediaType, event.bodyMediaType)
202+
&& Objects.deepEquals(bytes, event.bytes)
203+
&& Objects.equals(vendorParams, event.vendorParams)
204+
&& Objects.equals(vendorParamsShape, event.vendorParamsShape);
205+
}
206+
207+
@Override
208+
public int hashCode() {
209+
return Objects.hash(type,
210+
params,
211+
headers,
212+
forbidHeaders,
213+
requireHeaders,
214+
body,
215+
bodyMediaType,
216+
Arrays.hashCode(bytes),
217+
vendorParams,
218+
vendorParamsShape);
219+
}
220+
188221
/**
189222
* Builder used to create {@link Event}.
190223
*/
@@ -244,7 +277,11 @@ public Builder bodyMediaType(String bodyMediaType) {
244277
}
245278

246279
public Builder bytes(String bytes) {
247-
this.bytes = Base64.getDecoder().decode(bytes.getBytes(StandardCharsets.UTF_8));
280+
if (bytes == null) {
281+
this.bytes = null;
282+
} else {
283+
this.bytes = Base64.getDecoder().decode(bytes.getBytes(StandardCharsets.UTF_8));
284+
}
248285
return this;
249286
}
250287

smithy-protocol-test-traits/src/main/java/software/amazon/smithy/protocoltests/traits/eventstream/EventStreamTestCase.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package software.amazon.smithy.protocoltests.traits.eventstream;
66

77
import java.util.List;
8+
import java.util.Objects;
89
import java.util.Optional;
910
import software.amazon.smithy.model.node.ObjectNode;
1011
import software.amazon.smithy.model.shapes.ShapeId;
@@ -195,6 +196,45 @@ public static Builder builder() {
195196
return new Builder();
196197
}
197198

199+
@Override
200+
public boolean equals(Object o) {
201+
if (!(o instanceof EventStreamTestCase)) {
202+
return false;
203+
}
204+
EventStreamTestCase that = (EventStreamTestCase) o;
205+
return Objects.equals(id, that.id) && Objects.equals(protocol, that.protocol)
206+
&& Objects.equals(initialRequestParams, that.initialRequestParams)
207+
&& Objects.equals(initialRequest, that.initialRequest)
208+
&& Objects.equals(initialRequestShape, that.initialRequestShape)
209+
&& Objects.equals(initialResponseParams, that.initialResponseParams)
210+
&& Objects.equals(initialResponse, that.initialResponse)
211+
&& Objects.equals(initialResponseShape, that.initialResponseShape)
212+
&& Objects.equals(events, that.events)
213+
&& Objects.equals(expectation, that.expectation)
214+
&& Objects.equals(vendorParams, that.vendorParams)
215+
&& Objects.equals(vendorParamsShape, that.vendorParamsShape)
216+
&& Objects.equals(documentation, that.documentation)
217+
&& appliesTo == that.appliesTo;
218+
}
219+
220+
@Override
221+
public int hashCode() {
222+
return Objects.hash(id,
223+
protocol,
224+
initialRequestParams,
225+
initialRequest,
226+
initialRequestShape,
227+
initialResponseParams,
228+
initialResponse,
229+
initialResponseShape,
230+
events,
231+
expectation,
232+
vendorParams,
233+
vendorParamsShape,
234+
documentation,
235+
appliesTo);
236+
}
237+
198238
/**
199239
* Builder used to create {@link EventStreamTestCase}.
200240
*/

smithy-protocol-test-traits/src/main/java/software/amazon/smithy/protocoltests/traits/eventstream/EventStreamTestsTrait.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import java.util.ArrayList;
88
import java.util.List;
9+
import java.util.Objects;
910
import java.util.stream.Collectors;
1011
import software.amazon.smithy.model.SourceLocation;
1112
import software.amazon.smithy.model.node.ArrayNode;
@@ -58,6 +59,20 @@ public List<EventStreamTestCase> getTestCasesFor(AppliesTo appliesTo) {
5859
.collect(Collectors.toList());
5960
}
6061

62+
@Override
63+
public boolean equals(Object o) {
64+
if (!(o instanceof EventStreamTestsTrait)) {
65+
return false;
66+
}
67+
EventStreamTestsTrait that = (EventStreamTestsTrait) o;
68+
return Objects.equals(testCases, that.testCases);
69+
}
70+
71+
@Override
72+
public int hashCode() {
73+
return Objects.hash(super.hashCode(), testCases);
74+
}
75+
6176
@Override
6277
protected Node createNode() {
6378
NodeMapper mapper = new NodeMapper();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
package software.amazon.smithy.protocoltests.traits.eventstream;
6+
7+
import static org.junit.jupiter.api.Assertions.assertEquals;
8+
9+
import org.junit.jupiter.api.Test;
10+
import software.amazon.smithy.model.node.NodeMapper;
11+
12+
public class EventTest {
13+
@Test
14+
public void testReserializeEventWithoutBytes() {
15+
NodeMapper mapper = new NodeMapper();
16+
Event expected = Event.builder()
17+
.type(EventType.REQUEST)
18+
.build();
19+
Event actual = mapper.deserialize(mapper.serialize(expected), Event.class);
20+
assertEquals(expected, actual);
21+
}
22+
}

0 commit comments

Comments
 (0)