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/02/22 17:26:53 UTC
svn commit: r1731682 - in
/directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui:
./ bots/
Author: seelmann
Date: Mon Feb 22 16:26:52 2016
New Revision: 1731682
URL: http://svn.apache.org/viewvc?rev=1731682&view=rev
Log:
DIRSTUDIO-738: Add support for modular crypt format password
* Add UI tests
Added:
directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/PasswordEditorDialogBot.java (with props)
Modified:
directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/EntryEditorTest.java
directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/DialogBot.java
directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorBot.java
directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorWidgetBot.java
directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.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/EntryEditorTest.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/EntryEditorTest.java?rev=1731682&r1=1731681&r2=1731682&view=diff
==============================================================================
--- directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/EntryEditorTest.java (original)
+++ directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/EntryEditorTest.java Mon Feb 22 16:26:52 2016
@@ -21,8 +21,11 @@
package org.apache.directory.studio.test.integration.ui;
+import static org.hamcrest.CoreMatchers.startsWith;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.apache.commons.lang.StringUtils;
@@ -30,8 +33,11 @@ import org.apache.directory.server.annot
import org.apache.directory.server.annotations.CreateTransport;
import org.apache.directory.server.core.annotations.ApplyLdifFiles;
import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
+import org.apache.directory.api.ldap.model.constants.LdapSecurityConstants;
import org.apache.directory.api.ldap.model.entry.Entry;
import org.apache.directory.api.ldap.model.name.Dn;
+import org.apache.directory.api.ldap.model.password.PasswordUtil;
+import org.apache.directory.api.util.Strings;
import org.apache.directory.studio.ldapbrowser.core.BrowserCoreMessages;
import org.apache.directory.studio.test.integration.ui.bots.BrowserViewBot;
import org.apache.directory.studio.test.integration.ui.bots.ConnectionsViewBot;
@@ -39,6 +45,7 @@ import org.apache.directory.studio.test.
import org.apache.directory.studio.test.integration.ui.bots.EntryEditorBot;
import org.apache.directory.studio.test.integration.ui.bots.ModificationLogsViewBot;
import org.apache.directory.studio.test.integration.ui.bots.NewAttributeWizardBot;
+import org.apache.directory.studio.test.integration.ui.bots.PasswordEditorDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.SelectDnDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.StudioBot;
import org.apache.directory.studio.test.integration.ui.bots.utils.FrameworkRunnerWithScreenshotCaptureListener;
@@ -217,7 +224,7 @@ public class EntryEditorTest extends Abs
* the exception
*/
@Test
- public void testCopyPasteIn() throws Exception
+ public void testCopyPaste() throws Exception
{
browserViewBot.selectEntry( "DIT", "Root DSE", "ou=system", "ou=users", "cn=Barbara Jensen" );
@@ -248,4 +255,99 @@ public class EntryEditorTest extends Abs
assertTrue( entry.contains( "uid", "bjensen" ) );
}
+
+ /**
+ * DIRSTUDIO-738: Add support for modular crypt format password
+ */
+ @Test
+ public void testPasswordValueEditor() throws Exception
+ {
+ browserViewBot.selectEntry( "DIT", "Root DSE", "ou=system", "ou=users", "cn=Barbara Jensen" );
+
+ EntryEditorBot entryEditorBot = studioBot.getEntryEditorBot( "cn=Barbara Jensen,ou=users,ou=system" );
+ entryEditorBot.activate();
+ String dn = entryEditorBot.getDnText();
+ assertEquals( "DN: cn=Barbara Jensen,ou=users,ou=system", dn );
+ assertEquals( 8, entryEditorBot.getAttributeValues().size() );
+ assertEquals( "", modificationLogsViewBot.getModificationLogsText() );
+
+ // add userPassword attribute
+ entryEditorBot.activate();
+ NewAttributeWizardBot wizardBot = entryEditorBot.openNewAttributeWizard();
+ assertTrue( wizardBot.isVisible() );
+ wizardBot.typeAttributeType( "userPassword" );
+ PasswordEditorDialogBot pwdEditorBot = wizardBot.clickFinishButtonExpectingPasswordEditor();
+ assertTrue( pwdEditorBot.isVisible() );
+
+ pwdEditorBot.setNewPassword1( "secret" );
+ pwdEditorBot.setNewPassword2( "secret" );
+ pwdEditorBot.setShowNewPasswordDetails( true );
+
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_MD5, PasswordUtil.MD5_LENGTH, 0 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_SMD5, PasswordUtil.MD5_LENGTH, 8 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_SHA, PasswordUtil.SHA1_LENGTH, 0 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_SSHA, PasswordUtil.SHA1_LENGTH, 8 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_SHA256, PasswordUtil.SHA256_LENGTH, 0 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_SSHA256, PasswordUtil.SHA256_LENGTH, 8 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_SHA384, PasswordUtil.SHA384_LENGTH, 0 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_SSHA384, PasswordUtil.SHA384_LENGTH, 8 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_SHA512, PasswordUtil.SHA512_LENGTH, 0 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_SSHA512, PasswordUtil.SHA512_LENGTH, 8 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_PKCS5S2, PasswordUtil.PKCS5S2_LENGTH, 16 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_CRYPT, PasswordUtil.CRYPT_LENGTH, 2 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_CRYPT_MD5, PasswordUtil.CRYPT_MD5_LENGTH, 8 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_CRYPT_SHA256,
+ PasswordUtil.CRYPT_SHA256_LENGTH, 8 );
+ assertHashMethod( pwdEditorBot, LdapSecurityConstants.HASH_METHOD_CRYPT_SHA512,
+ PasswordUtil.CRYPT_SHA512_LENGTH, 8 );
+
+ pwdEditorBot.clickOkButton();
+
+ // assert value after saved and reloaded from server
+ SWTUtils.sleep( 1000 );
+ System.out.println( entryEditorBot.getAttributeValues() );
+ assertTrue( entryEditorBot.getAttributeValues().contains( "userPassword: CRYPT-SHA-512 hashed password" ) );
+
+ // verify and bind with the correct password
+ pwdEditorBot = entryEditorBot.editValueExpectingPasswordEditor( "userPassword",
+ "CRYPT-SHA-512 hashed password" );
+ pwdEditorBot.activateCurrentPasswordTab();
+ pwdEditorBot.setVerifyPassword( "secret" );
+ assertNull( pwdEditorBot.clickVerifyButton() );
+ assertNull( pwdEditorBot.clickBindButton() );
+
+ // verify and bind with the wrong password
+ pwdEditorBot = entryEditorBot.editValueExpectingPasswordEditor( "userPassword",
+ "CRYPT-SHA-512 hashed password" );
+ pwdEditorBot.activateCurrentPasswordTab();
+ pwdEditorBot.setVerifyPassword( "Wrong Password" );
+ assertEquals( "Password verification failed", pwdEditorBot.clickVerifyButton() );
+ assertThat( pwdEditorBot.clickBindButton(), startsWith( "The authentication failed" ) );
+ }
+
+
+ private void assertHashMethod( PasswordEditorDialogBot passwordEditorBot, LdapSecurityConstants hashMethod,
+ int passwordLength, int saltLength ) throws Exception
+ {
+ passwordEditorBot.selectHashMethod( hashMethod );
+
+ String preview = passwordEditorBot.getPasswordPreview();
+ assertThat( preview, startsWith( "{" + Strings.upperCase( hashMethod.getPrefix() ) + "}" ) );
+
+ String passwordHex = passwordEditorBot.getPasswordHex();
+ assertEquals( passwordLength * 2, passwordHex.length() );
+ assertTrue( passwordHex.matches( "[0-9a-f]{" + ( passwordLength * 2 ) + "}" ) );
+
+ String saltHex = passwordEditorBot.getSaltHex();
+ if ( saltLength > 0 )
+ {
+ assertEquals( saltLength * 2, saltHex.length() );
+ assertTrue( saltHex.matches( "[0-9a-f]{" + ( saltLength * 2 ) + "}" ) );
+ }
+ else
+ {
+ assertEquals( "-", saltHex );
+ }
+ }
+
}
Modified: directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/DialogBot.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/DialogBot.java?rev=1731682&r1=1731681&r2=1731682&view=diff
==============================================================================
--- directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/DialogBot.java (original)
+++ directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/DialogBot.java Mon Feb 22 16:26:52 2016
@@ -22,6 +22,7 @@ package org.apache.directory.studio.test
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotButton;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
public abstract class DialogBot
@@ -42,4 +43,27 @@ public abstract class DialogBot
button.click();
}
+ protected String clickCheckButton( final String label, final String title )
+ {
+ SWTBotShell shell = BotUtils.shell( new Runnable()
+ {
+ public void run()
+ {
+ bot.button( label ).click();
+ }
+ }, "Error", title );
+
+ String shellText = shell.getText();
+ String labelText = bot.label( 1 ).getText(); // label(0) is the image
+ bot.button( "OK" ).click();
+
+ if ( shellText.equals( title ) )
+ {
+ return null;
+ }
+ else
+ {
+ return labelText;
+ }
+ }
}
Modified: directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorBot.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/EntryEditorBot.java?rev=1731682&r1=1731681&r2=1731682&view=diff
==============================================================================
--- directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorBot.java (original)
+++ directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorBot.java Mon Feb 22 16:26:52 2016
@@ -101,6 +101,12 @@ public class EntryEditorBot
}
+ public PasswordEditorDialogBot editValueExpectingPasswordEditor( String attributeType, String value )
+ {
+ return editorBot.editValueExpectingPasswordEditor( attributeType, value );
+ }
+
+
public void deleteValue( String attributeType, String value )
{
editorBot.deleteValue( attributeType, value );
Modified: directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorWidgetBot.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/EntryEditorWidgetBot.java?rev=1731682&r1=1731681&r2=1731682&view=diff
==============================================================================
--- directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorWidgetBot.java (original)
+++ directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorWidgetBot.java Mon Feb 22 16:26:52 2016
@@ -129,6 +129,13 @@ class EntryEditorWidgetBot
}
+ PasswordEditorDialogBot editValueExpectingPasswordEditor( String attributeType, String value )
+ {
+ editValue( attributeType, value );
+ return new PasswordEditorDialogBot();
+ }
+
+
private SWTBotTreeItem getTreeItem( String attributeType, String value )
{
SWTBotTree tree = bot.tree();
Modified: directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.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/NewAttributeWizardBot.java?rev=1731682&r1=1731681&r2=1731682&view=diff
==============================================================================
--- directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java (original)
+++ directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java Mon Feb 22 16:26:52 2016
@@ -41,4 +41,11 @@ public class NewAttributeWizardBot exten
return new DnEditorDialogBot();
}
+
+ public PasswordEditorDialogBot clickFinishButtonExpectingPasswordEditor()
+ {
+ clickFinishButton();
+ return new PasswordEditorDialogBot();
+ }
+
}
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=1731682&r1=1731681&r2=1731682&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 Mon Feb 22 16:26:52 2016
@@ -257,7 +257,7 @@ public class NewConnectionWizardBot exte
*/
public String clickCheckNetworkParameterButton()
{
- return clickCheckButton( CHECK_NETWORK_PARAMETER );
+ return clickCheckButton( CHECK_NETWORK_PARAMETER, CHECK_NETWORK_PARAMETER );
}
@@ -279,7 +279,7 @@ public class NewConnectionWizardBot exte
*/
public String clickCheckAuthenticationButton()
{
- return clickCheckButton( CHECK_AUTHENTICATION );
+ return clickCheckButton( CHECK_AUTHENTICATION, CHECK_AUTHENTICATION );
}
@@ -294,31 +294,6 @@ public class NewConnectionWizardBot exte
}
- private String clickCheckButton( final String label )
- {
- SWTBotShell shell = BotUtils.shell( new Runnable()
- {
- public void run()
- {
- bot.button( label ).click();
- }
- }, "Error", label );
-
- String shellText = shell.getText();
- String labelText = bot.label( 1 ).getText(); // label(0) is the image
- bot.button( "OK" ).click();
-
- if ( shellText.equals( label ) )
- {
- return null;
- }
- else
- {
- return labelText;
- }
- }
-
-
public boolean isNoEncryptionSelected()
{
SWTBotCombo encMethodCombo = bot.comboBoxWithLabel( ENCRYPTION_METHOD );
Added: directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/PasswordEditorDialogBot.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/PasswordEditorDialogBot.java?rev=1731682&view=auto
==============================================================================
--- directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/PasswordEditorDialogBot.java (added)
+++ directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/PasswordEditorDialogBot.java Mon Feb 22 16:26:52 2016
@@ -0,0 +1,119 @@
+/*
+ * 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.bots;
+
+
+import org.apache.directory.api.ldap.model.constants.LdapSecurityConstants;
+
+
+public class PasswordEditorDialogBot extends DialogBot
+{
+
+ public boolean isVisible()
+ {
+ return super.isVisible( "Password Editor" );
+ }
+
+
+ public void clickOkButton()
+ {
+ super.clickButton( "OK" );
+ }
+
+
+ public void clickCancelButton()
+ {
+ super.clickButton( "Cancel" );
+ }
+
+
+ public void setNewPassword1( String password )
+ {
+ bot.text( 0 ).setText( password );
+ }
+
+
+ public void setNewPassword2( String password )
+ {
+ bot.text( 1 ).setText( password );
+ }
+
+
+ public String getPasswordPreview()
+ {
+ return bot.text( 2 ).getText();
+ }
+
+
+ public void selectHashMethod( LdapSecurityConstants hashMethod )
+ {
+ bot.comboBox().setSelection( hashMethod.getName() );
+ }
+
+
+ public String getPasswordHex()
+ {
+ return bot.text( 3 ).getText();
+ }
+
+
+ public String getSaltHex()
+ {
+ return bot.text( 4 ).getText();
+ }
+
+
+ public void setShowNewPasswordDetails( boolean selected )
+ {
+ if ( selected )
+ {
+ bot.checkBox().select();
+ }
+ else
+ {
+ bot.checkBox().deselect();
+ }
+ }
+
+
+ public void activateCurrentPasswordTab()
+ {
+ bot.tabItem( "Current Password" ).activate();
+ }
+
+
+ public void setVerifyPassword( String password )
+ {
+ bot.text( 4 ).setText( password );
+ }
+
+
+ public String clickVerifyButton()
+ {
+ return clickCheckButton( "Verify", "Password Verification" );
+ }
+
+
+ public String clickBindButton()
+ {
+ return clickCheckButton( "Bind", "Check Authentication" );
+ }
+
+}
Propchange: directory/studio/trunk/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/PasswordEditorDialogBot.java
------------------------------------------------------------------------------
svn:eol-style = native