You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2016/11/12 22:57:47 UTC

svn commit: r1769434 - in /directory/studio/trunk/tests/test.integration.ui/src/main: java/org/apache/directory/studio/test/integration/ui/ java/org/apache/directory/studio/test/integration/ui/bots/ resources/org/apache/directory/studio/test/integratio...

Author: seelmann
Date: Sat Nov 12 22:57:47 2016
New Revision: 1769434

URL: http://svn.apache.org/viewvc?rev=1769434&view=rev
Log:
Add first Kerberos/GSSAPI authentication test

Added:
    directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/GssApiTest.java   (with props)
    directory/studio/trunk/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/GssApiTest.ldif
Modified:
    directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ApacheDSPluginTest.java
    directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/CertificateValidationTest.java
    directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/ApacheDSConfigurationEditorBot.java
    directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewConnectionWizardBot.java

Modified: directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ApacheDSPluginTest.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ApacheDSPluginTest.java?rev=1769434&r1=1769433&r2=1769434&view=diff
==============================================================================
--- directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ApacheDSPluginTest.java (original)
+++ directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ApacheDSPluginTest.java Sat Nov 12 22:57:47 2016
@@ -246,7 +246,7 @@ public class ApacheDSPluginTest
     {
         ApacheDSConfigurationEditorBot editorBot = serversViewBot.openConfigurationEditor( serverName );
 
-        editorBot.setAvailableLdapAndLdapsPort();
+        editorBot.setAvailablePorts();
 
         editorBot.save();
         editorBot.close();
@@ -348,7 +348,7 @@ public class ApacheDSPluginTest
         int oldLdapsPort = remoteEditorBot.getLdapsPort();
 
         // Set new ports
-        remoteEditorBot.setAvailableLdapAndLdapsPort();
+        remoteEditorBot.setAvailablePorts();
         int newLdapPort = remoteEditorBot.getLdapPort();
         int newLdapsPort = remoteEditorBot.getLdapsPort();
 

Modified: directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/CertificateValidationTest.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/CertificateValidationTest.java?rev=1769434&r1=1769433&r2=1769434&view=diff
==============================================================================
--- directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/CertificateValidationTest.java (original)
+++ directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/CertificateValidationTest.java Sat Nov 12 22:57:47 2016
@@ -776,7 +776,7 @@ public class CertificateValidationTest
     {
         ApacheDSConfigurationEditorBot editorBot = serversViewBot.openConfigurationEditor( serverName );
 
-        editorBot.setAvailableLdapAndLdapsPort();
+        editorBot.setAvailablePorts();
         ldapPort = editorBot.getLdapPort();
         ldapsPort = editorBot.getLdapsPort();
 

Added: directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/GssApiTest.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/GssApiTest.java?rev=1769434&view=auto
==============================================================================
--- directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/GssApiTest.java (added)
+++ directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/GssApiTest.java Sat Nov 12 22:57:47 2016
@@ -0,0 +1,236 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+
+package org.apache.directory.studio.test.integration.ui;
+
+
+import static org.apache.directory.studio.test.integration.ui.Constants.LOCALHOST;
+import static org.junit.Assert.assertNull;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+
+import org.apache.directory.api.util.FileUtils;
+import org.apache.directory.api.util.IOUtils;
+import org.apache.directory.studio.test.integration.ui.bots.ApacheDSConfigurationEditorBot;
+import org.apache.directory.studio.test.integration.ui.bots.ApacheDSServersViewBot;
+import org.apache.directory.studio.test.integration.ui.bots.BrowserViewBot;
+import org.apache.directory.studio.test.integration.ui.bots.ConnectionsViewBot;
+import org.apache.directory.studio.test.integration.ui.bots.DeleteDialogBot;
+import org.apache.directory.studio.test.integration.ui.bots.ImportWizardBot;
+import org.apache.directory.studio.test.integration.ui.bots.NewApacheDSServerWizardBot;
+import org.apache.directory.studio.test.integration.ui.bots.NewConnectionWizardBot;
+import org.apache.directory.studio.test.integration.ui.bots.StudioBot;
+import org.apache.directory.studio.test.integration.ui.bots.utils.FrameworkRunnerWithScreenshotCaptureListener;
+import org.eclipse.core.runtime.Platform;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+import org.junit.runner.RunWith;
+
+
+/**
+ * Tests secure connection handling.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+@RunWith(FrameworkRunnerWithScreenshotCaptureListener.class)
+public class GssApiTest
+{
+    private static final String serverName = "GssApiTest";
+
+    @Rule
+    public TestName name = new TestName();
+
+    private static int ldapPort;
+    private static int kdcPort;
+
+    private static StudioBot studioBot;
+    private static ApacheDSServersViewBot serversViewBot;
+    private static ConnectionsViewBot connectionsViewBot;
+
+
+    @BeforeClass
+    public static void setUpClass() throws Exception
+    {
+        studioBot = new StudioBot();
+        studioBot.resetLdapPerspective();
+        serversViewBot = studioBot.getApacheDSServersViewBot();
+        connectionsViewBot = studioBot.getConnectionView();
+
+        // ErrorDialog.AUTOMATED_MODE = false;
+    }
+
+
+    @AfterClass
+    public static void tearDownClass() throws Exception
+    {
+        deleteServer( serverName );
+    }
+
+
+    @Before
+    public void setUp() throws Exception
+    {
+        studioBot.resetLdapPerspective();
+    }
+
+
+    @After
+    public void tearDown() throws Exception
+    {
+        connectionsViewBot.deleteTestConnections();
+
+        // stop ApacheDS
+        serversViewBot.stopServer( serverName );
+        serversViewBot.waitForServerStop( serverName );
+    }
+
+
+    private String getConnectionName()
+    {
+        return "GssApiTest." + name.getMethodName();
+    }
+
+
+    @Test
+    public void testGssApiObtainTgtAndObtainServiceTicket() throws Exception
+    {
+        // create the server
+        createServer( serverName );
+
+        // configure ApacheDS and KDC server
+        configureApacheDS( serverName );
+
+        // start ApacheDS
+        serversViewBot.runServer( serverName );
+        serversViewBot.waitForServerStart( serverName );
+
+        // import KDC data
+        connectionsViewBot.createTestConnection( "GssApiTest", ldapPort );
+        importData();
+
+        // restart ApacheDS
+        // serversViewBot.stopServer( serverName );
+        // serversViewBot.waitForServerStop( serverName );
+        // serversViewBot.runServer( serverName );
+        // serversViewBot.waitForServerStart( serverName );
+
+        // connect with GSSAPI authentication
+        NewConnectionWizardBot wizardBot = connectionsViewBot.openNewConnectionWizard();
+        wizardBot.typeConnectionName( getConnectionName() );
+        wizardBot.typeHost( LOCALHOST );
+        wizardBot.typePort( ldapPort );
+        wizardBot.clickNextButton();
+        wizardBot.selectGssApiAuthentication();
+        wizardBot.selectObtainTgtFromKdc();
+        wizardBot.typeUser( "hnelson" );
+        wizardBot.typePassword( "secret" );
+        wizardBot.selectUseManualConfiguration();
+        wizardBot.typeKerberosRealm( "EXAMPLE.COM" );
+        wizardBot.typeKdcHost( LOCALHOST );
+        wizardBot.typeKdcPort( kdcPort );
+
+        // check the connection
+        String result = wizardBot.clickCheckAuthenticationButton();
+        assertNull( "Expected OK", result );
+
+        wizardBot.clickCancelButton();
+    }
+
+
+    private static void createServer( String serverName )
+    {
+        // Showing view
+        serversViewBot.show();
+
+        // Opening wizard
+        NewApacheDSServerWizardBot wizardBot = serversViewBot.openNewServerWizard();
+
+        // Filling fields of the wizard
+        wizardBot.selectApacheDS200();
+        wizardBot.typeServerName( serverName );
+
+        // Closing wizard
+        wizardBot.clickFinishButton();
+        serversViewBot.waitForServer( serverName );
+    }
+
+
+    private static void configureApacheDS( String serverName ) throws Exception
+    {
+        ApacheDSConfigurationEditorBot editorBot = serversViewBot.openConfigurationEditor( serverName );
+
+        editorBot.enableKerberosServer();
+
+        editorBot.setAvailablePorts();
+        ldapPort = editorBot.getLdapPort();
+        kdcPort = editorBot.getKerberosPort();
+
+        editorBot.setKdcRealm( "EXAMPLE.COM" );
+        editorBot.setKdcSearchBase( "dc=security,dc=example,dc=com" );
+
+        editorBot.setSaslHost( Constants.LOCALHOST );
+        editorBot.setSaslPrincipal( "ldap/" + Constants.LOCALHOST + "@EXAMPLE.COM" );
+        editorBot.setSaslSearchBase( "dc=security,dc=example,dc=com" );
+
+        editorBot.save();
+        editorBot.close();
+    }
+
+
+    private void importData() throws IOException
+    {
+        URL url = Platform.getInstanceLocation().getURL();
+        String destFile = url.getFile() + "GssApiTest.ldif";
+        InputStream is = getClass().getResourceAsStream( "GssApiTest.ldif" );
+        String ldifContent = IOUtils.toString( is, StandardCharsets.UTF_8 );
+        ldifContent = ldifContent.replace( "HOSTNAME", Constants.LOCALHOST );
+        FileUtils.writeStringToFile( new File( destFile ), ldifContent, StandardCharsets.UTF_8, false );
+
+        BrowserViewBot browserViewBot = studioBot.getBrowserView();
+        browserViewBot.selectEntry( "DIT", "Root DSE", "dc=example,dc=com" );
+        ImportWizardBot importWizardBot = browserViewBot.openImportLdifWizard();
+        importWizardBot.typeFile( destFile );
+        importWizardBot.clickFinishButton();
+        browserViewBot.waitForEntry( "DIT", "Root DSE", "dc=example,dc=com", "dc=security" );
+    }
+
+
+    private static void deleteServer( String serverName )
+    {
+        // Stopping the server
+        serversViewBot.stopServer( serverName );
+        serversViewBot.waitForServerStop( serverName );
+
+        // Deleting the server
+        DeleteDialogBot deleteDialogBot = serversViewBot.openDeleteServerDialog();
+        deleteDialogBot.clickOkButton();
+    }
+
+}

Propchange: directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/GssApiTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/ApacheDSConfigurationEditorBot.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/ApacheDSConfigurationEditorBot.java?rev=1769434&r1=1769433&r2=1769434&view=diff
==============================================================================
--- directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/ApacheDSConfigurationEditorBot.java (original)
+++ directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/ApacheDSConfigurationEditorBot.java Sat Nov 12 22:57:47 2016
@@ -55,51 +55,142 @@ public class ApacheDSConfigurationEditor
     }
 
 
-    public void setAvailableLdapAndLdapsPort()
+    public void setAvailablePorts()
     {
-        int ldapPort = AvailablePortFinder.getNextAvailable( 1024 );
-        setLdapPort( ldapPort );
-        int ldapsPort = AvailablePortFinder.getNextAvailable( getLdapPort() + 1 );
-        setLdapsPort( ldapsPort );
+        int port = 1023;
+
+        if ( isLdapServerEnabled() )
+        {
+            port = AvailablePortFinder.getNextAvailable( port + 1 );
+            setLdapPort( port );
+        }
+        if ( isLdapsServerEnabled() )
+        {
+            port = AvailablePortFinder.getNextAvailable( port + 1 );
+            setLdapsPort( port );
+        }
+        if ( isKerberosServerEnabled() )
+        {
+            port = AvailablePortFinder.getNextAvailable( port + 1 );
+            setKerberosPort( port );
+        }
+
+    }
+
+
+    public boolean isLdapServerEnabled()
+    {
+        activateLdapLdapsServersPage();
+        return editor.bot().checkBox( 0 ).isChecked();
     }
 
 
     public void setLdapPort( int port )
     {
-        editor.activatePage( "LDAP/LDAPS Servers" );
+        activateLdapLdapsServersPage();
         editor.bot().text( 0 ).setText( "" + port );
     }
 
 
     public int getLdapPort()
     {
-        editor.activatePage( "LDAP/LDAPS Servers" );
+        activateLdapLdapsServersPage();
         return Integer.parseInt( editor.bot().text( 0 ).getText() );
     }
 
 
+    public boolean isLdapsServerEnabled()
+    {
+        activateLdapLdapsServersPage();
+        return editor.bot().checkBox( 1 ).isChecked();
+    }
+
+
     public void setLdapsPort( int port )
     {
-        editor.activatePage( "LDAP/LDAPS Servers" );
+        activateLdapLdapsServersPage();
         editor.bot().text( 4 ).setText( "" + port );
     }
 
 
     public int getLdapsPort()
     {
-        editor.activatePage( "LDAP/LDAPS Servers" );
+        activateLdapLdapsServersPage();
         return Integer.parseInt( editor.bot().text( 4 ).getText() );
     }
 
 
     public void setKeystore( String keyStoreFilePath, String keyStorePassword )
     {
-        editor.activatePage( "LDAP/LDAPS Servers" );
+        activateLdapLdapsServersPage();
         editor.bot().text( 11 ).setText( keyStoreFilePath );
         editor.bot().text( 12 ).setText( keyStorePassword );
     }
 
 
+    public void setSaslHost( String saslHost )
+    {
+        activateLdapLdapsServersPage();
+        editor.bot().text( 17 ).setText( saslHost );
+    }
+
+
+    public void setSaslPrincipal( String saslPrincipal )
+    {
+        activateLdapLdapsServersPage();
+        editor.bot().text( 18 ).setText( saslPrincipal );
+    }
+
+
+    public void setSaslSearchBase( String saslSearchBase )
+    {
+        activateLdapLdapsServersPage();
+        editor.bot().text( 19 ).setText( saslSearchBase );
+    }
+
+
+    public void enableKerberosServer()
+    {
+        activateKerberosServerPage();
+        editor.bot().checkBox( 0 ).select();
+    }
+
+
+    public boolean isKerberosServerEnabled()
+    {
+        activateKerberosServerPage();
+        return editor.bot().checkBox( 0 ).isChecked();
+    }
+
+
+    public void setKerberosPort( int port )
+    {
+        activateKerberosServerPage();
+        editor.bot().text( 0 ).setText( "" + port );
+    }
+
+
+    public int getKerberosPort()
+    {
+        activateKerberosServerPage();
+        return Integer.parseInt( editor.bot().text( 0 ).getText() );
+    }
+
+
+    public void setKdcRealm( String kdcRealm )
+    {
+        activateKerberosServerPage();
+        editor.bot().text( 4 ).setText( kdcRealm );
+    }
+
+
+    public void setKdcSearchBase( String kdcSearchBase )
+    {
+        activateKerberosServerPage();
+        editor.bot().text( 5 ).setText( kdcSearchBase );
+    }
+
+
     public void save()
     {
         editor.save();
@@ -112,4 +203,15 @@ public class ApacheDSConfigurationEditor
     }
 
 
+    private void activateLdapLdapsServersPage()
+    {
+        editor.activatePage( "LDAP/LDAPS Servers" );
+    }
+
+
+    private void activateKerberosServerPage()
+    {
+        editor.activatePage( "Kerberos Server" );
+    }
+
 }

Modified: directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewConnectionWizardBot.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewConnectionWizardBot.java?rev=1769434&r1=1769433&r2=1769434&view=diff
==============================================================================
--- directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewConnectionWizardBot.java (original)
+++ directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewConnectionWizardBot.java Sat Nov 12 22:57:47 2016
@@ -303,18 +303,36 @@ public class NewConnectionWizardBot exte
     }
 
 
+    public void typeKerberosRealm( String realm )
+    {
+        bot.textWithLabel( KERBEROS_REALM ).setText( realm );
+    }
+
+
     public boolean isKdcHostEnabled()
     {
         return bot.textWithLabel( KDC_HOST ).isEnabled();
     }
 
 
+    public void typeKdcHost( String host )
+    {
+        bot.textWithLabel( KDC_HOST ).setText( host );
+    }
+
+
     public boolean isKdcPortEnabled()
     {
         return bot.textWithLabel( KDC_PORT ).isEnabled();
     }
 
 
+    public void typeKdcPort( int port )
+    {
+        bot.textWithLabel( KDC_PORT ).setText( Integer.toString( port ) );
+    }
+
+
     public boolean isGetBaseDnsFromRootDseEnabled()
     {
         return bot.checkBox( GET_BASE_DNS_FROM_ROOT_DSE ).isEnabled();

Added: directory/studio/trunk/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/GssApiTest.ldif
URL: http://svn.apache.org/viewvc/directory/studio/trunk/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/GssApiTest.ldif?rev=1769434&view=auto
==============================================================================
--- directory/studio/trunk/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/GssApiTest.ldif (added)
+++ directory/studio/trunk/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/GssApiTest.ldif Sat Nov 12 22:57:47 2016
@@ -0,0 +1,52 @@
+dn: dc=security,dc=example,dc=com
+objectClass: top
+objectClass: domain
+dc: security
+
+dn: ou=services,dc=security,dc=example,dc=com
+objectClass: top
+objectClass: organizationalUnit
+ou: services
+
+dn: ou=users,dc=security,dc=example,dc=com
+objectClass: top
+objectClass: organizationalUnit
+ou: users
+
+dn: uid=hnelson,ou=users,dc=security,dc=example,dc=com
+objectClass: top
+objectClass: krb5KDCEntry
+objectClass: inetOrgPerson
+objectClass: krb5Principal
+objectClass: person
+objectClass: organizationalPerson
+cn: Horatio Nelson
+krb5KeyVersionNumber: 1
+krb5PrincipalName: hnelson@EXAMPLE.COM
+sn: Nelson
+uid: hnelson
+userPassword: secret
+
+dn: uid=ldap,ou=services,dc=security,dc=example,dc=com
+objectClass: top
+objectClass: organizationalUnit
+objectClass: krb5KDCEntry
+objectClass: uidObject
+objectClass: krb5Principal
+krb5KeyVersionNumber: 0
+krb5PrincipalName: ldap/HOSTNAME@EXAMPLE.COM
+uid: ldap
+userPassword: randomKey
+ou: ldap
+
+dn: uid=krbtgt,ou=services,dc=security,dc=example,dc=com
+objectClass: top
+objectClass: organizationalUnit
+objectClass: krb5KDCEntry
+objectClass: uidObject
+objectClass: krb5Principal
+krb5KeyVersionNumber: 0
+krb5PrincipalName: krbtgt/EXAMPLE.COM@EXAMPLE.COM
+uid: krbtgt
+userPassword:: randomkey
+ou: krbtgt