use of io.vertx.test.tls.Cert in project vert.x by eclipse.
the class WebSocketTest method testTLS.
private void testTLS(Cert<?> clientCert, Trust<?> clientTrust, Cert<?> serverCert, Trust<?> serverTrust, boolean requireClientAuth, boolean serverUsesCrl, boolean clientTrustAll, boolean clientUsesCrl, boolean shouldPass, boolean clientSsl, boolean serverSsl, boolean sni, String[] enabledCipherSuites, BiConsumer<HttpClient, Handler<AsyncResult<WebSocket>>> wsProvider) throws Exception {
HttpClientOptions options = new HttpClientOptions();
options.setSsl(clientSsl);
options.setTrustAll(clientTrustAll);
if (clientUsesCrl) {
options.addCrlPath("tls/root-ca/crl.pem");
}
options.setTrustOptions(clientTrust.get());
options.setKeyCertOptions(clientCert.get());
for (String suite : enabledCipherSuites) {
options.addEnabledCipherSuite(suite);
}
client = vertx.createHttpClient(options);
HttpServerOptions serverOptions = new HttpServerOptions();
serverOptions.setSsl(serverSsl);
serverOptions.setSni(sni);
serverOptions.setTrustOptions(serverTrust.get());
serverOptions.setKeyCertOptions(serverCert.get());
if (requireClientAuth) {
serverOptions.setClientAuth(ClientAuth.REQUIRED);
}
if (serverUsesCrl) {
serverOptions.addCrlPath("tls/root-ca/crl.pem");
}
for (String suite : enabledCipherSuites) {
serverOptions.addEnabledCipherSuite(suite);
}
server = vertx.createHttpServer(serverOptions.setPort(4043));
server.webSocketHandler(ws -> {
ws.handler(ws::write);
});
try {
server.listen(ar -> {
assertTrue(ar.succeeded());
Handler<AsyncResult<WebSocket>> handler = ar2 -> {
if (ar2.succeeded()) {
WebSocket ws = ar2.result();
if (clientSsl && sni) {
try {
Certificate clientPeerCert = ws.peerCertificates().get(0);
assertEquals("host2.com", TestUtils.cnOf(clientPeerCert));
} catch (Exception err) {
fail(err);
}
}
int size = 100;
Buffer received = Buffer.buffer();
ws.handler(data -> {
received.appendBuffer(data);
if (received.length() == size) {
ws.close();
testComplete();
}
});
Buffer buff = Buffer.buffer(TestUtils.randomByteArray(size));
ws.writeFrame(WebSocketFrame.binaryFrame(buff, true));
} else {
if (shouldPass) {
ar2.cause().printStackTrace();
fail("Should not throw exception");
} else {
testComplete();
}
}
};
wsProvider.accept(client, handler);
});
} catch (Exception e) {
e.printStackTrace();
}
await();
}
Aggregations