eolivelli commented on a change in pull request #8801:
URL: https://github.com/apache/pulsar/pull/8801#discussion_r535867932



##########
File path: 
pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ReaderTest.java
##########
@@ -397,4 +398,70 @@ public void testKeyHashRangeReader() throws IOException {
         }
 
     }
+
+    @Test
+    public void testReaderSubName() throws Exception {
+        doTestReaderSubName(true);
+        doTestReaderSubName(false);
+    }
+
+    public void doTestReaderSubName(boolean setPrefix) throws Exception {
+        final String topic = 
"persistent://my-property/my-ns/testReaderSubName" + System.currentTimeMillis();
+        final String subName = "my-sub-name";
+
+        ReaderBuilder<String> builder = pulsarClient.newReader(Schema.STRING)
+                .subscriptionName(subName)
+                .topic(topic)
+                .startMessageId(MessageId.earliest);
+        if (setPrefix) {
+            builder = builder.subscriptionRolePrefix(subName + 
System.currentTimeMillis());
+        }
+        Reader<String> reader = builder.create();
+        ReaderImpl<String> readerImpl = (ReaderImpl<String>) reader;
+        assertEquals(readerImpl.getConsumer().getSubscription(), subName);
+        reader.close();
+
+        final String topic2 = 
"persistent://my-property/my-ns/testReaderSubName2" + 
System.currentTimeMillis();
+        admin.topics().createPartitionedTopic(topic2, 3);
+        builder = pulsarClient.newReader(Schema.STRING)
+                .subscriptionName(subName)
+                .topic(topic2)
+                .startMessageId(MessageId.earliest);
+        if (setPrefix) {
+            builder = builder.subscriptionRolePrefix(subName + 
System.currentTimeMillis());
+        }
+        reader = builder.create();
+        MultiTopicsReaderImpl<String> multiTopicsReader = 
(MultiTopicsReaderImpl<String>) reader;
+        multiTopicsReader.getMultiTopicsConsumer().getConsumers()
+                .forEach(consumerImpl -> 
assertEquals(consumerImpl.getSubscription(), subName));
+        multiTopicsReader.close();
+    }
+
+    @Test
+    public void testSameSubName() throws Exception {
+        final String topic = "persistent://my-property/my-ns/testSameSubName";
+        final String subName = "my-sub-name";
+
+        Reader<String> reader = pulsarClient.newReader(Schema.STRING)
+                .subscriptionName(subName)
+                .topic(topic)
+                .startMessageId(MessageId.earliest).create();
+        Reader<String> reader2 = null;
+        try {

Review comment:
       Nit:  try-with-resources

##########
File path: 
pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ReaderTest.java
##########
@@ -397,4 +398,70 @@ public void testKeyHashRangeReader() throws IOException {
         }
 
     }
+
+    @Test
+    public void testReaderSubName() throws Exception {
+        doTestReaderSubName(true);
+        doTestReaderSubName(false);
+    }
+
+    public void doTestReaderSubName(boolean setPrefix) throws Exception {
+        final String topic = 
"persistent://my-property/my-ns/testReaderSubName" + System.currentTimeMillis();
+        final String subName = "my-sub-name";
+
+        ReaderBuilder<String> builder = pulsarClient.newReader(Schema.STRING)
+                .subscriptionName(subName)
+                .topic(topic)
+                .startMessageId(MessageId.earliest);
+        if (setPrefix) {
+            builder = builder.subscriptionRolePrefix(subName + 
System.currentTimeMillis());
+        }
+        Reader<String> reader = builder.create();
+        ReaderImpl<String> readerImpl = (ReaderImpl<String>) reader;
+        assertEquals(readerImpl.getConsumer().getSubscription(), subName);
+        reader.close();
+
+        final String topic2 = 
"persistent://my-property/my-ns/testReaderSubName2" + 
System.currentTimeMillis();
+        admin.topics().createPartitionedTopic(topic2, 3);
+        builder = pulsarClient.newReader(Schema.STRING)
+                .subscriptionName(subName)
+                .topic(topic2)
+                .startMessageId(MessageId.earliest);
+        if (setPrefix) {
+            builder = builder.subscriptionRolePrefix(subName + 
System.currentTimeMillis());
+        }
+        reader = builder.create();
+        MultiTopicsReaderImpl<String> multiTopicsReader = 
(MultiTopicsReaderImpl<String>) reader;
+        multiTopicsReader.getMultiTopicsConsumer().getConsumers()
+                .forEach(consumerImpl -> 
assertEquals(consumerImpl.getSubscription(), subName));
+        multiTopicsReader.close();
+    }
+
+    @Test
+    public void testSameSubName() throws Exception {
+        final String topic = "persistent://my-property/my-ns/testSameSubName";
+        final String subName = "my-sub-name";
+
+        Reader<String> reader = pulsarClient.newReader(Schema.STRING)
+                .subscriptionName(subName)
+                .topic(topic)
+                .startMessageId(MessageId.earliest).create();
+        Reader<String> reader2 = null;
+        try {
+            reader2 = pulsarClient.newReader(Schema.STRING)
+                    .subscriptionName(subName)
+                    .topic(topic)
+                    .startMessageId(MessageId.earliest).create();
+            fail("should fail");
+        } catch (PulsarClientException e) {
+            assertTrue(e instanceof 
PulsarClientException.ConsumerBusyException);
+            assertTrue(e.getMessage().contains("Exclusive consumer is already 
connected"));
+        }
+
+        reader.close();
+        if (reader2 != null) {
+            reader2.close();
+        }
+    }

Review comment:
       Can we assert that after closing the first reader it is possible to 
create a new reader with the same subscription name?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to