|
16 | 16 | import com.hivemq.client.mqtt.MqttGlobalPublishFilter; |
17 | 17 | import com.hivemq.client.mqtt.datatypes.MqttQos; |
18 | 18 | import com.hivemq.client.mqtt.mqtt5.Mqtt5BlockingClient; |
| 19 | +import com.hivemq.client.mqtt.mqtt5.datatypes.Mqtt5UserProperties; |
| 20 | +import com.hivemq.client.mqtt.mqtt5.datatypes.Mqtt5UserProperty; |
19 | 21 | import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5ConnAckException; |
20 | 22 | import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5PubAckException; |
21 | 23 | import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5SubAckException; |
|
33 | 35 | import java.util.HashSet; |
34 | 36 | import java.util.Random; |
35 | 37 | import java.util.Set; |
| 38 | +import lombok.extern.slf4j.Slf4j; |
36 | 39 | import org.apache.pulsar.client.admin.PulsarAdminException; |
37 | 40 | import org.apache.pulsar.common.policies.data.AuthAction; |
38 | 41 | import org.awaitility.Awaitility; |
39 | 42 | import org.testng.Assert; |
40 | 43 | import org.testng.annotations.Test; |
41 | 44 |
|
| 45 | +@Slf4j |
42 | 46 | public class MQTT5AuthorizationProxyReasonCodeOnAllAckTest extends AuthorizationConfig { |
43 | 47 | private final Random random = new Random(); |
44 | 48 |
|
@@ -200,5 +204,58 @@ public void testAuthenticationSuccess() { |
200 | 204 | .send(); |
201 | 205 | Assert.assertEquals(connAck.getReasonCode(), Mqtt5ConnAckReasonCode.SUCCESS); |
202 | 206 | } |
| 207 | + |
| 208 | + @Test |
| 209 | + public void testPublishWithUserPropertiesAndEnableAuthorization() throws Exception { |
| 210 | + Set<AuthAction> userActions = new HashSet<>(); |
| 211 | + userActions.add(AuthAction.produce); |
| 212 | + userActions.add(AuthAction.consume); |
| 213 | + admin.namespaces().grantPermissionOnNamespace("public/default", "user1", userActions); |
| 214 | + |
| 215 | + |
| 216 | + final String topic = "testPublishWithUserProperties"; |
| 217 | + Mqtt5BlockingClient client1 = MQTT5ClientUtils.createMqtt5ProxyClient( |
| 218 | + getMqttProxyPortList().get(random.nextInt(mqttProxyPortList.size()))); |
| 219 | + Mqtt5UserProperties userProperty = Mqtt5UserProperties.builder() |
| 220 | + .add("user-1", "value-1") |
| 221 | + .add("user-2", "value-2") |
| 222 | + .build(); |
| 223 | + Mqtt5UserProperty userProperty1 = Mqtt5UserProperty.of("user-1", "value-1"); |
| 224 | + Mqtt5UserProperty userProperty2 = Mqtt5UserProperty.of("user-2", "value-2"); |
| 225 | + client1.connectWith() |
| 226 | + .simpleAuth() |
| 227 | + .username("user1") |
| 228 | + .password("pass1".getBytes(StandardCharsets.UTF_8)) |
| 229 | + .applySimpleAuth() |
| 230 | + .send(); |
| 231 | + Mqtt5Publish publishMessage = Mqtt5Publish.builder().topic(topic).qos(MqttQos.AT_LEAST_ONCE) |
| 232 | + .userProperties(userProperty) |
| 233 | + .asWill().build(); |
| 234 | + |
| 235 | + Mqtt5BlockingClient client2 = MQTT5ClientUtils.createMqtt5ProxyClient( |
| 236 | + getMqttProxyPortList().get(random.nextInt(mqttProxyPortList.size()))); |
| 237 | + client2.connectWith() |
| 238 | + .simpleAuth() |
| 239 | + .username("user1") |
| 240 | + .password("pass1".getBytes(StandardCharsets.UTF_8)) |
| 241 | + .applySimpleAuth() |
| 242 | + .send(); |
| 243 | + client2.subscribeWith() |
| 244 | + .topicFilter(topic) |
| 245 | + .qos(MqttQos.AT_LEAST_ONCE) |
| 246 | + .send(); |
| 247 | + Mqtt5BlockingClient.Mqtt5Publishes publishes = client2.publishes(MqttGlobalPublishFilter.ALL); |
| 248 | + client1.publish(publishMessage); |
| 249 | + Mqtt5Publish message = publishes.receive(); |
| 250 | + Assert.assertNotNull(message); |
| 251 | + log.info("Received message properties: {}", message.getUserProperties()); |
| 252 | + // Validate the user properties order, must be the same with set order. |
| 253 | + Assert.assertEquals(message.getUserProperties().asList().get(0).compareTo(userProperty1), 0); |
| 254 | + Assert.assertEquals(message.getUserProperties().asList().get(1).compareTo(userProperty2), 0); |
| 255 | + publishes.close(); |
| 256 | + client2.unsubscribeWith().topicFilter(topic).send(); |
| 257 | + client1.disconnect(); |
| 258 | + client2.disconnect(); |
| 259 | + } |
203 | 260 | } |
204 | 261 |
|
0 commit comments