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]

Reply via email to