@@ -886,6 +886,7 @@ public void ackBatchMessageTest() throws Exception {
886886
887887 WebSocketClient consumerClient = new WebSocketClient ();
888888 SimpleConsumerSocket consumeSocket = new SimpleConsumerSocket ();
889+ @ Cleanup
889890 Producer <byte []> producer = pulsarClient .newProducer ()
890891 .topic (topic )
891892 .batchingMaxPublishDelay (1 , TimeUnit .SECONDS )
@@ -933,6 +934,7 @@ public void consumeEncryptedMessages() throws Exception {
933934 final String rsaPublicKeyData = "data:application/x-pem-file;base64,LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF0S1d3Z3FkblRZck9DditqMU1rVApXZlNIMHdDc0haWmNhOXdBVzNxUDR1dWhsQnZuYjEwSmNGZjVaanpQOUJTWEsrdEhtSTh1b04zNjh2RXY2eWhVClJITTR5dVhxekN4enVBd2tRU28zOXJ6WDhQR0M3cWRqQ043TERKM01ucWlCSXJVc1NhRVAxd3JOc0Ixa0krbzkKRVIxZTVPL3VFUEFvdFA5MzNoSFEwSjJoTUVla0hxTDdzQmxKOThoNk5tc2ljRWFVa2FyZGswVE9YcmxrakMrYwpNZDhaYkdTY1BxSTlNMzhibW4zT0x4RlRuMXZ0aHB2blhMdkNtRzRNKzZ4dFl0RCtucGNWUFp3MWkxUjkwZk1zCjdwcFpuUmJ2OEhjL0RGZE9LVlFJZ2FtNkNEZG5OS2dXN2M3SUJNclAwQUVtMzdIVHUwTFNPalAyT0hYbHZ2bFEKR1FJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==" ;
934935 final String rsaPrivateKeyData = "data:application/x-pem-file;base64,LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBdEtXd2dxZG5UWXJPQ3YrajFNa1RXZlNIMHdDc0haWmNhOXdBVzNxUDR1dWhsQnZuCmIxMEpjRmY1Wmp6UDlCU1hLK3RIbUk4dW9OMzY4dkV2NnloVVJITTR5dVhxekN4enVBd2tRU28zOXJ6WDhQR0MKN3FkakNON0xESjNNbnFpQklyVXNTYUVQMXdyTnNCMWtJK285RVIxZTVPL3VFUEFvdFA5MzNoSFEwSjJoTUVlawpIcUw3c0JsSjk4aDZObXNpY0VhVWthcmRrMFRPWHJsa2pDK2NNZDhaYkdTY1BxSTlNMzhibW4zT0x4RlRuMXZ0Cmhwdm5YTHZDbUc0TSs2eHRZdEQrbnBjVlBadzFpMVI5MGZNczdwcFpuUmJ2OEhjL0RGZE9LVlFJZ2FtNkNEZG4KTktnVzdjN0lCTXJQMEFFbTM3SFR1MExTT2pQMk9IWGx2dmxRR1FJREFRQUJBb0lCQUFhSkZBaTJDN3UzY05yZgpBc3RZOXZWRExvTEl2SEZabGtCa3RqS1pEWW1WSXNSYitoU0NWaXdWVXJXTEw2N1I2K0l2NGVnNERlVE9BeDAwCjhwbmNYS2daVHcyd0liMS9RalIvWS9SamxhQzhsa2RtUldsaTd1ZE1RQ1pWc3lodVNqVzZQajd2cjhZRTR3b2oKRmhOaWp4RUdjZjl3V3JtTUpyemRuVFdRaVhCeW8rZVR2VVE5QlBnUEdyUmpzTVptVGtMeUFWSmZmMkRmeE81YgpJV0ZEWURKY3lZQU1DSU1RdTd2eXMvSTUwb3U2aWxiMUNPNlFNNlo3S3BQZU9vVkZQd3R6Ymg4Y2Y5eE04VU5TCmo2Si9KbWRXaGdJMzRHUzNOQTY4eFRRNlBWN3pqbmhDYytpY2NtM0pLeXpHWHdhQXBBWitFb2NlLzlqNFdLbXUKNUI0emlSMENnWUVBM2wvOU9IYmwxem15VityUnhXT0lqL2kyclR2SHp3Qm5iblBKeXVlbUw1Vk1GZHBHb2RRMwp2d0h2eVFtY0VDUlZSeG1Yb2pRNFF1UFBIczNxcDZ3RUVGUENXeENoTFNUeGxVYzg1U09GSFdVMk85OWpWN3pJCjcrSk9wREsvTXN0c3g5bkhnWGR1SkYrZ2xURnRBM0xIOE9xeWx6dTJhRlBzcHJ3S3VaZjk0UThDZ1lFQXovWngKYWtFRytQRU10UDVZUzI4Y1g1WGZqc0lYL1YyNkZzNi9zSDE2UWpVSUVkZEU1VDRmQ3Vva3hDalNpd1VjV2htbApwSEVKNVM1eHAzVllSZklTVzNqUlczcXN0SUgxdHBaaXBCNitTMHpUdUptTEpiQTNJaVdFZzJydE10N1gxdUp2CkEvYllPcWUwaE9QVHVYdVpkdFZaMG5NVEtrN0dHOE82VmtCSTdGY0NnWUVBa0RmQ21zY0pnczdKYWhsQldIbVgKekg5cHdlbStTUEtqSWMvNE5CNk4rZGdpa3gyUHAwNWhwUC9WaWhVd1lJdWZ2cy9MTm9nVllOUXJ0SGVwVW5yTgoyK1RtYkhiWmdOU3YxTGR4dDgyVWZCN3kwRnV0S3U2bGhtWEh5TmVjaG8zRmk4c2loMFYwYWlTV21ZdUhmckFICkdhaXNrRVpLbzFpaVp2UVhKSXg5TzJNQ2dZQVRCZjByOWhUWU10eXh0YzZIMy9zZGQwMUM5dGhROGdEeTB5alAKMFRxYzBkTVNKcm9EcW1JV2tvS1lldzkvYmhGQTRMVzVUQ25Xa0NBUGJIbU50RzRmZGZiWXdta0gvaGRuQTJ5MApqS2RscGZwOEdYZVVGQUdIR3gxN0ZBM3NxRnZnS1VoMGVXRWdSSFVMN3ZkUU1WRkJnSlM5M283elFNOTRmTGdQCjZjT0I4d0tCZ0ZjR1Y0R2pJMld3OWNpbGxhQzU1NE12b1NqZjhCLyswNGtYekRPaDhpWUlJek85RVVpbDFqaksKSnZ4cDRobkx6VEtXYnV4M01FV3F1ckxrWWFzNkdwS0JqdytpTk9DYXI2WWRxV0dWcU0zUlV4N1BUVWFad2tLeApVZFA2M0lmWTdpWkNJVC9RYnlIUXZJVWUyTWFpVm5IK3VseGRrSzZZNWU3Z3hjYmNrSUg0Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==" ;
935936
937+ @ Cleanup
936938 Producer <byte []> producer = pulsarClient .newProducer ()
937939 .topic (topic )
938940 .enableBatching (false )
@@ -1051,5 +1053,71 @@ private void stopWebSocketClient(WebSocketClient... clients) {
10511053 log .info ("proxy clients are stopped successfully" );
10521054 }
10531055
1056+ @ Test
1057+ public void testMultiTopics () throws Exception {
1058+ final String subscription1 = "my-sub1" ;
1059+ final String subscription2 = "my-sub2" ;
1060+ final String topic1 = "my-property/my-ns/testMultiTopics" + UUID .randomUUID ();
1061+ final String topic2 = "my-property/my-ns/testMultiTopics" + UUID .randomUUID ();
1062+ final String consumerUri1 = "ws://localhost:" + proxyServer .getListenPortHTTP ().get () +
1063+ "/ws/v3/consumer/" + subscription1 + "?topics=" + topic1 + "," + topic2 ;
1064+
1065+ final String consumerUri2 = "ws://localhost:" + proxyServer .getListenPortHTTP ().get () +
1066+ "/ws/v3/consumer/" + subscription2 + "?topicsPattern=my-property/my-ns/testMultiTopics.*" ;
1067+
1068+ int messages = 10 ;
1069+ WebSocketClient consumerClient1 = new WebSocketClient ();
1070+ WebSocketClient consumerClient2 = new WebSocketClient ();
1071+ SimpleConsumerSocket consumeSocket1 = new SimpleConsumerSocket ();
1072+ SimpleConsumerSocket consumeSocket2 = new SimpleConsumerSocket ();
1073+ @ Cleanup
1074+ Producer <byte []> producer1 = pulsarClient .newProducer ()
1075+ .topic (topic1 )
1076+ .batchingMaxMessages (1 )
1077+ .create ();
1078+ @ Cleanup
1079+ Producer <byte []> producer2 = pulsarClient .newProducer ()
1080+ .topic (topic2 )
1081+ .batchingMaxMessages (1 )
1082+ .create ();
1083+
1084+ try {
1085+ consumerClient1 .start ();
1086+ consumerClient2 .start ();
1087+ ClientUpgradeRequest consumerRequest1 = new ClientUpgradeRequest ();
1088+ ClientUpgradeRequest consumerRequest2 = new ClientUpgradeRequest ();
1089+ Future <Session > consumerFuture1 = consumerClient1 .connect (consumeSocket1 , URI .create (consumerUri1 ), consumerRequest1 );
1090+ Future <Session > consumerFuture2 = consumerClient2 .connect (consumeSocket2 , URI .create (consumerUri2 ), consumerRequest2 );
1091+
1092+ assertTrue (consumerFuture1 .get ().isOpen ());
1093+ assertTrue (consumerFuture2 .get ().isOpen ());
1094+ assertEquals (consumeSocket1 .getReceivedMessagesCount (), 0 );
1095+ assertEquals (consumeSocket2 .getReceivedMessagesCount (), 0 );
1096+
1097+ for (int i = 1 ; i <= messages ; i ++) {
1098+ producer1 .sendAsync (String .valueOf (i ).getBytes (StandardCharsets .UTF_8 ));
1099+ producer2 .sendAsync (String .valueOf (i ).getBytes (StandardCharsets .UTF_8 ));
1100+ }
1101+ producer1 .flush ();
1102+ producer2 .flush ();
1103+
1104+ consumeSocket1 .sendPermits (2 * messages );
1105+ Awaitility .await ().untilAsserted (() ->
1106+ assertEquals (consumeSocket1 .getReceivedMessagesCount (), 2 * messages ));
1107+ Awaitility .await ().untilAsserted (() ->
1108+ assertEquals (admin .topics ().getStats (topic1 ).getSubscriptions ()
1109+ .get (subscription1 ).getMsgBacklog (), 0 ));
1110+ Awaitility .await ().untilAsserted (() ->
1111+ assertEquals (admin .topics ().getStats (topic2 ).getSubscriptions ()
1112+ .get (subscription1 ).getMsgBacklog (), 0 ));
1113+
1114+ consumeSocket2 .sendPermits (2 * messages );
1115+ Awaitility .await ().untilAsserted (() ->
1116+ assertEquals (consumeSocket2 .getReceivedMessagesCount (), 2 * messages ));
1117+ } finally {
1118+ stopWebSocketClient (consumerClient1 , consumerClient2 );
1119+ }
1120+ }
1121+
10541122 private static final Logger log = LoggerFactory .getLogger (ProxyPublishConsumeTest .class );
10551123}
0 commit comments