Skip to content

Commit 372c523

Browse files
committed
other throws tests need to be changed to returns null
1 parent 507c2f2 commit 372c523

1 file changed

Lines changed: 26 additions & 32 deletions

File tree

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

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.junit.Assume;
44
import org.junit.Test;
55
import static org.junit.Assert.assertNotNull;
6+
import static org.junit.Assert.assertNull;
67
import static org.junit.Assert.assertTrue;
78
import static org.junit.Assert.assertEquals;
89
import static org.junit.Assert.fail;
@@ -2870,7 +2871,7 @@ public void ManualPuback_AcquireDoubleCallRaises() throws Exception {
28702871
CrtResource.waitForNoResources();
28712872
}
28722873

2873-
private void doManualPublishAcknowledgement_AcquirePostCallbackRaisesTest() {
2874+
private void doManualPublishAcknowledgement_AcquirePostCallbackReturnsNullTest() {
28742875
try (TlsContextOptions tlsOptions = TlsContextOptions.createWithMtlsFromPath(
28752876
AWS_TEST_MQTT5_IOT_CORE_RSA_CERT, AWS_TEST_MQTT5_IOT_CORE_RSA_KEY);
28762877
TlsContext tlsContext = new TlsContext(tlsOptions)) {
@@ -2890,7 +2891,8 @@ private void doManualPublishAcknowledgement_AcquirePostCallbackRaisesTest() {
28902891
builder.withPublishEvents(new Mqtt5ClientOptions.PublishEvents() {
28912892
@Override
28922893
public void onMessageReceived(Mqtt5Client client, PublishReturn publishReturn) {
2893-
// Save the PublishReturn but do NOT call acquirePublishAcknowledgementControl() within the callback
2894+
// Save the PublishReturn but do NOT call acquirePublishAcknowledgementControl() within the callback.
2895+
// Native code will call it after the callback returns (auto-invoking the PUBACK), zeroing controlId.
28942896
savedPublishReturnHolder[0] = publishReturn;
28952897
callbackDoneFuture.complete(null);
28962898
}
@@ -2909,16 +2911,13 @@ public void onMessageReceived(Mqtt5Client client, PublishReturn publishReturn) {
29092911
// Wait for the callback to complete
29102912
callbackDoneFuture.get(OPERATION_TIMEOUT_TIME, TimeUnit.SECONDS);
29112913

2912-
// Call acquirePublishAcknowledgementControl() after the callback has returned, this should throw IllegalStateException
2914+
// Call acquirePublishAcknowledgementControl() after the callback has returned.
2915+
// Native code already called it (zeroing controlId), so this returns null due to wrong thread or controlID being zero.
29132916
assertNotNull("savedPublishReturn should have been set", savedPublishReturnHolder[0]);
2914-
boolean exceptionThrown = false;
2915-
try {
2916-
savedPublishReturnHolder[0].acquirePublishAcknowledgementControl();
2917-
} catch (IllegalStateException ex) {
2918-
exceptionThrown = true;
2919-
}
2920-
assertTrue("acquirePublishAcknowledgementControl() should throw IllegalStateException after callback returns",
2921-
exceptionThrown);
2917+
Mqtt5PublishAcknowledgementControlHandle handle =
2918+
savedPublishReturnHolder[0].acquirePublishAcknowledgementControl();
2919+
assertNull("acquirePublishAcknowledgementControl() should return null after callback returns",
2920+
handle);
29222921

29232922
client.stop();
29242923
events.stopFuture.get(OPERATION_TIMEOUT_TIME, TimeUnit.SECONDS);
@@ -2928,18 +2927,18 @@ public void onMessageReceived(Mqtt5Client client, PublishReturn publishReturn) {
29282927
}
29292928
}
29302929

2931-
/* Manual publish acknowledgement post-callback test: calling acquirePublishAcknowledgementControl() after callback returns raises IllegalStateException */
2930+
/* Manual publish acknowledgement post-callback test: calling acquirePublishAcknowledgementControl() after callback returns returns null */
29322931
@Test
2933-
public void ManualPuback_AcquirePostCallbackRaises() throws Exception {
2932+
public void ManualPuback_AcquirePostCallbackReturnsNull() throws Exception {
29342933
skipIfNetworkUnavailable();
29352934
Assume.assumeNotNull(AWS_TEST_MQTT5_IOT_CORE_HOST, AWS_TEST_MQTT5_IOT_CORE_RSA_CERT, AWS_TEST_MQTT5_IOT_CORE_RSA_KEY);
29362935

2937-
TestUtils.doRetryableTest(this::doManualPublishAcknowledgement_AcquirePostCallbackRaisesTest, TestUtils::isRetryableTimeout, MAX_TEST_RETRIES, TEST_RETRY_SLEEP_MILLIS);
2936+
TestUtils.doRetryableTest(this::doManualPublishAcknowledgement_AcquirePostCallbackReturnsNullTest, TestUtils::isRetryableTimeout, MAX_TEST_RETRIES, TEST_RETRY_SLEEP_MILLIS);
29382937

29392938
CrtResource.waitForNoResources();
29402939
}
29412940

2942-
private void doManualPuback_Qos0AcquireThrowsTest() {
2941+
private void doManualPuback_Qos0AcquireReturnsNullTest() {
29432942
try (TlsContextOptions tlsOptions = TlsContextOptions.createWithMtlsFromPath(
29442943
AWS_TEST_MQTT5_IOT_CORE_RSA_CERT, AWS_TEST_MQTT5_IOT_CORE_RSA_KEY);
29452944
TlsContext tlsContext = new TlsContext(tlsOptions)) {
@@ -2948,7 +2947,7 @@ private void doManualPuback_Qos0AcquireThrowsTest() {
29482947
String testTopic = "test/MQTT5_Binding_Java_" + testUUID;
29492948
byte[] payload = testUUID.getBytes();
29502949

2951-
CompletableFuture<String> resultFuture = new CompletableFuture<>();
2950+
CompletableFuture<Mqtt5PublishAcknowledgementControlHandle> resultFuture = new CompletableFuture<>();
29522951

29532952
Mqtt5ClientOptionsBuilder builder = new Mqtt5ClientOptionsBuilder(AWS_TEST_MQTT5_IOT_CORE_HOST, 8883l);
29542953
LifecycleEvents_Futured events = new LifecycleEvents_Futured();
@@ -2958,16 +2957,10 @@ private void doManualPuback_Qos0AcquireThrowsTest() {
29582957
builder.withPublishEvents(new Mqtt5ClientOptions.PublishEvents() {
29592958
@Override
29602959
public void onMessageReceived(Mqtt5Client client, PublishReturn publishReturn) {
2961-
// For QoS 0, acquirePublishAcknowledgementControl() should throw IllegalStateException
2962-
// because the native layer passes a null context pointer for QoS 0 publishes.
2963-
try {
2964-
publishReturn.acquirePublishAcknowledgementControl();
2965-
resultFuture.complete("no_error"); // Should not reach here
2966-
} catch (IllegalStateException ex) {
2967-
resultFuture.complete("threw_illegal_state");
2968-
} catch (Exception ex) {
2969-
resultFuture.complete("unexpected_error: " + ex.getMessage());
2970-
}
2960+
// For QoS 0, controlId is 0, so acquirePublishAcknowledgementControl() returns null.
2961+
Mqtt5PublishAcknowledgementControlHandle handle =
2962+
publishReturn.acquirePublishAcknowledgementControl();
2963+
resultFuture.complete(handle);
29712964
}
29722965
});
29732966

@@ -2983,9 +2976,10 @@ public void onMessageReceived(Mqtt5Client client, PublishReturn publishReturn) {
29832976
PublishPacketBuilder publishBuilder = new PublishPacketBuilder(testTopic, QOS.AT_MOST_ONCE, payload);
29842977
client.publish(publishBuilder.build()).get(OPERATION_TIMEOUT_TIME, TimeUnit.SECONDS);
29852978

2986-
String result = resultFuture.get(OPERATION_TIMEOUT_TIME, TimeUnit.SECONDS);
2987-
assertEquals("acquirePublishAcknowledgementControl() should throw IllegalStateException for QoS 0 messages, got: " + result,
2988-
"threw_illegal_state", result);
2979+
Mqtt5PublishAcknowledgementControlHandle handle =
2980+
resultFuture.get(OPERATION_TIMEOUT_TIME, TimeUnit.SECONDS);
2981+
assertNull("acquirePublishAcknowledgementControl() should return null for QoS 0 messages",
2982+
handle);
29892983

29902984
client.stop();
29912985
events.stopFuture.get(OPERATION_TIMEOUT_TIME, TimeUnit.SECONDS);
@@ -2995,13 +2989,13 @@ public void onMessageReceived(Mqtt5Client client, PublishReturn publishReturn) {
29952989
}
29962990
}
29972991

2998-
/* Manual publish acknowledgement QoS 0 test: acquirePublishAcknowledgementControl() throws IllegalStateException for QoS 0 messages */
2992+
/* Manual publish acknowledgement QoS 0 test: acquirePublishAcknowledgementControl() returns null for QoS 0 messages */
29992993
@Test
3000-
public void ManualPuback_Qos0AcquireThrows() throws Exception {
2994+
public void ManualPuback_Qos0AcquireReturnsNull() throws Exception {
30012995
skipIfNetworkUnavailable();
30022996
Assume.assumeNotNull(AWS_TEST_MQTT5_IOT_CORE_HOST, AWS_TEST_MQTT5_IOT_CORE_RSA_CERT, AWS_TEST_MQTT5_IOT_CORE_RSA_KEY);
30032997

3004-
TestUtils.doRetryableTest(this::doManualPuback_Qos0AcquireThrowsTest, TestUtils::isRetryableTimeout, MAX_TEST_RETRIES, TEST_RETRY_SLEEP_MILLIS);
2998+
TestUtils.doRetryableTest(this::doManualPuback_Qos0AcquireReturnsNullTest, TestUtils::isRetryableTimeout, MAX_TEST_RETRIES, TEST_RETRY_SLEEP_MILLIS);
30052999

30063000
CrtResource.waitForNoResources();
30073001
}

0 commit comments

Comments
 (0)