@@ -2801,7 +2801,7 @@ public void ManualPuback_Invoke() throws Exception {
28012801 CrtResource .waitForNoResources ();
28022802 }
28032803
2804- private void doManualPublishAcknowledgement_AcquireDoubleCallRaisesTest () {
2804+ private void doManualPublishAcknowledgement_AcquireDoubleCallReturnsNullTest () {
28052805 try (TlsContextOptions tlsOptions = TlsContextOptions .createWithMtlsFromPath (
28062806 AWS_TEST_MQTT5_IOT_CORE_RSA_CERT , AWS_TEST_MQTT5_IOT_CORE_RSA_KEY );
28072807 TlsContext tlsContext = new TlsContext (tlsOptions )) {
@@ -2820,22 +2820,20 @@ private void doManualPublishAcknowledgement_AcquireDoubleCallRaisesTest() {
28202820 builder .withPublishEvents (new Mqtt5ClientOptions .PublishEvents () {
28212821 @ Override
28222822 public void onMessageReceived (Mqtt5Client client , PublishReturn publishReturn ) {
2823- try {
2824- // First call should succeed
2825- Mqtt5PublishAcknowledgementControlHandle handle = publishReturn .acquirePublishAcknowledgementControl ();
2826- // Second call on the same message should throw IllegalStateException
2827- try {
2828- publishReturn .acquirePublishAcknowledgementControl ();
2829- resultFuture .complete ("no_error" ); // Should not reach here
2830- } catch (IllegalStateException ex ) {
2831- resultFuture .complete ("double_call_raised" );
2832- } catch (Exception ex ) {
2833- resultFuture .complete ("unexpected_error: " + ex .getMessage ());
2834- }
2835- // handle is valid but we don't invoke it here; let it be GC'd
2836- } catch (Exception ex ) {
2837- resultFuture .complete ("first_call_failed: " + ex .getMessage ());
2823+ // First call should succeed and return a non-null handle
2824+ Mqtt5PublishAcknowledgementControlHandle handle = publishReturn .acquirePublishAcknowledgementControl ();
2825+ if (handle == null ) {
2826+ resultFuture .complete ("first_call_returned_null" );
2827+ return ;
2828+ }
2829+ // Second call on the same message should return null (controlId was zeroed out)
2830+ Mqtt5PublishAcknowledgementControlHandle handle2 = publishReturn .acquirePublishAcknowledgementControl ();
2831+ if (handle2 == null ) {
2832+ resultFuture .complete ("double_call_returned_null" );
2833+ } else {
2834+ resultFuture .complete ("double_call_returned_non_null" );
28382835 }
2836+ // handle is valid but we don't invoke it here; let it be GC'd
28392837 }
28402838 });
28412839
@@ -2850,8 +2848,8 @@ public void onMessageReceived(Mqtt5Client client, PublishReturn publishReturn) {
28502848 client .publish (publishBuilder .build ()).get (OPERATION_TIMEOUT_TIME , TimeUnit .SECONDS );
28512849
28522850 String result = resultFuture .get (OPERATION_TIMEOUT_TIME , TimeUnit .SECONDS );
2853- assertEquals ("Expected IllegalStateException on double-call, got: " + result ,
2854- "double_call_raised " , result );
2851+ assertEquals ("Expected null on double-call, got: " + result ,
2852+ "double_call_returned_null " , result );
28552853
28562854 client .stop ();
28572855 events .stopFuture .get (OPERATION_TIMEOUT_TIME , TimeUnit .SECONDS );
@@ -2861,13 +2859,13 @@ public void onMessageReceived(Mqtt5Client client, PublishReturn publishReturn) {
28612859 }
28622860 }
28632861
2864- /* Manual publish acknowledgement double-call test: calling acquirePublishAcknowledgementControl() twice raises IllegalStateException */
2862+ /* Manual publish acknowledgement double-call test: calling acquirePublishAcknowledgementControl() twice returns null on the second call */
28652863 @ Test
28662864 public void ManualPuback_AcquireDoubleCallRaises () throws Exception {
28672865 skipIfNetworkUnavailable ();
28682866 Assume .assumeNotNull (AWS_TEST_MQTT5_IOT_CORE_HOST , AWS_TEST_MQTT5_IOT_CORE_RSA_CERT , AWS_TEST_MQTT5_IOT_CORE_RSA_KEY );
28692867
2870- TestUtils .doRetryableTest (this ::doManualPublishAcknowledgement_AcquireDoubleCallRaisesTest , TestUtils ::isRetryableTimeout , MAX_TEST_RETRIES , TEST_RETRY_SLEEP_MILLIS );
2868+ TestUtils .doRetryableTest (this ::doManualPublishAcknowledgement_AcquireDoubleCallReturnsNullTest , TestUtils ::isRetryableTimeout , MAX_TEST_RETRIES , TEST_RETRY_SLEEP_MILLIS );
28712869
28722870 CrtResource .waitForNoResources ();
28732871 }
0 commit comments