|
21 | 21 | import lombok.extern.slf4j.Slf4j; |
22 | 22 | import org.apache.pulsar.client.admin.GrantTopicPermissionOptions; |
23 | 23 | import org.apache.pulsar.common.policies.data.AuthAction; |
| 24 | +import org.apache.pulsar.common.policies.data.SubscriptionAuthMode; |
24 | 25 | import org.awaitility.Awaitility; |
25 | 26 | import org.fusesource.mqtt.client.BlockingConnection; |
26 | 27 | import org.fusesource.mqtt.client.MQTT; |
@@ -113,6 +114,58 @@ public void testAuthorizedOnTopic() throws Exception { |
113 | 114 | consumer.disconnect(); |
114 | 115 | } |
115 | 116 |
|
| 117 | + @Test(timeOut = TIMEOUT) |
| 118 | + public void testSubscriptionAuthMode() throws Exception { |
| 119 | + Set<AuthAction> user1Actions = new HashSet<>(); |
| 120 | + user1Actions.add(AuthAction.produce); |
| 121 | + admin.namespaces().grantPermissionOnNamespace("public/default", "user1", user1Actions); |
| 122 | + |
| 123 | + Set<AuthAction> user2Actions = new HashSet<>(); |
| 124 | + user2Actions.add(AuthAction.consume); |
| 125 | + admin.namespaces().grantPermissionOnNamespace("public/default", "user2", user2Actions); |
| 126 | + |
| 127 | + admin.namespaces().setSubscriptionAuthMode("public/default", SubscriptionAuthMode.Prefix); |
| 128 | + |
| 129 | + String topicName = "persistent://public/default/testSubscriptionAuthMode"; |
| 130 | + MQTT mqttConsumer = createMQTTClient(); |
| 131 | + mqttConsumer.setClientId("user2-11"); |
| 132 | + mqttConsumer.setUserName("user2"); |
| 133 | + mqttConsumer.setPassword("pass2"); |
| 134 | + BlockingConnection consumer = mqttConsumer.blockingConnection(); |
| 135 | + consumer.connect(); |
| 136 | + Topic[] topics = {new Topic(topicName, QoS.AT_LEAST_ONCE)}; |
| 137 | + consumer.subscribe(topics); |
| 138 | + |
| 139 | + MQTT mqttProducer = createMQTTClient(); |
| 140 | + mqttProducer.setUserName("user1"); |
| 141 | + mqttProducer.setPassword("pass1"); |
| 142 | + BlockingConnection producer = mqttProducer.blockingConnection(); |
| 143 | + producer.connect(); |
| 144 | + String message = "Hello MQTT"; |
| 145 | + producer.publish(topicName, message.getBytes(), QoS.AT_MOST_ONCE, false); |
| 146 | + |
| 147 | + Message receive = consumer.receive(); |
| 148 | + Assert.assertEquals(new String(receive.getPayload()), message); |
| 149 | + producer.disconnect(); |
| 150 | + consumer.disconnect(); |
| 151 | + |
| 152 | + MQTT mqttConsumer3 = createMQTTClient(); |
| 153 | + mqttConsumer3.setClientId("user3-11"); |
| 154 | + mqttConsumer3.setUserName("user2"); |
| 155 | + mqttConsumer3.setPassword("pass2"); |
| 156 | + mqttConsumer3.setConnectAttemptsMax(0); |
| 157 | + mqttConsumer3.setReconnectAttemptsMax(0); |
| 158 | + BlockingConnection connection3 = mqttConsumer3.blockingConnection(); |
| 159 | + connection3.connect(); |
| 160 | + Awaitility.await().untilAsserted(() -> { |
| 161 | + Assert.assertTrue(connection3.isConnected()); |
| 162 | + }); |
| 163 | + connection3.subscribe(topics); |
| 164 | + Awaitility.await().untilAsserted(() -> { |
| 165 | + Assert.assertFalse(connection3.isConnected()); |
| 166 | + }); |
| 167 | + } |
| 168 | + |
116 | 169 | @Test |
117 | 170 | public void testNotAuthorized() throws Exception { |
118 | 171 | Set<AuthAction> user3Actions = new HashSet<>(); |
|
0 commit comments