use of io.vertx.core.Context in project vertx-proton by vert-x3.
the class ProtonServerImpl method connectHandler.
@Override
public ProtonServerImpl connectHandler(Handler<ProtonConnection> handler) {
this.handler = handler;
server.connectHandler(netSocket -> {
String hostname = null;
try {
hostname = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
// ignore
}
final ProtonConnectionImpl connection = new ProtonConnectionImpl(vertx, hostname);
if (advertiseAnonymousRelayCapability) {
connection.setOfferedCapabilities(new Symbol[] { ProtonConnectionImpl.ANONYMOUS_RELAY });
}
final ProtonSaslAuthenticator authenticator = authenticatorFactory.create();
ProtonTransportOptions transportOptions = new ProtonTransportOptions();
transportOptions.setHeartbeat(this.options.getHeartbeat());
transportOptions.setMaxFrameSize(this.options.getMaxFrameSize());
connection.bindServer(netSocket, new ProtonSaslAuthenticator() {
@Override
public void init(NetSocket socket, ProtonConnection protonConnection, Transport transport) {
authenticator.init(socket, protonConnection, transport);
}
@Override
public void process(Handler<Boolean> completionHandler) {
final Context context = Vertx.currentContext();
authenticator.process(complete -> {
final Context callbackContext = vertx.getOrCreateContext();
if (context != callbackContext) {
throw new IllegalStateException("Callback was not made on the original context");
}
if (complete) {
// The authenticator completed, now check success, do required post processing
if (succeeded()) {
handler.handle(connection);
connection.flush();
} else {
// auth failed, flush any pending data and disconnect client
connection.flush();
connection.disconnect();
}
}
completionHandler.handle(complete);
});
}
@Override
public boolean succeeded() {
return authenticator.succeeded();
}
}, transportOptions);
});
return this;
}
use of io.vertx.core.Context in project vertx-proton by vert-x3.
the class VertxProtonExamples method example5.
public void example5(Vertx vertx, ProtonClient client) {
Context myContext = vertx.getOrCreateContext();
myContext.runOnContext(x -> {
client.connect("hostname", 5672, connectResult -> {
// In this case the context will be 'myContext' from earlier
});
});
}
use of io.vertx.core.Context in project hono by eclipse.
the class FileBasedCredentialsServiceTest method testGetCredentialsSucceedsForExistingCredentials.
/**
* Verifies that the service returns existing credentials.
*
* @param ctx The vert.x test context.
*/
@Test
public void testGetCredentialsSucceedsForExistingCredentials(final TestContext ctx) {
register(svc, "tenant", "device", "myId", "myType", new JsonArray(), ctx);
final Async get = ctx.async();
svc.get("tenant", "myType", "myId", ctx.asyncAssertSuccess(s -> {
assertThat(s.getStatus(), is(HttpURLConnection.HTTP_OK));
assertThat(s.getPayload().getString(CredentialsConstants.FIELD_AUTH_ID), is("myId"));
assertThat(s.getPayload().getString(CredentialsConstants.FIELD_TYPE), is("myType"));
get.complete();
}));
get.await(2000);
}
use of io.vertx.core.Context in project hono by eclipse.
the class FileBasedCredentialsServiceTest method testDoStartLoadsCredentials.
/**
* Verifies that credentials are successfully loaded from file during startup.
*
* @param ctx The test context.
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testDoStartLoadsCredentials(final TestContext ctx) {
// GIVEN a service configured with a file name
props.setFilename(FILE_NAME);
when(fileSystem.existsBlocking(props.getFilename())).thenReturn(Boolean.TRUE);
doAnswer(invocation -> {
final Buffer data = DeviceRegistryTestUtils.readFile(FILE_NAME);
Handler handler = invocation.getArgument(1);
handler.handle(Future.succeededFuture(data));
return null;
}).when(fileSystem).readFile(eq(props.getFilename()), any(Handler.class));
// WHEN the service is started
Async startup = ctx.async();
Future<Void> startFuture = Future.future();
startFuture.setHandler(ctx.asyncAssertSuccess(s -> {
startup.complete();
}));
svc.doStart(startFuture);
// THEN the credentials from the file are loaded
startup.await(2000);
assertRegistered(svc, Constants.DEFAULT_TENANT, "sensor1", CredentialsConstants.SECRETS_TYPE_HASHED_PASSWORD, ctx);
}
use of io.vertx.core.Context in project hono by eclipse.
the class FileBasedCredentialsServiceTest method testDoStartIgnoresMalformedJson.
/**
* Verifies that the credentials service successfully starts up even if
* the file to read credentials from contains malformed JSON.
*
* @param ctx The vert.x context.
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testDoStartIgnoresMalformedJson(final TestContext ctx) {
// GIVEN a registration service configured to read data from a file
// that contains malformed JSON
props.setFilename(FILE_NAME);
when(fileSystem.existsBlocking(FILE_NAME)).thenReturn(Boolean.TRUE);
doAnswer(invocation -> {
final Buffer data = mock(Buffer.class);
when(data.getBytes()).thenReturn("NO JSON".getBytes(StandardCharsets.UTF_8));
Handler handler = invocation.getArgument(1);
handler.handle(Future.succeededFuture(data));
return null;
}).when(fileSystem).readFile(eq(props.getFilename()), any(Handler.class));
// WHEN starting the service
Async startup = ctx.async();
Future<Void> startupTracker = Future.future();
startupTracker.setHandler(ctx.asyncAssertSuccess(started -> {
startup.complete();
}));
svc.doStart(startupTracker);
// THEN startup succeeds
startup.await(2000);
}
Aggregations