Skip to content

Commit 0960bd3

Browse files
authored
Merge branch 'main' into iot_metrics
2 parents 0960a13 + a301c3d commit 0960bd3

2 files changed

Lines changed: 106 additions & 1 deletion

File tree

src/native/mqtt5_packets.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1136,7 +1136,7 @@ struct aws_mqtt5_packet_publish_view_java_jni *aws_mqtt5_packet_publish_view_cre
11361136
mqtt5_publish_packet_properties.publish_payload_field_id,
11371137
s_publish_packet_string,
11381138
"payload",
1139-
&java_packet->correlation_data_buf,
1139+
&java_packet->payload_buf,
11401140
&java_packet->payload_cursor,
11411141
true,
11421142
&was_value_set) == AWS_OP_ERR) {

src/test/java/software/amazon/awssdk/crt/test/Mqtt5ClientTest.java

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2240,6 +2240,111 @@ public void Op_DirectPacketBuilders() throws Exception {
22402240
CrtResource.waitForNoResources();
22412241
}
22422242

2243+
/* Full Publish Packet Tests */
2244+
private void doPublishWithFullPacket() {
2245+
try (TlsContextOptions tlsOptions = TlsContextOptions.createWithMtlsFromPath(
2246+
AWS_TEST_MQTT5_IOT_CORE_RSA_CERT, AWS_TEST_MQTT5_IOT_CORE_RSA_KEY);
2247+
TlsContext tlsContext = new TlsContext(tlsOptions)) {
2248+
2249+
String testUUID = UUID.randomUUID().toString();
2250+
String testTopic = "test/MQTT5_Binding_Java_" + testUUID;
2251+
String testResponseTopic = "test/MQTT5_Binding_Java_Response_" + testUUID;
2252+
String testContentType = "application/json";
2253+
byte[] testPayload = "{\"message\": \"Hello World\"}".getBytes();
2254+
byte[] testCorrelationData = "correlation-data-12345".getBytes();
2255+
2256+
Mqtt5ClientOptionsBuilder builder = new Mqtt5ClientOptionsBuilder(AWS_TEST_MQTT5_IOT_CORE_HOST, 8883l);
2257+
LifecycleEvents_Futured events = new LifecycleEvents_Futured();
2258+
builder.withLifecycleEvents(events);
2259+
builder.withTlsContext(tlsContext);
2260+
2261+
PublishEvents_Futured publishEvents = new PublishEvents_Futured();
2262+
builder.withPublishEvents(publishEvents);
2263+
2264+
// Build a publish packet with all available fields populated
2265+
PublishPacketBuilder publishPacketBuilder = new PublishPacketBuilder();
2266+
publishPacketBuilder.withTopic(testTopic);
2267+
publishPacketBuilder.withQOS(QOS.AT_LEAST_ONCE);
2268+
publishPacketBuilder.withPayload(testPayload);
2269+
publishPacketBuilder.withRetain(false);
2270+
publishPacketBuilder.withPayloadFormat(PublishPacket.PayloadFormatIndicator.UTF8);
2271+
publishPacketBuilder.withMessageExpiryIntervalSeconds(60L);
2272+
publishPacketBuilder.withResponseTopic(testResponseTopic);
2273+
publishPacketBuilder.withCorrelationData(testCorrelationData);
2274+
publishPacketBuilder.withContentType(testContentType);
2275+
2276+
ArrayList<UserProperty> userProperties = new ArrayList<UserProperty>();
2277+
userProperties.add(new UserProperty("test-name-1", "test-value-1"));
2278+
userProperties.add(new UserProperty("test-name-2", "test-value-2"));
2279+
publishPacketBuilder.withUserProperties(userProperties);
2280+
2281+
SubscribePacketBuilder subscribePacketBuilder = new SubscribePacketBuilder(testTopic, QOS.AT_LEAST_ONCE);
2282+
2283+
try (Mqtt5Client client = new Mqtt5Client(builder.build())) {
2284+
client.start();
2285+
events.connectedFuture.get(OPERATION_TIMEOUT_TIME, TimeUnit.SECONDS);
2286+
2287+
// Subscribe to the topic first
2288+
client.subscribe(subscribePacketBuilder.build()).get(OPERATION_TIMEOUT_TIME, TimeUnit.SECONDS);
2289+
2290+
// Publish the message with all fields
2291+
client.publish(publishPacketBuilder.build()).get(OPERATION_TIMEOUT_TIME, TimeUnit.SECONDS);
2292+
2293+
// Wait for the publish to be received
2294+
publishEvents.publishReceivedFuture.get(OPERATION_TIMEOUT_TIME, TimeUnit.SECONDS);
2295+
2296+
// Verify the received publish packet has the expected fields
2297+
PublishPacket receivedPacket = publishEvents.publishPacket;
2298+
assertNotNull("Received publish packet should not be null", receivedPacket);
2299+
2300+
// Verify topic
2301+
assertEquals("Topic should match", testTopic, receivedPacket.getTopic());
2302+
2303+
// Verify QoS
2304+
assertEquals("QoS should match", QOS.AT_LEAST_ONCE, receivedPacket.getQOS());
2305+
2306+
// Verify payload
2307+
assertTrue("Payload should match", java.util.Arrays.equals(testPayload, receivedPacket.getPayload()));
2308+
2309+
// Verify payload format indicator
2310+
assertEquals("Payload format should match",
2311+
PublishPacket.PayloadFormatIndicator.UTF8, receivedPacket.getPayloadFormat());
2312+
2313+
// Verify response topic
2314+
assertEquals("Response topic should match", testResponseTopic, receivedPacket.getResponseTopic());
2315+
2316+
// Verify correlation data
2317+
assertTrue("Correlation data should match",
2318+
java.util.Arrays.equals(testCorrelationData, receivedPacket.getCorrelationData()));
2319+
2320+
// Verify content type
2321+
assertEquals("Content type should match", testContentType, receivedPacket.getContentType());
2322+
2323+
// Verify user properties
2324+
assertNotNull("User properties should not be null", receivedPacket.getUserProperties());
2325+
assertEquals("User properties count should match", 2, receivedPacket.getUserProperties().size());
2326+
2327+
client.stop();
2328+
events.stopFuture.get(OPERATION_TIMEOUT_TIME, TimeUnit.SECONDS);
2329+
}
2330+
} catch (Exception ex) {
2331+
throw new RuntimeException(ex);
2332+
}
2333+
}
2334+
2335+
/* Publish with full packet - all fields populated */
2336+
@Test
2337+
public void Op_PublishWithFullPacket() throws Exception {
2338+
skipIfNetworkUnavailable();
2339+
Assume.assumeNotNull(AWS_TEST_MQTT5_IOT_CORE_HOST, AWS_TEST_MQTT5_IOT_CORE_RSA_CERT,
2340+
AWS_TEST_MQTT5_IOT_CORE_RSA_KEY);
2341+
2342+
TestUtils.doRetryableTest(this::doPublishWithFullPacket, TestUtils::isRetryableTimeout, MAX_TEST_RETRIES,
2343+
TEST_RETRY_SLEEP_MILLIS);
2344+
2345+
CrtResource.waitForNoResources();
2346+
}
2347+
22432348
/**
22442349
* ============================================================
22452350
* Error Operation Tests

0 commit comments

Comments
 (0)