DIRSTUDIO-1279: Enable TLSv1.3 and show protocol and cipher suite
diff --git a/eclipse-trgt-platform/template/org.apache.directory.studio.eclipse-trgt-platform.template b/eclipse-trgt-platform/template/org.apache.directory.studio.eclipse-trgt-platform.template
index b4d55df..7bee90d 100644
--- a/eclipse-trgt-platform/template/org.apache.directory.studio.eclipse-trgt-platform.template
+++ b/eclipse-trgt-platform/template/org.apache.directory.studio.eclipse-trgt-platform.template
@@ -19,7 +19,7 @@
@author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
-->
<?pde version="3.8"?>
-<target name="Apache Directory Studio Platform" sequenceNumber="477">
+<target name="Apache Directory Studio Platform" sequenceNumber="479">
<locations>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
diff --git a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/ConnectionWrapper.java b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/ConnectionWrapper.java
index 7c7d1ff..51194dd 100644
--- a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/ConnectionWrapper.java
+++ b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/ConnectionWrapper.java
@@ -20,10 +20,10 @@
package org.apache.directory.studio.connection.core.io;
-import java.security.cert.X509Certificate;
import java.util.Collection;
import javax.naming.directory.SearchControls;
+import javax.net.ssl.SSLSession;
import org.apache.directory.api.ldap.model.entry.Entry;
import org.apache.directory.api.ldap.model.entry.Modification;
@@ -50,7 +50,7 @@
*
* @param monitor the progres monitor
*/
- X509Certificate[] connect( StudioProgressMonitor monitor );
+ void connect( StudioProgressMonitor monitor );
/**
@@ -90,6 +90,14 @@
/**
+ * Gets the {@link SSLSession} associated with the connection.
+ *
+ * @return the {@link SSLSession} associated with the connection or null if the connection is not secured
+ */
+ SSLSession getSslSession();
+
+
+ /**
* Sets the binary attributes.
*
* @param binaryAttributes the binary attributes
diff --git a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/StudioTrustManager.java b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/StudioTrustManager.java
index 56fe530..5edb0e1 100644
--- a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/StudioTrustManager.java
+++ b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/StudioTrustManager.java
@@ -53,8 +53,6 @@
{
private X509TrustManager jvmTrustManager;
private String host;
- private X509Certificate[] chain;
-
/**
* Creates a new instance of StudioTrustManager.
@@ -94,8 +92,6 @@
*/
public void checkServerTrusted( X509Certificate[] chain, String authType ) throws CertificateException
{
- this.chain = chain;
-
// check permanent trusted certificates, return on success
try
{
@@ -249,8 +245,4 @@
return null;
}
- public X509Certificate[] getChain()
- {
- return chain;
- }
}
diff --git a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/DirectoryApiConnectionWrapper.java b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/DirectoryApiConnectionWrapper.java
index 8c7c694..4a82560 100644
--- a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/DirectoryApiConnectionWrapper.java
+++ b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/api/DirectoryApiConnectionWrapper.java
@@ -21,7 +21,6 @@
import java.security.KeyStore;
-import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -29,6 +28,7 @@
import java.util.concurrent.atomic.AtomicReference;
import javax.naming.directory.SearchControls;
+import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
@@ -137,25 +137,24 @@
/**
* {@inheritDoc}
*/
- public X509Certificate[] connect( StudioProgressMonitor monitor )
+ public void connect( StudioProgressMonitor monitor )
{
ldapConnection = null;
jobThread = null;
try
{
- return doConnect( monitor );
+ doConnect( monitor );
}
catch ( Exception e )
{
disconnect();
monitor.reportError( e );
- return null;
}
}
- private X509Certificate[] doConnect( final StudioProgressMonitor monitor ) throws Exception
+ private void doConnect( final StudioProgressMonitor monitor ) throws Exception
{
ldapConnection = null;
@@ -210,8 +209,6 @@
}
}
- AtomicReference<X509Certificate[]> serverCertificates = new AtomicReference<>();
-
InnerRunnable runnable = new InnerRunnable()
{
public void run()
@@ -238,12 +235,6 @@
ldapConnectionUnderConstruction.startTls();
}
- // Capture the server certificates
- if ( studioTrustmanager.get() != null )
- {
- serverCertificates.set( studioTrustmanager.get().getChain() );
- }
-
// Now set the LDAP connection once the (optional) security layer is in place
ldapConnection = ldapConnectionUnderConstruction;
@@ -255,7 +246,7 @@
// DIRSTUDIO-1219: Verify secure connection if ldaps:// or StartTLS is configured
if ( ldapConnectionConfig.isUseTls() || ldapConnectionConfig.isUseSsl() )
{
- if ( !isSecured() || serverCertificates.get() == null )
+ if ( !isSecured() )
{
throw new Exception( Messages.DirectoryApiConnectionWrapper_UnsecuredConnection );
}
@@ -294,8 +285,6 @@
{
throw runnable.getException();
}
-
- return serverCertificates.get();
}
@@ -539,6 +528,13 @@
}
+ @Override
+ public SSLSession getSslSession()
+ {
+ return isConnected() ? ldapConnection.getSslSession() : null;
+ }
+
+
/**
* {@inheritDoc}
*/
diff --git a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/jobs/CheckNetworkParameterRunnable.java b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/jobs/CheckNetworkParameterRunnable.java
index 5b8fce3..a0ef158 100644
--- a/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/jobs/CheckNetworkParameterRunnable.java
+++ b/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/jobs/CheckNetworkParameterRunnable.java
@@ -21,7 +21,7 @@
package org.apache.directory.studio.connection.core.jobs;
-import java.security.cert.X509Certificate;
+import javax.net.ssl.SSLSession;
import org.apache.directory.studio.common.core.jobs.StudioProgressMonitor;
import org.apache.directory.studio.connection.core.Connection;
@@ -38,7 +38,7 @@
{
private Connection connection;
- private X509Certificate[] serverCertificates;
+ private SSLSession sslSession;
/**
* Creates a new instance of CheckNetworkParameterJob.
@@ -79,7 +79,8 @@
monitor.reportProgress( " " ); //$NON-NLS-1$
monitor.worked( 1 );
- this.serverCertificates = connection.getConnectionWrapper().connect( monitor );
+ connection.getConnectionWrapper().connect( monitor );
+ this.sslSession = connection.getConnectionWrapper().getSslSession();
connection.getConnectionWrapper().disconnect();
}
@@ -102,9 +103,8 @@
}
- public X509Certificate[] getServerCertificates()
+ public SSLSession getSslSession()
{
- return serverCertificates;
-
+ return sslSession;
}
}
diff --git a/plugins/connection.ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/NetworkParameterPage.java b/plugins/connection.ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/NetworkParameterPage.java
index fa17ef5..70f3aca 100644
--- a/plugins/connection.ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/NetworkParameterPage.java
+++ b/plugins/connection.ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/NetworkParameterPage.java
@@ -21,10 +21,14 @@
package org.apache.directory.studio.connection.ui.widgets;
+import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;
import java.util.Date;
+import javax.net.ssl.SSLPeerUnverifiedException;
+import javax.net.ssl.SSLSession;
+
import org.apache.commons.lang3.StringUtils;
import org.apache.directory.api.ldap.model.url.LdapUrl;
import org.apache.directory.api.ldap.model.url.LdapUrl.Extension;
@@ -463,10 +467,16 @@
if ( status.isOK() )
{
- MessageDialog.openInformation( Display.getDefault().getActiveShell(), Messages
- .getString( "NetworkParameterPage.CheckNetworkParameter" ), //$NON-NLS-1$
- Messages
- .getString( "NetworkParameterPage.ConnectionEstablished" ) ); //$NON-NLS-1$
+ String title = Messages.getString( "NetworkParameterPage.CheckNetworkParameter" ); //$NON-NLS-1$
+ String message = Messages.getString( "NetworkParameterPage.ConnectionEstablished" ); //$NON-NLS-1$
+
+ SSLSession sslSession = runnable.getSslSession();
+ if ( sslSession != null )
+ {
+ message += "\n\nProtocol: " + sslSession.getProtocol();
+ message += "\nCipher Suite: " + sslSession.getCipherSuite();
+ }
+ MessageDialog.openInformation( Display.getDefault().getActiveShell(), title, message );
}
}
} );
@@ -482,8 +492,21 @@
if ( status.isOK() )
{
- X509Certificate[] serverCertificates = runnable.getServerCertificates();
- new CertificateInfoDialog( Display.getDefault().getActiveShell(), serverCertificates ).open();
+ try
+ {
+ SSLSession sslSession = runnable.getSslSession();
+ Certificate[] certificates = sslSession.getPeerCertificates();
+ X509Certificate[] serverCertificates = new X509Certificate[certificates.length];
+ for ( int i = 0; i < certificates.length; i++ )
+ {
+ serverCertificates[i] = ( X509Certificate ) certificates[i];
+ }
+ new CertificateInfoDialog( Display.getDefault().getActiveShell(), serverCertificates ).open();
+ }
+ catch ( SSLPeerUnverifiedException e )
+ {
+ throw new RuntimeException( e );
+ }
}
}
} );
diff --git a/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/core/DirectoryApiConnectionWrapperTest.java b/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/core/DirectoryApiConnectionWrapperTest.java
index 2509959..6616b99 100644
--- a/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/core/DirectoryApiConnectionWrapperTest.java
+++ b/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/core/DirectoryApiConnectionWrapperTest.java
@@ -57,6 +57,8 @@
import java.util.function.Function;
import javax.naming.directory.SearchControls;
+import javax.net.ssl.SSLPeerUnverifiedException;
+import javax.net.ssl.SSLSession;
import org.apache.directory.api.ldap.codec.api.LdapApiService;
import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
@@ -168,11 +170,11 @@
assertFalse( connectionWrapper.isConnected() );
- X509Certificate[] certificates = connectionWrapper.connect( monitor );
+ connectionWrapper.connect( monitor );
assertTrue( connectionWrapper.isConnected() );
assertFalse( connectionWrapper.isSecured() );
+ assertNull( connectionWrapper.getSslSession() );
assertNull( monitor.getException() );
- assertNull( certificates );
connectionWrapper.disconnect();
assertFalse( connectionWrapper.isConnected() );
@@ -194,11 +196,11 @@
assertFalse( connectionWrapper.isConnected() );
- X509Certificate[] certificates = connectionWrapper.connect( monitor );
+ connectionWrapper.connect( monitor );
assertTrue( connectionWrapper.isConnected() );
assertTrue( connectionWrapper.isSecured() );
+ assertSslSession( ldapServer );
assertNull( monitor.getException() );
- assertNotNull( certificates );
connectionWrapper.disconnect();
assertFalse( connectionWrapper.isConnected() );
@@ -219,11 +221,11 @@
assertFalse( connectionWrapper.isConnected() );
- X509Certificate[] certificates = connectionWrapper.connect( monitor );
+ connectionWrapper.connect( monitor );
assertTrue( connectionWrapper.isConnected() );
assertTrue( connectionWrapper.isSecured() );
+ assertSslSession( ldapServer );
assertNull( monitor.getException() );
- assertNotNull( certificates );
connectionWrapper.disconnect();
assertFalse( connectionWrapper.isConnected() );
@@ -268,6 +270,31 @@
}
+ private void assertSslSession( TestLdapServer ldapServer )
+ {
+ try
+ {
+ SSLSession sslSession = connectionWrapper.getSslSession();
+ assertNotNull( sslSession );
+ assertNotNull( sslSession.getProtocol() );
+ assertNotNull( sslSession.getCipherSuite() );
+ assertNotNull( sslSession.getPeerCertificates() );
+ if ( ldapServer.getType() == LdapServerType.ApacheDS )
+ {
+ assertEquals( "TLSv1.2", sslSession.getProtocol() );
+ }
+ else
+ {
+ assertEquals( "TLSv1.3", sslSession.getProtocol() );
+ }
+ }
+ catch ( SSLPeerUnverifiedException e )
+ {
+ throw new RuntimeException( e );
+ }
+ }
+
+
/**
* Test binding to the server using simple auth and no encryption.
*/
@@ -340,6 +367,7 @@
connectionWrapper.bind( monitor );
assertTrue( connectionWrapper.isConnected() );
assertTrue( connectionWrapper.isSecured() );
+ assertSslSession( ldapServer );
assertNull( monitor.getException() );
connectionWrapper.unbind();
@@ -368,6 +396,7 @@
connectionWrapper.bind( monitor );
assertTrue( connectionWrapper.isConnected() );
assertTrue( connectionWrapper.isSecured() );
+ assertSslSession( ldapServer );
assertNull( monitor.getException() );
connectionWrapper.unbind();
@@ -510,6 +539,7 @@
assertTrue( connectionWrapper.isConnected() );
assertTrue( connectionWrapper.isSecured() );
+ assertSslSession( ldapServer );
assertNull( monitor.getException() );
connectionWrapper.unbind();
@@ -568,6 +598,7 @@
assertTrue( connectionWrapper.isConnected() );
assertTrue( connectionWrapper.isSecured() );
+ assertSslSession( ldapServer );
assertNull( monitor.getException() );
connectionWrapper.unbind();
@@ -696,6 +727,7 @@
assertTrue( connectionWrapper.isConnected() );
assertTrue( connectionWrapper.isSecured() );
+ assertSslSession( ldapServer );
assertNull( monitor.getException() );
connectionWrapper.unbind();
@@ -757,6 +789,7 @@
assertTrue( connectionWrapper.isConnected() );
assertTrue( connectionWrapper.isSecured() );
+ assertSslSession( ldapServer );
assertNull( monitor.getException() );
connectionWrapper.unbind();
diff --git a/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/junit5/OpenLdapServer.java b/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/junit5/OpenLdapServer.java
index 0fd4ff6..929cfc0 100644
--- a/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/junit5/OpenLdapServer.java
+++ b/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/junit5/OpenLdapServer.java
@@ -88,7 +88,7 @@
{
if ( confidentialityRequired )
{
- setSecurityProps( 256, 256 );
+ setSecurityProps( 128, 128 );
}
else
{
diff --git a/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/junit5/TestFixture.java b/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/junit5/TestFixture.java
index eec6da0..6b04ad8 100644
--- a/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/junit5/TestFixture.java
+++ b/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/junit5/TestFixture.java
@@ -22,6 +22,7 @@
import java.net.InetAddress;
+import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -102,9 +103,9 @@
public static void skipIfKdcServerIsNotAvailable()
{
boolean available = false;
- try
+ try(Socket s = new Socket(KDC_HOST, KDC_PORT))
{
- available = InetAddress.getByName( KDC_HOST ).isReachable( 3 );
+ available = true;
}
catch ( Exception e )
{
diff --git a/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/junit5/TestLdapServer.java b/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/junit5/TestLdapServer.java
index f0fe345..bf3290c 100644
--- a/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/junit5/TestLdapServer.java
+++ b/tests/test.integration.core/src/main/java/org/apache/directory/studio/test/integration/junit5/TestLdapServer.java
@@ -91,14 +91,14 @@
}
- public LdapConnection openConnection() throws LdapException
+ public LdapNetworkConnection openConnection() throws LdapException
{
LdapConnectionConfig config = new LdapConnectionConfig();
config.setLdapHost( host );
config.setLdapPort( port );
config.setUseTls( true );
config.setTrustManagers( new NoVerificationTrustManager() );
- LdapConnection connection = new LdapNetworkConnection( config );
+ LdapNetworkConnection connection = new LdapNetworkConnection( config );
connection.connect();
return connection;
}
diff --git a/tests/test.integration.core/src/main/resources/org/apache/directory/studio/test/integration/junit5/OpenLdapConfig.ldif b/tests/test.integration.core/src/main/resources/org/apache/directory/studio/test/integration/junit5/OpenLdapConfig.ldif
index c9cdc8f..1cf98b3 100644
--- a/tests/test.integration.core/src/main/resources/org/apache/directory/studio/test/integration/junit5/OpenLdapConfig.ldif
+++ b/tests/test.integration.core/src/main/resources/org/apache/directory/studio/test/integration/junit5/OpenLdapConfig.ldif
@@ -42,4 +42,7 @@
replace: olcSaslSecProps
olcSaslSecProps: noplain,noanonymous,minssf=0
-
+replace: olcTLSCipherSuite
+olcTLSCipherSuite: SECURE256:+SECURE128:-VERS-TLS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:-RSA:-DHE-DSS:-CAMELLIA-128-CBC:-CAMELLIA-256-CBC
+-
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/CertificateValidationTest.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/CertificateValidationTest.java
index 54b555c..094e25f 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/CertificateValidationTest.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/CertificateValidationTest.java
@@ -61,6 +61,7 @@
import org.apache.directory.studio.test.integration.ui.bots.CertificateValidationPreferencePageBot;
import org.apache.directory.studio.test.integration.ui.bots.CertificateViewerDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.CheckAuthenticationDialogBot;
+import org.apache.directory.studio.test.integration.ui.bots.DialogBot.CheckResponse;
import org.apache.directory.studio.test.integration.ui.bots.ErrorDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.NewConnectionWizardBot;
import org.apache.directory.studio.test.integration.ui.bots.PreferencesBot;
@@ -323,8 +324,8 @@
wizardBotWithLdaps( server, false );
// check the certificate, should be OK
- String result = wizardBot.clickCheckNetworkParameterButton();
- assertNull( result, "Expected OK, valid and trusted certificate" );
+ CheckResponse checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertFalse( checkResponse.isError(), "Expected OK, valid and trusted certificate" );
// view the certificate
CertificateViewerDialogBot certificateViewerBot = wizardBot.clickViewCertificateButton();
@@ -499,8 +500,8 @@
wizardBot.selectStartTlsEncryption();
// check the certificate, should be OK
- String result = wizardBot.clickCheckNetworkParameterButton();
- assertNull( result, "Expected OK, valid and trusted certificate" );
+ CheckResponse checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertFalse( checkResponse.isError(), "Expected OK, valid and trusted certificate" );
// view the certificate
CertificateViewerDialogBot certificateViewerBot = wizardBot.clickViewCertificateButton();
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewConnectionWizardTest.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewConnectionWizardTest.java
index 43f21df..24bb67d 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewConnectionWizardTest.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewConnectionWizardTest.java
@@ -22,6 +22,7 @@
import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -52,6 +53,7 @@
import org.apache.directory.studio.test.integration.junit5.TestFixture;
import org.apache.directory.studio.test.integration.junit5.TestLdapServer;
import org.apache.directory.studio.test.integration.ui.bots.CertificateTrustDialogBot;
+import org.apache.directory.studio.test.integration.ui.bots.DialogBot.CheckResponse;
import org.apache.directory.studio.test.integration.ui.bots.ErrorDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.NewConnectionWizardBot;
import org.apache.mina.util.AvailablePortFinder;
@@ -388,15 +390,19 @@
wizardBot.typePort( server.getPort() );
// click "Check Network Parameter" button
- String result = wizardBot.clickCheckNetworkParameterButton();
- assertNull( result, "Expected OK" );
+ CheckResponse checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertFalse( checkResponse.isError(), "Expected OK" );
+ assertThat( checkResponse.getMessage(), not( containsString( "Protocol" ) ) );
+ assertThat( checkResponse.getMessage(), not( containsString( "Cipher Suite" ) ) );
// enter IPv4 address as host
wizardBot.typeHost( InetAddress.getByName( server.getHost() ).getHostAddress() );
// click "Check Network Parameter" button
- result = wizardBot.clickCheckNetworkParameterButton();
- assertNull( result, "Expected OK" );
+ checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertFalse( checkResponse.isError(), "Expected OK" );
+ assertThat( checkResponse.getMessage(), not( containsString( "Protocol" ) ) );
+ assertThat( checkResponse.getMessage(), not( containsString( "Cipher Suite" ) ) );
// enter hostname as host again
wizardBot.typeHost( server.getHost() );
@@ -409,7 +415,7 @@
wizardBot.typePassword( server.getAdminPassword() );
// click "Check Network Parameter" button
- result = wizardBot.clickCheckAuthenticationButton();
+ String result = wizardBot.clickCheckAuthenticationButton();
assertNull( result, "Expected OK" );
finishAndAssertConnection( server, EncryptionMethod.NONE, AuthenticationMethod.SIMPLE,
@@ -1062,15 +1068,18 @@
// Invalid port
wizardBot.typePort( getInvalidPort() );
- String result = wizardBot.clickCheckNetworkParameterButton();
- assertThat( result, containsString( "The connection failed" ) );
+ CheckResponse checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertTrue( checkResponse.isError() );
+ assertThat( checkResponse.getMessage(), containsString( "The connection failed" ) );
// Invalid host
String hostname = getInvalidHostName();
wizardBot.typeHost( hostname );
- result = wizardBot.clickCheckNetworkParameterButton();
- assertThat( result, containsString( "The connection failed" ) );
- assertThat( "Unknown host name must occur in error message", result, containsString( hostname ) );
+ checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertTrue( checkResponse.isError() );
+ assertThat( checkResponse.getMessage(), containsString( "The connection failed" ) );
+ assertThat( "Unknown host name must occur in error message", checkResponse.getMessage(),
+ containsString( hostname ) );
wizardBot.clickCancelButton();
}
@@ -1085,20 +1094,24 @@
// Invalid port
wizardBot.typePort( getInvalidPort() );
- String result = wizardBot.clickCheckNetworkParameterButton();
- assertThat( result, containsString( "The connection failed" ) );
+ CheckResponse checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertTrue( checkResponse.isError() );
+ assertThat( checkResponse.getMessage(), containsString( "The connection failed" ) );
// Non ldaps port
wizardBot.typePort( server.getPort() );
- result = wizardBot.clickCheckNetworkParameterButton();
- assertThat( result, containsString( "The connection failed" ) );
+ checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertTrue( checkResponse.isError() );
+ assertThat( checkResponse.getMessage(), containsString( "The connection failed" ) );
// Invalid host
String hostname = getInvalidHostName();
wizardBot.typeHost( hostname );
- result = wizardBot.clickCheckNetworkParameterButton();
- assertThat( result, containsString( "The connection failed" ) );
- assertThat( "Unknown host name must occur in error message", result, containsString( hostname ) );
+ checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertTrue( checkResponse.isError() );
+ assertThat( checkResponse.getMessage(), containsString( "The connection failed" ) );
+ assertThat( "Unknown host name must occur in error message", checkResponse.getMessage(),
+ containsString( hostname ) );
wizardBot.clickCancelButton();
}
@@ -1113,20 +1126,24 @@
// Invalid port
wizardBot.typePort( getInvalidPort() );
- String result = wizardBot.clickCheckNetworkParameterButton();
- assertThat( result, containsString( "The connection failed" ) );
+ CheckResponse checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertTrue( checkResponse.isError() );
+ assertThat( checkResponse.getMessage(), containsString( "The connection failed" ) );
// Ldaps port
wizardBot.typePort( server.getPortSSL() );
- result = wizardBot.clickCheckNetworkParameterButton();
- assertThat( result, containsString( "The connection failed" ) );
+ assertTrue( checkResponse.isError() );
+ checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertThat( checkResponse.getMessage(), containsString( "The connection failed" ) );
// Invalid host
String hostname = getInvalidHostName();
wizardBot.typeHost( hostname );
- result = wizardBot.clickCheckNetworkParameterButton();
- assertThat( result, containsString( "The connection failed" ) );
- assertThat( "Unknown host name must occur in error message", result, containsString( hostname ) );
+ checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertTrue( checkResponse.isError() );
+ assertThat( checkResponse.getMessage(), containsString( "The connection failed" ) );
+ assertThat( "Unknown host name must occur in error message", checkResponse.getMessage(),
+ containsString( hostname ) );
wizardBot.clickCancelButton();
}
@@ -1155,6 +1172,11 @@
trustDialog.selectTrustPermanent();
trustDialog.clickOkButton();
bot.button( "OK" ).click();
+
+ CheckResponse checkResponse = wizardBot.clickCheckNetworkParameterButton();
+ assertFalse( checkResponse.isError() );
+ assertThat( checkResponse.getMessage(), containsString( "Protocol" ) );
+ assertThat( checkResponse.getMessage(), containsString( "Cipher Suite" ) );
}
wizardBot.clickNextButton();
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/DialogBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/DialogBot.java
index 00a5781..fda9337 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/DialogBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/DialogBot.java
@@ -138,7 +138,7 @@
}
- protected String clickCheckButton( final String label, final String title )
+ protected CheckResponse clickCheckButton( final String label, final String title )
{
SWTBotShell parentShell = bot.activeShell();
SWTBotShell shell = BotUtils.shell( new Runnable()
@@ -151,21 +151,54 @@
String shellText = shell.getText();
// label(0) may be the image
- String labelText = bot.label( 0 ).getText();
- if ( StringUtils.isBlank( labelText ) )
+ String messageText = bot.label( 0 ).getText();
+ if ( StringUtils.isBlank( messageText ) )
{
- labelText = bot.label( 1 ).getText();
+ messageText = bot.label( 1 ).getText();
}
bot.button( "OK" ).click();
parentShell.activate();
if ( shellText.equals( title ) )
{
- return null;
+ return new CheckResponse( false, shellText, messageText );
}
else
{
- return labelText;
+ return new CheckResponse( true, shellText, messageText );
}
}
+
+ public static class CheckResponse
+ {
+ boolean isError;
+ String title;
+ String message;
+
+ public CheckResponse( boolean isError, String title, String message )
+ {
+ this.isError = isError;
+ this.title = title;
+ this.message = message;
+ }
+
+
+ public boolean isError()
+ {
+ return isError;
+ }
+
+
+ public String getTitle()
+ {
+ return title;
+ }
+
+
+ public String getMessage()
+ {
+ return message;
+ }
+
+ }
}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewConnectionWizardBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewConnectionWizardBot.java
index 029b6c1..1591c4a 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewConnectionWizardBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewConnectionWizardBot.java
@@ -434,8 +434,9 @@
*
* @return null if the OK dialog pops up, the error message if the error dialog pops up
*/
- public String clickCheckNetworkParameterButton()
+ public CheckResponse clickCheckNetworkParameterButton()
{
+ activate();
return clickCheckButton( CHECK_NETWORK_PARAMETER, CHECK_NETWORK_PARAMETER );
}
@@ -458,7 +459,8 @@
*/
public String clickCheckAuthenticationButton()
{
- return clickCheckButton( CHECK_AUTHENTICATION, CHECK_AUTHENTICATION );
+ CheckResponse checkResponse = clickCheckButton( CHECK_AUTHENTICATION, CHECK_AUTHENTICATION );
+ return checkResponse.isError() ? checkResponse.getMessage() : null;
}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/PasswordEditorDialogBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/PasswordEditorDialogBot.java
index acc2464..0a0e3d0 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/PasswordEditorDialogBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/PasswordEditorDialogBot.java
@@ -103,13 +103,15 @@
public String clickVerifyButton()
{
- return clickCheckButton( "Verify", "Password Verification" );
+ CheckResponse checkResponse = clickCheckButton( "Verify", "Password Verification" );
+ return checkResponse.isError() ? checkResponse.getMessage() : null;
}
public String clickBindButton()
{
- return clickCheckButton( "Bind", "Check Authentication" );
+ CheckResponse checkResponse = clickCheckButton( "Bind", "Check Authentication" );
+ return checkResponse.isError() ? checkResponse.getMessage() : null;
}
}