Commit b4d73f9e authored by Guus der Kinderen's avatar Guus der Kinderen

OF-159: Tabs to spaces

parent 2344bcd8
...@@ -41,202 +41,202 @@ import org.xmpp.packet.Packet; ...@@ -41,202 +41,202 @@ import org.xmpp.packet.Packet;
*/ */
public class S2STestService { public class S2STestService {
private static final org.slf4j.Logger Log = LoggerFactory.getLogger(S2STestService.class); private static final org.slf4j.Logger Log = LoggerFactory.getLogger(S2STestService.class);
private Semaphore waitUntil; private Semaphore waitUntil;
private String domain; private String domain;
/** /**
* @param domain The host to test. * @param domain The host to test.
*/ */
public S2STestService(String domain) { public S2STestService(String domain) {
this.domain = domain; this.domain = domain;
} }
/** /**
* Run a test against the domain. * Run a test against the domain.
* @return K-V pairs of debug information. * @return K-V pairs of debug information.
* @throws Exception On error. * @throws Exception On error.
*/ */
public Map<String, String> run() throws Exception { public Map<String, String> run() throws Exception {
waitUntil = new Semaphore(0); waitUntil = new Semaphore(0);
Map<String, String> results = new HashMap<>(); Map<String, String> results = new HashMap<>();
// Tear down existing routes. // Tear down existing routes.
final SessionManager sessionManager = SessionManager.getInstance(); final SessionManager sessionManager = SessionManager.getInstance();
for (final Session incomingServerSession : sessionManager.getIncomingServerSessions( domain ) ) for (final Session incomingServerSession : sessionManager.getIncomingServerSessions( domain ) )
{ {
incomingServerSession.close(); incomingServerSession.close();
} }
final Session outgoingServerSession = sessionManager.getOutgoingServerSession( domain ); final Session outgoingServerSession = sessionManager.getOutgoingServerSession( domain );
if ( outgoingServerSession != null ) if ( outgoingServerSession != null )
{ {
outgoingServerSession.close(); outgoingServerSession.close();
} }
// Intercept logging. // Intercept logging.
final StringBuilder logs = new StringBuilder(); final StringBuilder logs = new StringBuilder();
Appender appender = interceptLogging(logs); Appender appender = interceptLogging(logs);
// Intercept packets. // Intercept packets.
PacketInterceptor interceptor = new S2SInterceptor(); PacketInterceptor interceptor = new S2SInterceptor();
InterceptorManager.getInstance().addInterceptor(interceptor); InterceptorManager.getInstance().addInterceptor(interceptor);
// Send ping. // Send ping.
Log.info("Sending server to server ping request to " +domain); Log.info("Sending server to server ping request to " +domain);
sendPing(); sendPing();
// Wait for success or exceed socket 5s timeout. // Wait for success or exceed socket 5s timeout.
waitUntil.tryAcquire(6, TimeUnit.SECONDS); waitUntil.tryAcquire(6, TimeUnit.SECONDS);
// Check on the connection status. // Check on the connection status.
logSessionStatus(); logSessionStatus();
// Prepare response. // Prepare response.
results.put("certs", getCertificates()); results.put("certs", getCertificates());
results.put("stanzas", interceptor.toString()); results.put("stanzas", interceptor.toString());
results.put("logs", logs.toString()); results.put("logs", logs.toString());
// Cleanup // Cleanup
InterceptorManager.getInstance().removeInterceptor(interceptor); InterceptorManager.getInstance().removeInterceptor(interceptor);
Logger.getRootLogger().removeAppender(appender); Logger.getRootLogger().removeAppender(appender);
return results; return results;
} }
/** /**
* Begins intercepting logging. * Begins intercepting logging.
* *
* @param logs The StringBuilder to collect log output. * @param logs The StringBuilder to collect log output.
* @return A reference to the log4j appender which receives log output. * @return A reference to the log4j appender which receives log output.
*/ */
private Appender interceptLogging(final StringBuilder logs) { private Appender interceptLogging(final StringBuilder logs) {
WriterAppender appender = new WriterAppender() { WriterAppender appender = new WriterAppender() {
@Override @Override
public void append(LoggingEvent event) { public void append(LoggingEvent event) {
logs.append(String.format("%s: %s: %s\n", logs.append(String.format("%s: %s: %s\n",
new Date(event.getTimeStamp()).toString(), new Date(event.getTimeStamp()).toString(),
event.getLevel().toString(), event.getLevel().toString(),
event.getRenderedMessage())); event.getRenderedMessage()));
String[] throwableInfo = event.getThrowableStrRep(); String[] throwableInfo = event.getThrowableStrRep();
if (throwableInfo != null) { if (throwableInfo != null) {
for (String line : throwableInfo) { for (String line : throwableInfo) {
logs.append(line +"\n"); logs.append(line +"\n");
} }
} }
} }
}; };
appender.setLayout(new PatternLayout("%d [%p|%c|%C{1}] %m%n")); appender.setLayout(new PatternLayout("%d [%p|%c|%C{1}] %m%n"));
appender.setThreshold(Level.ALL); appender.setThreshold(Level.ALL);
appender.activateOptions(); appender.activateOptions();
Logger.getRootLogger().addAppender(appender); Logger.getRootLogger().addAppender(appender);
return appender; return appender;
} }
/** /**
* Logs the status of the session. * Logs the status of the session.
*/ */
private void logSessionStatus() { private void logSessionStatus() {
OutgoingServerSession session = XMPPServer.getInstance().getSessionManager().getOutgoingServerSession(domain); OutgoingServerSession session = XMPPServer.getInstance().getSessionManager().getOutgoingServerSession(domain);
if (session != null) { if (session != null) {
int connectionStatus = session.getStatus(); int connectionStatus = session.getStatus();
switch(connectionStatus) { switch(connectionStatus) {
case Session.STATUS_CONNECTED: case Session.STATUS_CONNECTED:
Log.info("Session is connected."); Log.info("Session is connected.");
break; break;
case Session.STATUS_CLOSED: case Session.STATUS_CLOSED:
Log.info("Session is closed."); Log.info("Session is closed.");
break; break;
case Session.STATUS_AUTHENTICATED: case Session.STATUS_AUTHENTICATED:
Log.info("Session is authenticated."); Log.info("Session is authenticated.");
break; break;
} }
} else { } else {
Log.info("Failed to establish server to server session."); Log.info("Failed to establish server to server session.");
} }
} }
/** /**
* Sends a server to server ping request. * Sends a server to server ping request.
*/ */
private void sendPing() { private void sendPing() {
final IQ pingRequest = new IQ(Type.get); final IQ pingRequest = new IQ(Type.get);
pingRequest.setChildElement("ping", IQPingHandler.NAMESPACE); pingRequest.setChildElement("ping", IQPingHandler.NAMESPACE);
pingRequest.setFrom(XMPPServer.getInstance().getServerInfo().getXMPPDomain()); pingRequest.setFrom(XMPPServer.getInstance().getServerInfo().getXMPPDomain());
pingRequest.setTo(domain); pingRequest.setTo(domain);
XMPPServer.getInstance().getIQRouter().route(pingRequest); XMPPServer.getInstance().getIQRouter().route(pingRequest);
} }
/** /**
* @return A String representation of the certificate chain for the connection to the domain under test. * @return A String representation of the certificate chain for the connection to the domain under test.
*/ */
private String getCertificates() { private String getCertificates() {
Session session = XMPPServer.getInstance().getSessionManager().getOutgoingServerSession(domain); Session session = XMPPServer.getInstance().getSessionManager().getOutgoingServerSession(domain);
StringBuilder certs = new StringBuilder(); StringBuilder certs = new StringBuilder();
if (session != null) { if (session != null) {
Log.info("Successfully negotiated TLS connection."); Log.info("Successfully negotiated TLS connection.");
Certificate[] certificates = session.getPeerCertificates(); Certificate[] certificates = session.getPeerCertificates();
for (Certificate certificate : certificates) { for (Certificate certificate : certificates) {
X509Certificate x509cert = (X509Certificate) certificate; X509Certificate x509cert = (X509Certificate) certificate;
certs.append("--\nSubject: "); certs.append("--\nSubject: ");
certs.append(x509cert.getSubjectDN()); certs.append(x509cert.getSubjectDN());
List<String> subjectAltNames = new SANCertificateIdentityMapping().mapIdentity(x509cert); List<String> subjectAltNames = new SANCertificateIdentityMapping().mapIdentity(x509cert);
if (!subjectAltNames.isEmpty()) { if (!subjectAltNames.isEmpty()) {
certs.append("\nSubject Alternative Names: "); certs.append("\nSubject Alternative Names: ");
for (String subjectAltName : subjectAltNames) { for (String subjectAltName : subjectAltNames) {
certs.append("\n "); certs.append("\n ");
certs.append(subjectAltName); certs.append(subjectAltName);
} }
} }
certs.append("\nNot Before: "); certs.append("\nNot Before: ");
certs.append(x509cert.getNotBefore()); certs.append(x509cert.getNotBefore());
certs.append("\nNot After: "); certs.append("\nNot After: ");
certs.append(x509cert.getNotAfter()); certs.append(x509cert.getNotAfter());
certs.append("\n\n-----BEGIN CERTIFICATE-----\n"); certs.append("\n\n-----BEGIN CERTIFICATE-----\n");
certs.append(DatatypeConverter.printBase64Binary( certs.append(DatatypeConverter.printBase64Binary(
certificate.getPublicKey().getEncoded()).replaceAll("(.{64})", "$1\n")); certificate.getPublicKey().getEncoded()).replaceAll("(.{64})", "$1\n"));
certs.append("\n-----END CERTIFICATE-----\n\n"); certs.append("\n-----END CERTIFICATE-----\n\n");
} }
} }
return certs.toString(); return certs.toString();
} }
/** /**
* Packet interceptor for the duration of our S2S test. * Packet interceptor for the duration of our S2S test.
*/ */
private class S2SInterceptor implements PacketInterceptor { private class S2SInterceptor implements PacketInterceptor {
private StringBuilder xml = new StringBuilder(); private StringBuilder xml = new StringBuilder();
/** /**
* Keeps a log of the XMPP traffic, releasing the wait lock on response received. * Keeps a log of the XMPP traffic, releasing the wait lock on response received.
*/ */
@Override @Override
public void interceptPacket(Packet packet, Session session, boolean incoming, boolean processed) public void interceptPacket(Packet packet, Session session, boolean incoming, boolean processed)
throws PacketRejectedException { throws PacketRejectedException {
if (!processed if (!processed
&& (domain.equals(packet.getFrom().getDomain()) || domain.equals(packet.getTo().getDomain()))) { && (domain.equals(packet.getFrom().getDomain()) || domain.equals(packet.getTo().getDomain()))) {
xml.append(packet.toXML()); xml.append(packet.toXML());
xml.append('\n'); xml.append('\n');
// If we've received our IQ response, stop waiting. // If we've received our IQ response, stop waiting.
if (domain.equals(packet.getFrom().getDomain()) && "result".equals(packet.getElement().attributeValue("type"))) { if (domain.equals(packet.getFrom().getDomain()) && "result".equals(packet.getElement().attributeValue("type"))) {
Log.info("Successful server to server response received."); Log.info("Successful server to server response received.");
waitUntil.release(); waitUntil.release();
} }
} }
} }
/** /**
* Returns the received stanzas as a String. * Returns the received stanzas as a String.
*/ */
public String toString() { public String toString() {
return xml.toString(); return xml.toString();
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment