use of io.vertx.mqtt.MqttServer in project hono by eclipse.
the class AbstractVertxBasedMqttProtocolAdapterTest method testUploadTelemetryMessageFailsForUnknownDevice.
/**
* Verifies that the adapter does not forward a message published by a device
* if the device's registration status cannot be asserted.
*
* @param ctx The vert.x test context.
*/
@Test
public void testUploadTelemetryMessageFailsForUnknownDevice(final TestContext ctx) {
// GIVEN an adapter
final MqttServer server = getMqttServer(false);
final AbstractVertxBasedMqttProtocolAdapter<ProtocolAdapterProperties> adapter = getAdapter(server);
givenATelemetrySenderForOutcome(Future.succeededFuture(mock(ProtonDelivery.class)));
// WHEN an unknown device publishes a telemetry message
when(regClient.assertRegistration(eq("unknown"), any())).thenReturn(Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_NOT_FOUND)));
final MessageSender sender = mock(MessageSender.class);
when(messagingClient.getOrCreateTelemetrySender(anyString())).thenReturn(Future.succeededFuture(sender));
adapter.uploadTelemetryMessage(new MqttContext(mock(MqttPublishMessage.class), mock(MqttEndpoint.class)), "my-tenant", "unknown", Buffer.buffer("test")).setHandler(ctx.asyncAssertFailure(t -> {
// THEN the message has not been sent downstream
verify(sender, never()).send(any(Message.class));
// because the device's registration status could not be asserted
ctx.assertEquals(HttpURLConnection.HTTP_NOT_FOUND, ((ClientErrorException) t).getErrorCode());
}));
}
use of io.vertx.mqtt.MqttServer in project hono by eclipse.
the class AbstractVertxBasedMqttProtocolAdapterTest method getMqttServer.
private static MqttServer getMqttServer(final boolean startupShouldFail) {
final MqttServer server = mock(MqttServer.class);
when(server.actualPort()).thenReturn(0, 1883);
when(server.endpointHandler(VertxMockSupport.anyHandler())).thenReturn(server);
when(server.listen(VertxMockSupport.anyHandler())).then(invocation -> {
final Handler<AsyncResult<MqttServer>> handler = invocation.getArgument(0);
if (startupShouldFail) {
handler.handle(Future.failedFuture("MQTT server intentionally failed to start"));
} else {
handler.handle(Future.succeededFuture(server));
}
return server;
});
return server;
}
use of io.vertx.mqtt.MqttServer in project vertx-examples by vert-x3.
the class Server method start.
@Override
public void start() throws Exception {
MqttServerOptions options = new MqttServerOptions().setPort(8883).setPemKeyCertOptions(new PemKeyCertOptions().setKeyPath("server-key.pem").setCertPath("server-cert.pem")).setSsl(true);
MqttServer mqttServer = MqttServer.create(vertx, options);
mqttServer.endpointHandler(endpoint -> {
// shows main connect info
System.out.println("MQTT client [" + endpoint.clientIdentifier() + "] request to connect, " + "clean session = " + endpoint.isCleanSession());
// accept connection from the remote client
endpoint.accept(false);
}).listen(ar -> {
if (ar.succeeded()) {
System.out.println("MQTT server is listening on port " + mqttServer.actualPort());
} else {
System.err.println("Error on starting the server" + ar.cause().getMessage());
}
});
}
Aggregations