This is an automated email from the ASF dual-hosted git repository.

tabish pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-protonj2.git


The following commit(s) were added to refs/heads/main by this push:
     new ef61b414 PROTON-2849 Return correct delivery state enumeration value
ef61b414 is described below

commit ef61b4145e6f7478b328ca9788ff8ec46570ee8b
Author: Timothy Bish <[email protected]>
AuthorDate: Mon Sep 16 10:38:19 2024 -0400

    PROTON-2849 Return correct delivery state enumeration value
    
    The delivery state from the client tracker is returning released instead
    of rejected, test added.
---
 .../protonj2/client/impl/ClientDeliveryState.java  |  6 +-
 .../qpid/protonj2/client/impl/SenderTest.java      | 85 ++++++++++++++++++++++
 2 files changed, 89 insertions(+), 2 deletions(-)

diff --git 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientDeliveryState.java
 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientDeliveryState.java
index 883aff69..8ef7dbd3 100644
--- 
a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientDeliveryState.java
+++ 
b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientDeliveryState.java
@@ -217,7 +217,7 @@ public abstract class ClientDeliveryState implements 
DeliveryState {
 
         @Override
         public Type getType() {
-            return Type.RELEASED;
+            return Type.REJECTED;
         }
 
         @Override
@@ -240,7 +240,9 @@ public abstract class ClientDeliveryState implements 
DeliveryState {
         ClientModified(Modified modified) {
             this.modified.setDeliveryFailed(modified.isDeliveryFailed());
             this.modified.setUndeliverableHere(modified.isUndeliverableHere());
-            this.modified.setMessageAnnotations(new 
LinkedHashMap<>(modified.getMessageAnnotations()));
+            if (modified.getMessageAnnotations() != null) {
+                this.modified.setMessageAnnotations(new 
LinkedHashMap<>(modified.getMessageAnnotations()));
+            }
         }
 
         /**
diff --git 
a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/SenderTest.java
 
b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/SenderTest.java
index a16b360c..4f097bf1 100644
--- 
a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/SenderTest.java
+++ 
b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/SenderTest.java
@@ -2499,6 +2499,91 @@ public class SenderTest extends ImperativeClientTestCase 
{
 
             assertTrue(tracker.remoteSettled());
             assertFalse(tracker.remoteState().isAccepted());
+            
assertTrue(tracker.remoteState().getType().equals(DeliveryState.Type.REJECTED));
+
+            peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
+            peer.expectDetach().respond();
+            peer.expectClose().respond();
+
+            sender.closeAsync().get();
+            connection.closeAsync().get();
+
+            peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
+        }
+    }
+
+    @Test
+    public void testWaitForAcceptanceFailsIfRemoteSendsReleased() throws 
Exception {
+        try (ProtonTestServer peer = new ProtonTestServer()) {
+            peer.expectSASLAnonymousConnect();
+            peer.expectOpen().respond();
+            peer.expectBegin().respond();
+            peer.expectAttach().ofSender().respond();
+            peer.remoteFlow().withLinkCredit(2).queue();
+            
peer.expectTransfer().withNonNullPayload().withMore(false).respond().withSettled(true).withState().released();
+            peer.start();
+
+            URI remoteURI = peer.getServerURI();
+
+            LOG.info("Test started, peer listening on: {}", remoteURI);
+
+            Client container = Client.create();
+            Connection connection = container.connect(remoteURI.getHost(), 
remoteURI.getPort());
+            Sender sender = 
connection.openSender("test-queue").openFuture().get();
+            Tracker tracker = sender.send(Message.create("Hello World"));
+
+            try {
+                tracker.awaitAccepted(10, TimeUnit.SECONDS);
+                fail("Should not succeed since remote sent something other 
than Accepted");
+            } catch (ClientDeliveryStateException dlvEx) {
+                // Expected
+            }
+
+            assertTrue(tracker.remoteSettled());
+            assertFalse(tracker.remoteState().isAccepted());
+            
assertTrue(tracker.remoteState().getType().equals(DeliveryState.Type.RELEASED));
+
+            peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
+            peer.expectDetach().respond();
+            peer.expectClose().respond();
+
+            sender.closeAsync().get();
+            connection.closeAsync().get();
+
+            peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
+        }
+    }
+
+    @Test
+    public void testWaitForAcceptanceFailsIfRemoteSendsModified() throws 
Exception {
+        try (ProtonTestServer peer = new ProtonTestServer()) {
+            peer.expectSASLAnonymousConnect();
+            peer.expectOpen().respond();
+            peer.expectBegin().respond();
+            peer.expectAttach().ofSender().respond();
+            peer.remoteFlow().withLinkCredit(2).queue();
+            
peer.expectTransfer().withNonNullPayload().withMore(false).respond().withSettled(true).withState().modified();
+            peer.start();
+
+            URI remoteURI = peer.getServerURI();
+
+            LOG.info("Test started, peer listening on: {}", remoteURI);
+
+            Client container = Client.create();
+            Connection connection = container.connect(remoteURI.getHost(), 
remoteURI.getPort());
+            Sender sender = 
connection.openSender("test-queue").openFuture().get();
+            Tracker tracker = sender.send(Message.create("Hello World"));
+
+            try {
+                tracker.awaitAccepted(10, TimeUnit.SECONDS);
+                fail("Should not succeed since remote sent something other 
than Accepted");
+            } catch (ClientDeliveryStateException dlvEx) {
+                // Expected
+            }
+
+            assertTrue(tracker.remoteSettled());
+            assertFalse(tracker.remoteState().isAccepted());
+            
assertTrue(tracker.remoteState().getType().equals(DeliveryState.Type.MODIFIED));
 
             peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
             peer.expectDetach().respond();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to