QPID-8216: [Broker-J] Restore reporting of pperational log message CHN-1011 about moving message to dead letter queue
diff --git a/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java b/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
index aed7cfe..51cee72 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
@@ -615,7 +615,7 @@
}
});
- int enqueues = result.send(txn, null);
+ int enqueues = result.send(txn, action);
if(autocommit)
{
diff --git a/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java b/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java
index 5f41c45..1bfafea 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/queue/QueueEntryImplTestBase.java
@@ -32,6 +32,7 @@
import static org.mockito.Mockito.when;
import java.lang.reflect.Field;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@@ -45,9 +46,11 @@
import org.apache.qpid.server.message.MessageInstance.UnstealableConsumerAcquiredState;
import org.apache.qpid.server.message.MessageReference;
import org.apache.qpid.server.message.ServerMessage;
+import org.apache.qpid.server.model.AlternateBinding;
import org.apache.qpid.server.model.BrokerTestHelper;
import org.apache.qpid.server.model.Queue;
import org.apache.qpid.server.store.TransactionLogResource;
+import org.apache.qpid.server.util.Action;
import org.apache.qpid.server.util.StateChangeListener;
import org.apache.qpid.server.virtualhost.QueueManagingVirtualHost;
import org.apache.qpid.test.utils.UnitTestBase;
@@ -358,4 +361,28 @@
next = next.getNextValidEntry();
assertNull("The next entry after the last should be null", next);
}
+
+ @Test
+ public void testRouteToAlternateInvokesAction()
+ {
+ String dlqName = "dlq";
+ Map<String, Object> dlqAttributes = new HashMap<>();
+ dlqAttributes.put(Queue.ID, UUID.randomUUID());
+ dlqAttributes.put(Queue.NAME, dlqName);
+ Queue<?> dlq = (Queue<?>) _queueEntry.getQueue().getVirtualHost().createChild(Queue.class, dlqAttributes);
+
+ final AlternateBinding alternateBinding = mock(AlternateBinding.class);
+ when(alternateBinding.getDestination()).thenReturn(dlqName);
+ _queueEntry.getQueue().setAttributes(Collections.singletonMap(Queue.ALTERNATE_BINDING, alternateBinding));
+
+ final Action<? super MessageInstance> action = mock(Action.class);
+ when(_queueEntry.getMessage().isResourceAcceptable(dlq)).thenReturn(true);
+ _queueEntry.acquire();
+ int enqueues = _queueEntry.routeToAlternate(action, null);
+
+ assertEquals("Unexpected number of enqueues", 1, enqueues);
+ verify(action).performAction(any());
+
+ assertEquals("Unexpected number of messages on DLQ", 1, dlq.getQueueDepthMessages());
+ }
}