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]