This is an automated email from the ASF dual-hosted git repository.
vavrtom pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git
The following commit(s) were added to refs/heads/main by this push:
new f2381ec3f2 QPID-8665: [Broker-J] Changing queue exclusive mode throws
exception (#233)
f2381ec3f2 is described below
commit f2381ec3f216422d5e5478ff125b9a3664a53ba0
Author: Daniil Kirilyuk <[email protected]>
AuthorDate: Mon Jan 29 12:55:56 2024 +0100
QPID-8665: [Broker-J] Changing queue exclusive mode throws exception (#233)
---
.../apache/qpid/server/queue/AbstractQueue.java | 18 ++++++------
.../qpid/server/consumer/TestConsumerTarget.java | 13 ++++++++-
.../qpid/server/queue/AbstractQueueTestBase.java | 32 ++++++++++++++++++++++
3 files changed, 54 insertions(+), 9 deletions(-)
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
b/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
index 9a453d329b..709a3c65f1 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
@@ -766,15 +766,17 @@ public abstract class AbstractQueue<X extends
AbstractQueue<X>>
@Override
public String getOwner()
{
- if(_exclusiveOwner != null)
+ if (_exclusiveOwner instanceof String)
{
- switch(_exclusive)
- {
- case CONTAINER:
- return (String) _exclusiveOwner;
- case PRINCIPAL:
- return ((Principal)_exclusiveOwner).getName();
- }
+ return (String) _exclusiveOwner;
+ }
+ else if (_exclusiveOwner instanceof ConfiguredObject)
+ {
+ return ((ConfiguredObject<?>) _exclusiveOwner).getName();
+ }
+ else if (_exclusiveOwner instanceof Principal)
+ {
+ return ((Principal) _exclusiveOwner).getName();
}
return null;
}
diff --git
a/broker-core/src/test/java/org/apache/qpid/server/consumer/TestConsumerTarget.java
b/broker-core/src/test/java/org/apache/qpid/server/consumer/TestConsumerTarget.java
index 5796120ac8..421ef3962b 100644
---
a/broker-core/src/test/java/org/apache/qpid/server/consumer/TestConsumerTarget.java
+++
b/broker-core/src/test/java/org/apache/qpid/server/consumer/TestConsumerTarget.java
@@ -24,6 +24,7 @@ package org.apache.qpid.server.consumer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import java.security.Principal;
import java.util.ArrayList;
import com.google.common.util.concurrent.Futures;
@@ -52,8 +53,18 @@ public class TestConsumerTarget implements
ConsumerTarget<TestConsumerTarget>
public TestConsumerTarget()
{
+ when(_sessionModel.getName()).thenReturn("mock session");
+
+ final Principal principal = mock(Principal.class);
+ when(principal.getName()).thenReturn("mock principal");
+
+ final AMQPConnection amqpConnection = mock(AMQPConnection.class);
+ when(amqpConnection.getAuthorizedPrincipal()).thenReturn(principal);
+ when(amqpConnection.getName()).thenReturn("mock connection");
+ when(amqpConnection.getRemoteContainerName()).thenReturn("mock
container");
+
when(_sessionModel.getChannelId()).thenReturn(0);
-
when(_sessionModel.getAMQPConnection()).thenReturn(mock(AMQPConnection.class));
+ when(_sessionModel.getAMQPConnection()).thenReturn(amqpConnection);
}
@Override
diff --git
a/broker-core/src/test/java/org/apache/qpid/server/queue/AbstractQueueTestBase.java
b/broker-core/src/test/java/org/apache/qpid/server/queue/AbstractQueueTestBase.java
index 622b7739e3..9cb091a109 100644
---
a/broker-core/src/test/java/org/apache/qpid/server/queue/AbstractQueueTestBase.java
+++
b/broker-core/src/test/java/org/apache/qpid/server/queue/AbstractQueueTestBase.java
@@ -78,6 +78,7 @@ import org.apache.qpid.server.model.AlternateBinding;
import org.apache.qpid.server.model.Binding;
import org.apache.qpid.server.model.BrokerTestHelper;
import org.apache.qpid.server.model.Exchange;
+import org.apache.qpid.server.model.ExclusivityPolicy;
import org.apache.qpid.server.model.OverflowPolicy;
import org.apache.qpid.server.model.Queue;
import org.apache.qpid.server.model.QueueNotificationListener;
@@ -557,6 +558,37 @@ abstract class AbstractQueueTestBase extends UnitTestBase
"releasedEntry should be cleared after requeue processed");
}
+ @Test
+ public void testExclusivePolicy() throws Exception
+ {
+ final ServerMessage<?> messageA = createMessage(24L);
+ _consumer = (QueueConsumer<?,?>) _queue.addConsumer(_consumerTarget,
null, messageA.getClass(), "test",
+ EnumSet.of(ConsumerOption.EXCLUSIVE, ConsumerOption.ACQUIRES,
ConsumerOption.SEES_REQUEUES), 0);
+
+ _queue.setAttributes(Map.of(Queue.EXCLUSIVE,
ExclusivityPolicy.CONNECTION));
+ assertEquals("mock connection", _queue.getOwner());
+
+ _queue.setAttributes(Map.of(Queue.EXCLUSIVE,
ExclusivityPolicy.SESSION));
+ assertEquals("mock session", _queue.getOwner());
+
+ _queue.setAttributes(Map.of(Queue.EXCLUSIVE,
ExclusivityPolicy.PRINCIPAL));
+ assertEquals("mock principal", _queue.getOwner());
+
+ _queue.setAttributes(Map.of(Queue.EXCLUSIVE,
ExclusivityPolicy.CONTAINER));
+ assertEquals("mock container", _queue.getOwner());
+
+ _queue.setAttributes(Map.of(Queue.EXCLUSIVE, ExclusivityPolicy.LINK));
+ assertNull(_queue.getOwner());
+
+ _queue.setAttributes(Map.of(Queue.EXCLUSIVE,
ExclusivityPolicy.SHARED_SUBSCRIPTION));
+ assertNull(_queue.getOwner());
+
+ _queue.setAttributes(Map.of(Queue.EXCLUSIVE, ExclusivityPolicy.NONE));
+ assertNull(_queue.getOwner());
+
+ _consumer.close();
+ }
+
@Test
public void testExclusiveConsumer() throws Exception
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]