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 2021/04/05 21:45:46 UTC
[directory-studio] branch DIRSTUDIO-1267-fix-binary-option created
(now 239d27f)
This is an automated email from the ASF dual-hosted git repository.
seelmann pushed a change to branch DIRSTUDIO-1267-fix-binary-option
in repository https://gitbox.apache.org/repos/asf/directory-studio.git.
at 239d27f DIRSTUDIO-1267: Fix handling of binary and other options
This branch includes the following new commits:
new 239d27f DIRSTUDIO-1267: Fix handling of binary and other options
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[directory-studio] 01/01: DIRSTUDIO-1267: Fix handling of binary
and other options
Posted by se...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
seelmann pushed a commit to branch DIRSTUDIO-1267-fix-binary-option
in repository https://gitbox.apache.org/repos/asf/directory-studio.git
commit 239d27fa50d60f387fff0031afe799284a554b57
Author: Stefan Seelmann <ma...@stefan-seelmann.de>
AuthorDate: Mon Apr 5 23:44:38 2021 +0200
DIRSTUDIO-1267: Fix handling of binary and other options
---
.../ldapbrowser/common/dialogs/HexDialog.java | 52 +++--
.../wizards/NewEntryAttributesWizardPage.java | 2 +-
.../studio/ldapbrowser/core/model/IEntry.java | 41 ----
.../ldapbrowser/core/utils/ModelConverter.java | 6 +-
.../certificate/CertificateDialog.java | 51 +++--
.../test/integration/ui/EntryEditorTest.java | 78 +++----
.../test/integration/ui/ImportExportTest.java | 15 +-
.../test/integration/ui/NewEntryWizardTest.java | 126 +++++++++++-
.../studio/test/integration/ui/OpenLdapTest.java | 226 +++++++++++++++++++++
...wAttributeWizardBot.java => ResourceUtils.java} | 48 ++---
...logBot.java => CertificateEditorDialogBot.java} | 13 +-
...rDialogBot.java => EditAttributeWizardBot.java} | 23 ++-
.../test/integration/ui/bots/EntryEditorBot.java | 15 +-
.../integration/ui/bots/EntryEditorWidgetBot.java | 20 +-
.../integration/ui/bots/HexEditorDialogBot.java | 9 +
.../integration/ui/bots/NewAttributeWizardBot.java | 27 +++
.../integration/ui/bots/NewEntryWizardBot.java | 18 +-
.../ui/ImportExportTest_Modifications.ldif | 24 ++-
.../studio/test/integration/ui/rfc5280_cert1.cer | Bin 0 -> 578 bytes
.../studio/test/integration/ui/rfc5280_cert2.cer | Bin 0 -> 629 bytes
.../studio/test/integration/ui/rfc5280_cert3.cer | Bin 0 -> 914 bytes
.../studio/test/integration/ui/rfc5280_crl.crl | Bin 0 -> 356 bytes
22 files changed, 632 insertions(+), 162 deletions(-)
diff --git a/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/HexDialog.java b/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/HexDialog.java
index d072388..d97864b 100644
--- a/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/HexDialog.java
+++ b/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/HexDialog.java
@@ -35,7 +35,10 @@ import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.FileDialog;
@@ -52,6 +55,8 @@ import org.eclipse.swt.widgets.Text;
public class HexDialog extends Dialog
{
+ public static final String LOAD_FILE_NAME_TOOLTIP = "LoadFileName";
+
/** The default title. */
private static final String DIALOG_TITLE = Messages.getString( "HexDialog.HexEditor" ); //$NON-NLS-1$
@@ -64,6 +69,9 @@ public class HexDialog extends Dialog
/** The button ID for the save button. */
private static final int SAVE_BUTTON_ID = 9999;
+ /** Hidden text to set the filename, used for UI tests. */
+ private Text loadFilenameText;
+
/** The current data. */
private byte[] currentData;
@@ -134,18 +142,7 @@ public class HexDialog extends Dialog
String returnedFileName = fileDialog.open();
if ( returnedFileName != null )
{
- try
- {
- File file = new File( returnedFileName );
- currentData = FileUtils.readFileToByteArray( file );
- hexText.setText( toFormattedHex( currentData ) );
- }
- catch ( IOException e )
- {
- ConnectionUIPlugin.getDefault().getExceptionHandler().handleException(
- new Status( IStatus.ERROR, BrowserCommonConstants.PLUGIN_ID, IStatus.ERROR, Messages
- .getString( "HexDialog.CantReadFile" ), e ) ); //$NON-NLS-1$
- }
+ loadFile( returnedFileName );
}
}
else
@@ -157,6 +154,23 @@ public class HexDialog extends Dialog
}
+ private void loadFile( String fileName )
+ {
+ try
+ {
+ File file = new File( fileName );
+ currentData = FileUtils.readFileToByteArray( file );
+ hexText.setText( toFormattedHex( currentData ) );
+ }
+ catch ( IOException e )
+ {
+ ConnectionUIPlugin.getDefault().getExceptionHandler().handleException(
+ new Status( IStatus.ERROR, BrowserCommonConstants.PLUGIN_ID, IStatus.ERROR, Messages
+ .getString( "HexDialog.CantReadFile" ), e ) ); //$NON-NLS-1$
+ }
+ }
+
+
/**
* Small helper.
*/
@@ -187,11 +201,23 @@ public class HexDialog extends Dialog
*/
protected void createButtonsForButtonBar( Composite parent )
{
+ ((GridLayout) parent.getLayout()).numColumns++;
+ loadFilenameText = new Text( parent, SWT.NONE );
+ loadFilenameText.setToolTipText( LOAD_FILE_NAME_TOOLTIP );
+ loadFilenameText.setBackground( parent.getBackground() );
+ loadFilenameText.addModifyListener( new ModifyListener()
+ {
+ public void modifyText( ModifyEvent e )
+ {
+ loadFile( loadFilenameText.getText() );
+ }
+ } );
+
if ( isEditable( currentData ) )
{
createButton( parent, EDIT_AS_TEXT_BUTTON_ID, Messages.getString( "HexDialog.EditAsText" ), false ); //$NON-NLS-1$
}
-
+
createButton( parent, LOAD_BUTTON_ID, Messages.getString( "HexDialog.LoadDataButton" ), false ); //$NON-NLS-1$
createButton( parent, SAVE_BUTTON_ID, Messages.getString( "HexDialog.SaveDataButton" ), false ); //$NON-NLS-1$
createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false );
diff --git a/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/wizards/NewEntryAttributesWizardPage.java b/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/wizards/NewEntryAttributesWizardPage.java
index b6409ea..ebba3c7 100644
--- a/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/wizards/NewEntryAttributesWizardPage.java
+++ b/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/wizards/NewEntryAttributesWizardPage.java
@@ -184,7 +184,7 @@ public class NewEntryAttributesWizardPage extends WizardPage implements EntryUpd
// remove empty must attributes
// necessary when navigating back, modifying object classes
- // and Dn and navigation forward again.
+ // and Dn and navigating forward again.
Collection<AttributeType> oldMusts = SchemaUtils.getMustAttributeTypeDescriptions( newEntry );
for ( AttributeType oldMust : oldMusts )
{
diff --git a/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IEntry.java b/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IEntry.java
index d7a942f..b7741e3 100644
--- a/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IEntry.java
+++ b/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IEntry.java
@@ -24,18 +24,11 @@ package org.apache.directory.studio.ldapbrowser.core.model;
import java.io.Serializable;
import java.util.Collection;
-import org.apache.directory.api.ldap.model.entry.Attribute;
-import org.apache.directory.api.ldap.model.entry.DefaultAttribute;
-import org.apache.directory.api.ldap.model.entry.DefaultEntry;
-import org.apache.directory.api.ldap.model.entry.Entry;
-import org.apache.directory.api.ldap.model.exception.LdapException;
-import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
import org.apache.directory.api.ldap.model.name.Dn;
import org.apache.directory.api.ldap.model.name.Rdn;
import org.apache.directory.api.ldap.model.schema.ObjectClass;
import org.apache.directory.api.ldap.model.url.LdapUrl;
import org.apache.directory.studio.connection.core.ConnectionPropertyPageProvider;
-import org.apache.directory.studio.connection.core.io.LdapRuntimeException;
import org.apache.directory.studio.connection.core.jobs.StudioConnectionBulkRunnableWithProgress;
import org.apache.directory.studio.ldapbrowser.core.propertypageproviders.EntryPropertyPageProvider;
import org.eclipse.core.runtime.IAdaptable;
@@ -471,38 +464,4 @@ public interface IEntry extends Serializable, IAdaptable, EntryPropertyPageProvi
*/
Collection<ObjectClass> getObjectClassDescriptions();
-
- default Entry toEntry()
- {
- try
- {
- Entry entry = new DefaultEntry( getDn() );
- for ( IAttribute iAttribute : getAttributes() )
- {
- Attribute attribute = new DefaultAttribute( iAttribute.getType() );
- for ( IValue iValue : iAttribute.getValues() )
- {
- Object rawValue = iValue.getRawValue();
- if ( rawValue instanceof String )
- {
- attribute.add( ( String ) rawValue );
- }
- else if ( rawValue instanceof byte[] )
- {
- attribute.add( ( byte[] ) rawValue );
- }
- else
- {
- attribute.add( ( String ) null );
- }
- }
- entry.add( attribute );
- }
- return entry;
- }
- catch ( LdapException e )
- {
- throw new LdapRuntimeException( e );
- }
- }
}
diff --git a/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/ModelConverter.java b/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/ModelConverter.java
index 34e2163..1ee7a31 100644
--- a/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/ModelConverter.java
+++ b/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/ModelConverter.java
@@ -336,14 +336,14 @@ public class ModelConverter
{
for ( IValue value : iAttribute.getValues() )
{
- String attributeType = value.getAttribute().getType();
+ String attributeDescription = value.getAttribute().getDescription();
if ( value.isString() )
{
- ldapApiEntry.add( attributeType, value.getStringValue() );
+ ldapApiEntry.add( attributeDescription, value.getStringValue() );
}
else
{
- ldapApiEntry.add( attributeType, value.getBinaryValue() );
+ ldapApiEntry.add( attributeDescription, value.getBinaryValue() );
}
}
}
diff --git a/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/certificate/CertificateDialog.java b/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/certificate/CertificateDialog.java
index 99c501d..c139d8a 100644
--- a/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/certificate/CertificateDialog.java
+++ b/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/certificate/CertificateDialog.java
@@ -41,11 +41,15 @@ import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
/**
@@ -57,6 +61,8 @@ import org.eclipse.swt.widgets.Shell;
public class CertificateDialog extends Dialog
{
+ public static final String LOAD_FILE_NAME_TOOLTIP = "LoadFileName";
+
/** The default title. */
private static final String DIALOG_TITLE = Messages.getString( "CertificateDialog.CertificateDialog" ); //$NON-NLS-1$
@@ -66,6 +72,9 @@ public class CertificateDialog extends Dialog
/** The button ID for the save button. */
private static final int SAVE_BUTTON_ID = 9999;
+ /** Hidden text to set the filename, used for UI tests. */
+ private Text loadFilenameText;
+
/** The current certificate binary data. */
private byte[] currentData;
@@ -130,18 +139,7 @@ public class CertificateDialog extends Dialog
String returnedFileName = fileDialog.open();
if ( returnedFileName != null )
{
- try
- {
- File file = new File( returnedFileName );
- currentData = FileUtils.readFileToByteArray( file );
- updateInput();
- }
- catch ( IOException e )
- {
- ConnectionUIPlugin.getDefault().getExceptionHandler().handleException(
- new Status( IStatus.ERROR, ValueEditorsConstants.PLUGIN_ID, IStatus.ERROR, Messages
- .getString( "CertificateDialog.CantReadFile" ), e ) ); //$NON-NLS-1$
- }
+ loadFile( returnedFileName );
}
}
else
@@ -153,6 +151,23 @@ public class CertificateDialog extends Dialog
}
+ private void loadFile( String fileName )
+ {
+ try
+ {
+ File file = new File( fileName );
+ currentData = FileUtils.readFileToByteArray( file );
+ updateInput();
+ }
+ catch ( IOException e )
+ {
+ ConnectionUIPlugin.getDefault().getExceptionHandler().handleException(
+ new Status( IStatus.ERROR, ValueEditorsConstants.PLUGIN_ID, IStatus.ERROR, Messages
+ .getString( "CertificateDialog.CantReadFile" ), e ) ); //$NON-NLS-1$
+ }
+ }
+
+
/**
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
*/
@@ -169,6 +184,18 @@ public class CertificateDialog extends Dialog
*/
protected void createButtonsForButtonBar( Composite parent )
{
+ ((GridLayout) parent.getLayout()).numColumns++;
+ loadFilenameText = new Text( parent, SWT.NONE );
+ loadFilenameText.setToolTipText( LOAD_FILE_NAME_TOOLTIP );
+ loadFilenameText.setBackground( parent.getBackground() );
+ loadFilenameText.addModifyListener( new ModifyListener()
+ {
+ public void modifyText( ModifyEvent e )
+ {
+ loadFile( loadFilenameText.getText() );
+ }
+ } );
+
createButton( parent, LOAD_BUTTON_ID, Messages.getString( "CertificateDialog.LoadCertificateButton" ), false ); //$NON-NLS-1$
createButton( parent, SAVE_BUTTON_ID, Messages.getString( "CertificateDialog.SaveCertificateButton" ), false ); //$NON-NLS-1$
createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false );
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/EntryEditorTest.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/EntryEditorTest.java
index 04fcbec..7565099 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/EntryEditorTest.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/EntryEditorTest.java
@@ -28,37 +28,25 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import java.io.File;
-import java.io.InputStream;
-import java.net.URL;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.cert.X509Certificate;
-
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.directory.api.ldap.model.constants.AuthenticationLevel;
import org.apache.directory.api.ldap.model.constants.LdapSecurityConstants;
-import org.apache.directory.api.ldap.model.entry.DefaultModification;
import org.apache.directory.api.ldap.model.entry.Entry;
-import org.apache.directory.api.ldap.model.entry.ModificationOperation;
import org.apache.directory.api.ldap.model.name.Dn;
import org.apache.directory.api.ldap.model.password.PasswordUtil;
-import org.apache.directory.api.util.FileUtils;
-import org.apache.directory.api.util.IOUtils;
import org.apache.directory.api.util.Strings;
import org.apache.directory.server.annotations.CreateLdapServer;
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.server.core.security.CertificateUtil;
import org.apache.directory.studio.ldapbrowser.core.BrowserCoreMessages;
import org.apache.directory.studio.ldifparser.LdifFormatParameters;
import org.apache.directory.studio.ldifparser.LdifParserConstants;
import org.apache.directory.studio.ldifparser.model.lines.LdifAttrValLine;
import org.apache.directory.studio.test.integration.ui.bots.AciItemEditorDialogBot;
-import org.apache.directory.studio.test.integration.ui.bots.BotUtils;
import org.apache.directory.studio.test.integration.ui.bots.BrowserViewBot;
+import org.apache.directory.studio.test.integration.ui.bots.CertificateEditorDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.ConnectionsViewBot;
import org.apache.directory.studio.test.integration.ui.bots.DnEditorDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.EntryEditorBot;
@@ -75,15 +63,12 @@ import org.apache.directory.studio.test.integration.ui.bots.utils.Assertions;
import org.apache.directory.studio.test.integration.ui.bots.utils.Characters;
import org.apache.directory.studio.test.integration.ui.bots.utils.FrameworkRunnerWithScreenshotCaptureListener;
import org.apache.directory.studio.test.integration.ui.bots.utils.JobWatcher;
-import org.eclipse.core.runtime.Platform;
import org.eclipse.swtbot.swt.finder.utils.SWTUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import sun.security.x509.X500Name;
-
/**
* Tests the entry editor.
@@ -523,29 +508,33 @@ public class EntryEditorTest extends AbstractLdapTestUnit
/**
- * DIRSTUDIO-1199, DIRSTUDIO-1204: Binary attributes
+ * DIRSTUDIO-1199, DIRSTUDIO-1204, DIRSTUDIO-1267: Binary attributes
*/
@Test
public void testCertificateValueEditor() throws Exception
{
- X500Name issuer = new X500Name( "Foo", "Bar", "Baz", "US" );
- KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance( "EC" );
- keyPairGenerator.initialize( 256 );
- KeyPair keyPair = keyPairGenerator.generateKeyPair();
- X509Certificate certificate = CertificateUtil.generateSelfSignedCertificate( issuer, keyPair, 365,
- "SHA256WithECDSA" );
- getService().getAdminSession().modify( new Dn( "cn=Barbara Jensen,ou=users,ou=system" ),
- new DefaultModification( ModificationOperation.ADD_ATTRIBUTE, "userCertificate",
- certificate.getEncoded() ) );
+ String certFile = ResourceUtils.prepareInputFile( "rfc5280_cert2.cer" );
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();
- BotUtils.sleep( 1000 );
+ NewAttributeWizardBot wizardBot = entryEditorBot.openNewAttributeWizard();
+ assertTrue( wizardBot.isVisible() );
+ wizardBot.typeAttributeType( "userCertificate" );
+ wizardBot.clickNextButton();
+ wizardBot.selectBinaryOption();
+ CertificateEditorDialogBot certEditorBot = wizardBot.clickFinishButtonExpectingCertificateEditor();
+
+ assertTrue( certEditorBot.isVisible() );
+ certEditorBot.typeFile( certFile );
+
+ certEditorBot.clickOkButton();
+
+ modificationLogsViewBot.waitForText( "add: userCertificate;binary\nuserCertificate;binary:: " );
assertTrue( entryEditorBot.getAttributeValues()
- .contains( "userCertificate: X.509v3: CN=Foo,OU=Bar,O=Baz,C=US" ) );
+ .contains( "userCertificate: X.509v3: CN=End Entity,DC=example,DC=com" ) );
}
@@ -555,11 +544,7 @@ public class EntryEditorTest extends AbstractLdapTestUnit
@Test
public void testImageValueEditor() throws Exception
{
- URL url = Platform.getInstanceLocation().getURL();
- String destFile = url.getFile() + "studio_64x64.jpg";
- InputStream is = getClass().getResourceAsStream( "studio_64x64.jpg" );
- byte[] data = IOUtils.toByteArray( is, 2014 );
- FileUtils.writeByteArrayToFile( new File( destFile ), data );
+ String imgFile = ResourceUtils.prepareInputFile( "studio_64x64.jpg" );
browserViewBot.selectEntry( "DIT", "Root DSE", "ou=system", "ou=users", "cn=Barbara Jensen" );
@@ -572,11 +557,11 @@ public class EntryEditorTest extends AbstractLdapTestUnit
wizardBot.typeAttributeType( "jpegPhoto" );
ImageEditorDialogBot imageEditorBot = wizardBot.clickFinishButtonExpectingImageEditor();
assertTrue( imageEditorBot.isVisible() );
- imageEditorBot.typeFile( destFile );
+ imageEditorBot.typeFile( imgFile );
imageEditorBot.clickOkButton();
// assert value after saved and reloaded from server
- SWTUtils.sleep( 1000 );
+ modificationLogsViewBot.waitForText( "add: jpegPhoto\njpegPhoto:: " );
assertTrue( entryEditorBot.getAttributeValues().contains( "jpegPhoto: JPEG-Image (64x64 Pixel, 2014 Bytes)" ) );
}
@@ -780,7 +765,7 @@ public class EntryEditorTest extends AbstractLdapTestUnit
/**
- * Test for DIRSTUDIO-1249: userSMIMECertificate is a binary attribute.
+ * Test for DIRSTUDIO-1249, DIRSTUDIO-1267: userSMIMECertificate is a binary attribute.
*/
@Test
public void testHexEditor() throws Exception
@@ -789,7 +774,6 @@ public class EntryEditorTest extends AbstractLdapTestUnit
EntryEditorBot entryEditorBot = studioBot.getEntryEditorBot( "uid=hnelson,ou=users,ou=system" );
entryEditorBot.activate();
- // SWTUtils.sleep( 10000 );
assertTrue( entryEditorBot.getAttributeValues().contains( "usersmimecertificate: Binary Data (255 Bytes)" ) );
assertTrue( entryEditorBot.getAttributeValues().contains( "usersmimecertificate: Binary Data (256 Bytes)" ) );
assertTrue( entryEditorBot.getAttributeValues().contains( "usersmimecertificate: Binary Data (257 Bytes)" ) );
@@ -801,7 +785,6 @@ public class EntryEditorTest extends AbstractLdapTestUnit
assertTrue( hexText.contains( "70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f pqrstuvw xyz{|}~." ) );
assertTrue( hexText.contains( "80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f ........ ........" ) );
assertTrue( hexText.contains( "f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff ........ ........" ) );
- // SWTUtils.sleep( 10000 );
hexEditorDialogBot.clickCancelButton();
hexEditorDialogBot = entryEditorBot.editValueExpectingHexEditor( "usersmimecertificate",
@@ -816,6 +799,25 @@ public class EntryEditorTest extends AbstractLdapTestUnit
assertTrue( hexText.contains( "f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff ........ ........" ) );
assertTrue( hexText.contains( "00 ." ) );
hexEditorDialogBot.clickCancelButton();
+
+ String crtFile = ResourceUtils.prepareInputFile( "rfc5280_cert2.cer" );
+
+ entryEditorBot.activate();
+ NewAttributeWizardBot wizardBot = entryEditorBot.openNewAttributeWizard();
+ assertTrue( wizardBot.isVisible() );
+ wizardBot.typeAttributeType( "userSMIMECertificate" );
+ wizardBot.clickNextButton();
+ wizardBot.selectBinaryOption();
+ HexEditorDialogBot hexEditorBot = wizardBot.clickFinishButtonExpectingHexEditor();
+
+ assertTrue( hexEditorBot.isVisible() );
+ hexEditorBot.typeFile( crtFile );
+
+ hexEditorBot.clickOkButton();
+
+ modificationLogsViewBot.waitForText( "add: userSMIMECertificate;binary\nuserSMIMECertificate;binary:: " );
+ assertTrue( entryEditorBot.getAttributeValues()
+ .contains( "usersmimecertificate: Binary Data (629 Bytes)" ) );
}
}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ImportExportTest.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ImportExportTest.java
index 4cb5ee8..8c5e652 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ImportExportTest.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ImportExportTest.java
@@ -30,18 +30,15 @@ import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
-import java.io.InputStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.List;
-import java.util.UUID;
import java.util.function.Supplier;
import org.apache.directory.api.ldap.model.entry.DefaultEntry;
import org.apache.directory.api.ldap.model.message.SearchScope;
import org.apache.directory.api.ldap.model.name.Dn;
import org.apache.directory.api.util.FileUtils;
-import org.apache.directory.api.util.IOUtils;
import org.apache.directory.server.annotations.CreateLdapServer;
import org.apache.directory.server.annotations.CreateTransport;
import org.apache.directory.server.core.annotations.ApplyLdifFiles;
@@ -604,6 +601,11 @@ public class ImportExportTest extends AbstractLdapTestUnit
assertTrue( entryEditorBot.getAttributeValues().contains( "roomNumber: 1234" ) );
assertTrue( entryEditorBot.getAttributeValues().contains( "roomNumber: 2345" ) );
assertTrue( entryEditorBot.getAttributeValues().contains( "roomNumber: 3456" ) );
+ assertTrue( entryEditorBot.getAttributeValues()
+ .contains( "userCertificate: X.509v3: CN=End Entity,DC=example,DC=com" ) );
+ modificationLogsViewBot.waitForText( "add: userCertificate;binary\nuserCertificate;binary:: " );
+ modificationLogsViewBot.waitForText( "add: description;lang-en\ndescription;lang-en: " );
+ modificationLogsViewBot.waitForText( "add: description;lang-de\ndescription;lang-de: " );
assertFalse( browserViewBot.existsEntry( "DIT", "Root DSE", "ou=system", "ou=users", "uid=user.2" ) );
@@ -684,12 +686,7 @@ public class ImportExportTest extends AbstractLdapTestUnit
private String prepareInputFile( String inputFileName ) throws IOException
{
- URL url = Platform.getInstanceLocation().getURL();
- String destFile = url.getFile() + UUID.randomUUID().toString();
- InputStream is = getClass().getResourceAsStream( inputFileName );
- String ldifContent = IOUtils.toString( is, StandardCharsets.UTF_8 );
- FileUtils.writeStringToFile( new File( destFile ), ldifContent, StandardCharsets.UTF_8, false );
- return destFile;
+ return ResourceUtils.prepareInputFile( inputFileName );
}
}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java
index 434aa59..6fbaa3d 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java
@@ -42,14 +42,21 @@ import org.apache.directory.studio.connection.core.Connection.AliasDereferencing
import org.apache.directory.studio.connection.core.Connection.ReferralHandlingMethod;
import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
import org.apache.directory.studio.test.integration.ui.bots.BrowserViewBot;
+import org.apache.directory.studio.test.integration.ui.bots.CertificateEditorDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.ConnectionsViewBot;
import org.apache.directory.studio.test.integration.ui.bots.DnEditorDialogBot;
+import org.apache.directory.studio.test.integration.ui.bots.EditAttributeWizardBot;
+import org.apache.directory.studio.test.integration.ui.bots.EntryEditorBot;
+import org.apache.directory.studio.test.integration.ui.bots.HexEditorDialogBot;
+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.NewEntryWizardBot;
import org.apache.directory.studio.test.integration.ui.bots.ReferralDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.StudioBot;
import org.apache.directory.studio.test.integration.ui.bots.SubtreeSpecificationEditorDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.utils.Assertions;
import org.apache.directory.studio.test.integration.ui.bots.utils.FrameworkRunnerWithScreenshotCaptureListener;
+import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
import org.eclipse.swtbot.swt.finder.utils.SWTUtils;
import org.junit.After;
import org.junit.Before;
@@ -71,10 +78,10 @@ public class NewEntryWizardTest extends AbstractLdapTestUnit
private StudioBot studioBot;
private ConnectionsViewBot connectionsViewBot;
private BrowserViewBot browserViewBot;
+ private ModificationLogsViewBot modificationLogsViewBot;
private Connection connection;
-
@Before
public void setUp() throws Exception
{
@@ -95,6 +102,7 @@ public class NewEntryWizardTest extends AbstractLdapTestUnit
connectionsViewBot = studioBot.getConnectionView();
connection = connectionsViewBot.createTestConnection( "NewEntryWizardTest", ldapServer.getPort() );
browserViewBot = studioBot.getBrowserView();
+ modificationLogsViewBot = studioBot.getModificationLogsViewBot();
}
@@ -570,4 +578,120 @@ public class NewEntryWizardTest extends AbstractLdapTestUnit
browserViewBot.selectEntry( "DIT", "Root DSE", "ou=system", "l=eu+l=de+l=Berlin" );
}
+
+ /**
+ * DIRSTUDIO-1267: Test creation of new entry with binary option and language tags.
+ */
+ @Test
+ public void testCreateEntryWithBinaryOptionAndLanguageTags() throws Exception
+ {
+ String certFile = ResourceUtils.prepareInputFile( "rfc5280_cert1.cer" );
+ String crlFile = ResourceUtils.prepareInputFile( "rfc5280_crl.crl" );
+
+ browserViewBot.selectEntry( "DIT", "Root DSE", "ou=system" );
+
+ NewEntryWizardBot wizardBot = browserViewBot.openNewEntryWizard();
+
+ wizardBot.selectCreateEntryFromScratch();
+ wizardBot.clickNextButton();
+ wizardBot.addObjectClasses( "organizationalRole" );
+ wizardBot.addObjectClasses( "certificationAuthority" );
+ wizardBot.clickNextButton();
+
+ wizardBot.setRdnType( 1, "cn" );
+ wizardBot.setRdnValue( 1, "asdf" );
+ wizardBot.clickNextButton();
+
+ // by default the hex or certificate editor is opened, close it
+ try
+ {
+ new HexEditorDialogBot().clickCancelButton();
+ }
+ catch ( WidgetNotFoundException e )
+ {
+ }
+ try
+ {
+ new CertificateEditorDialogBot().clickCancelButton();
+ }
+ catch ( WidgetNotFoundException e )
+ {
+ }
+
+ wizardBot.activate();
+ NewAttributeWizardBot newAttributeWizardBot = wizardBot.openNewAttributeWizard();
+ assertTrue( newAttributeWizardBot.isVisible() );
+ newAttributeWizardBot.typeAttributeType( "description" );
+ newAttributeWizardBot.clickNextButton();
+ newAttributeWizardBot.setLanguageTag( "en", "us" );
+ newAttributeWizardBot.clickFinishButton();
+ wizardBot.cancelEditValue();
+ wizardBot.activate();
+ wizardBot.editValue( "description;lang-en-us", null );
+ SWTUtils.sleep( 1000 );
+ wizardBot.typeValueAndFinish( "English description" );
+
+ wizardBot.activate();
+ EditAttributeWizardBot editAttributeBot = wizardBot.editAttribute( "cACertificate", null );
+ editAttributeBot.clickNextButton();
+ editAttributeBot.selectBinaryOption();
+ editAttributeBot.clickFinishButton();
+
+ wizardBot.activate();
+ wizardBot.editValue( "cACertificate;binary", null );
+ CertificateEditorDialogBot certEditorBot = new CertificateEditorDialogBot();
+ assertTrue( certEditorBot.isVisible() );
+ certEditorBot.typeFile( certFile );
+ certEditorBot.clickOkButton();
+
+ wizardBot.activate();
+ editAttributeBot = wizardBot.editAttribute( "certificateRevocationList", null );
+ editAttributeBot.clickNextButton();
+ editAttributeBot.selectBinaryOption();
+ editAttributeBot.clickFinishButton();
+
+ wizardBot.activate();
+ wizardBot.editValue( "certificateRevocationList;binary", null );
+ HexEditorDialogBot hexEditorBot = new HexEditorDialogBot();
+ assertTrue( hexEditorBot.isVisible() );
+ hexEditorBot.typeFile( crlFile );
+ hexEditorBot.clickOkButton();
+
+ wizardBot.activate();
+ editAttributeBot = wizardBot.editAttribute( "authorityRevocationList", null );
+ editAttributeBot.clickNextButton();
+ editAttributeBot.selectBinaryOption();
+ editAttributeBot.clickFinishButton();
+
+ wizardBot.activate();
+ wizardBot.editValue( "authorityRevocationList;binary", null );
+ assertTrue( hexEditorBot.isVisible() );
+ hexEditorBot.typeFile( crlFile );
+ hexEditorBot.clickOkButton();
+
+ wizardBot.activate();
+ wizardBot.clickFinishButton();
+
+ assertTrue( browserViewBot.existsEntry( "DIT", "Root DSE", "ou=system", "cn=asdf" ) );
+ browserViewBot.selectEntry( "DIT", "Root DSE", "ou=system", "cn=asdf" );
+
+ EntryEditorBot entryEditorBot = studioBot.getEntryEditorBot( "cn=asdf,ou=system" );
+ entryEditorBot.activate();
+
+ modificationLogsViewBot.waitForText( "cACertificate;binary:: MIICPjCCAaeg" );
+ assertTrue( entryEditorBot.getAttributeValues()
+ .contains( "cACertificate;binary: X.509v3: CN=Example CA,DC=example,DC=com" ) );
+
+ modificationLogsViewBot.waitForText( "certificateRevocationList;binary:: MIIBYDCBygIB" );
+ assertTrue( entryEditorBot.getAttributeValues()
+ .contains( "certificateRevocationList;binary: Binary Data (356 Bytes)" ) );
+
+ modificationLogsViewBot.waitForText( "authorityRevocationList;binary:: MIIBYDCBygIB" );
+ assertTrue( entryEditorBot.getAttributeValues()
+ .contains( "authorityRevocationList;binary: Binary Data (356 Bytes)" ) );
+
+ modificationLogsViewBot.waitForText( "description;lang-en-us: English description" );
+ assertTrue( entryEditorBot.getAttributeValues()
+ .contains( "description;lang-en-us: English description" ) );
+ }
}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/OpenLdapTest.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/OpenLdapTest.java
index 519e9b3..d5a6af0 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/OpenLdapTest.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/OpenLdapTest.java
@@ -47,17 +47,24 @@ import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection.ModifyMode;
import org.apache.directory.studio.ldapbrowser.core.model.schema.Schema;
import org.apache.directory.studio.test.integration.ui.bots.BrowserViewBot;
+import org.apache.directory.studio.test.integration.ui.bots.CertificateEditorDialogBot;
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.EditAttributeWizardBot;
import org.apache.directory.studio.test.integration.ui.bots.EntryEditorBot;
import org.apache.directory.studio.test.integration.ui.bots.ErrorDialogBot;
+import org.apache.directory.studio.test.integration.ui.bots.HexEditorDialogBot;
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.NewConnectionWizardBot;
+import org.apache.directory.studio.test.integration.ui.bots.NewEntryWizardBot;
import org.apache.directory.studio.test.integration.ui.bots.SchemaBrowserBot;
import org.apache.directory.studio.test.integration.ui.bots.SearchDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.StudioBot;
import org.apache.directory.studio.test.integration.ui.bots.utils.Assertions;
import org.apache.directory.studio.test.integration.ui.bots.utils.FrameworkRunnerWithScreenshotCaptureListener;
+import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
+import org.eclipse.swtbot.swt.finder.utils.SWTUtils;
import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
@@ -474,4 +481,223 @@ public class OpenLdapTest
browserViewBot.selectEntry( "DIT", "Root DSE" );
}
+
+ /**
+ * DIRSTUDIO-1267: Test creation of new entry with binary option and language tags.
+ */
+ @Test
+ public void testCreateEntryWithBinaryOptionAndLanguageTags() throws Exception
+ {
+ String certFile = ResourceUtils.prepareInputFile( "rfc5280_cert1.cer" );
+ String crlFile = ResourceUtils.prepareInputFile( "rfc5280_crl.crl" );
+
+ browserViewBot.selectEntry( "DIT", "Root DSE", "dc=example,dc=org", "ou=users" );
+
+ NewEntryWizardBot wizardBot = browserViewBot.openNewEntryWizard();
+
+ wizardBot.selectCreateEntryFromScratch();
+ wizardBot.clickNextButton();
+ wizardBot.addObjectClasses( "organizationalRole" );
+ wizardBot.addObjectClasses( "certificationAuthority" );
+ wizardBot.clickNextButton();
+
+ wizardBot.setRdnType( 1, "cn" );
+ wizardBot.setRdnValue( 1, "asdf" );
+ wizardBot.clickNextButton();
+
+ // by default the hex or certificate editor is opened, close it
+ try
+ {
+ new HexEditorDialogBot().clickCancelButton();
+ }
+ catch ( WidgetNotFoundException e )
+ {
+ }
+ try
+ {
+ new CertificateEditorDialogBot().clickCancelButton();
+ }
+ catch ( WidgetNotFoundException e )
+ {
+ }
+
+ wizardBot.activate();
+ NewAttributeWizardBot newAttributeWizardBot = wizardBot.openNewAttributeWizard();
+ assertTrue( newAttributeWizardBot.isVisible() );
+ newAttributeWizardBot.typeAttributeType( "description" );
+ newAttributeWizardBot.clickNextButton();
+ newAttributeWizardBot.setLanguageTag( "en", "us" );
+ newAttributeWizardBot.clickFinishButton();
+ wizardBot.cancelEditValue();
+ wizardBot.activate();
+ wizardBot.editValue( "description;lang-en-us", null );
+ SWTUtils.sleep( 1000 );
+ wizardBot.typeValueAndFinish( "English description" );
+
+ wizardBot.activate();
+ EditAttributeWizardBot editAttributeBot = wizardBot.editAttribute( "cACertificate", null );
+ editAttributeBot.clickNextButton();
+ editAttributeBot.selectBinaryOption();
+ editAttributeBot.clickFinishButton();
+
+ wizardBot.activate();
+ wizardBot.editValue( "cACertificate;binary", null );
+ CertificateEditorDialogBot certEditorBot = new CertificateEditorDialogBot();
+ assertTrue( certEditorBot.isVisible() );
+ certEditorBot.typeFile( certFile );
+ certEditorBot.clickOkButton();
+
+ wizardBot.activate();
+ editAttributeBot = wizardBot.editAttribute( "certificateRevocationList", null );
+ editAttributeBot.clickNextButton();
+ editAttributeBot.selectBinaryOption();
+ editAttributeBot.clickFinishButton();
+
+ wizardBot.activate();
+ wizardBot.editValue( "certificateRevocationList;binary", null );
+ HexEditorDialogBot hexEditorBot = new HexEditorDialogBot();
+ assertTrue( hexEditorBot.isVisible() );
+ hexEditorBot.typeFile( crlFile );
+ hexEditorBot.clickOkButton();
+
+ wizardBot.activate();
+ editAttributeBot = wizardBot.editAttribute( "authorityRevocationList", null );
+ editAttributeBot.clickNextButton();
+ editAttributeBot.selectBinaryOption();
+ editAttributeBot.clickFinishButton();
+
+ wizardBot.activate();
+ wizardBot.editValue( "authorityRevocationList;binary", null );
+ assertTrue( hexEditorBot.isVisible() );
+ hexEditorBot.typeFile( crlFile );
+ hexEditorBot.clickOkButton();
+
+ wizardBot.activate();
+ wizardBot.clickFinishButton();
+
+ assertTrue( browserViewBot.existsEntry( "DIT", "Root DSE", "dc=example,dc=org", "ou=users", "cn=asdf" ) );
+ browserViewBot.selectEntry( "DIT", "Root DSE", "dc=example,dc=org", "ou=users", "cn=asdf" );
+
+ EntryEditorBot entryEditorBot = studioBot.getEntryEditorBot( "cn=asdf,ou=users,dc=example,dc=org" );
+ entryEditorBot.activate();
+
+ modificationLogsViewBot.waitForText( "cACertificate;binary:: MIICPjCCAaeg" );
+ assertTrue( entryEditorBot.getAttributeValues()
+ .contains( "cACertificate;binary: X.509v3: CN=Example CA,DC=example,DC=com" ) );
+
+ modificationLogsViewBot.waitForText( "certificateRevocationList;binary:: MIIBYDCBygIB" );
+ assertTrue( entryEditorBot.getAttributeValues()
+ .contains( "certificateRevocationList;binary: Binary Data (356 Bytes)" ) );
+
+ modificationLogsViewBot.waitForText( "authorityRevocationList;binary:: MIIBYDCBygIB" );
+ assertTrue( entryEditorBot.getAttributeValues()
+ .contains( "authorityRevocationList;binary: Binary Data (356 Bytes)" ) );
+
+ modificationLogsViewBot.waitForText( "description;lang-en-us: English description" );
+ assertTrue( entryEditorBot.getAttributeValues()
+ .contains( "description;lang-en-us: English description" ) );
+
+ browserViewBot.selectEntry( "DIT", "Root DSE", "dc=example,dc=org", "ou=users", "cn=asdf" );
+ DeleteDialogBot deleteDialogBot = browserViewBot.openDeleteDialog();
+ deleteDialogBot.clickOkButton();
+ }
+
+
+ /**
+ * DIRSTUDIO-1267: Test adding, editing and deleting of attributes with binary option in the entry editor.
+ */
+ @Test
+ public void testAddEditDeleteAttributeWithBinaryOption() throws Exception
+ {
+ String cert2File = ResourceUtils.prepareInputFile( "rfc5280_cert2.cer" );
+ String cert3File = ResourceUtils.prepareInputFile( "rfc5280_cert3.cer" );
+
+ browserViewBot.selectEntry( "DIT", "Root DSE", "dc=example,dc=org", "ou=users", "uid=user.1" );
+
+ EntryEditorBot entryEditorBot = studioBot.getEntryEditorBot( "uid=user.1,ou=users,dc=example,dc=org" );
+ entryEditorBot.activate();
+
+ // add userCertificate;binary
+ NewAttributeWizardBot wizardBot = entryEditorBot.openNewAttributeWizard();
+ assertTrue( wizardBot.isVisible() );
+ wizardBot.typeAttributeType( "userCertificate" );
+ wizardBot.clickNextButton();
+ wizardBot.selectBinaryOption();
+ CertificateEditorDialogBot certEditorBot = wizardBot.clickFinishButtonExpectingCertificateEditor();
+ assertTrue( certEditorBot.isVisible() );
+ certEditorBot.typeFile( cert2File );
+ certEditorBot.clickOkButton();
+ modificationLogsViewBot.waitForText( "add: userCertificate;binary\nuserCertificate;binary:: MIICcTCCAdqg" );
+ assertTrue( entryEditorBot.getAttributeValues()
+ .contains( "userCertificate;binary: X.509v3: CN=End Entity,DC=example,DC=com" ) );
+
+ // edit userCertificate;binary
+ certEditorBot = entryEditorBot.editValueExpectingCertificateEditor( "userCertificate;binary",
+ "X.509v3: CN=End Entity,DC=example,DC=com" );
+ assertTrue( certEditorBot.isVisible() );
+ certEditorBot.typeFile( cert3File );
+ certEditorBot.clickOkButton();
+ modificationLogsViewBot.waitForText( "delete: userCertificate;binary\nuserCertificate;binary:: MIICcTCCAdqg" );
+ modificationLogsViewBot.waitForText( "add: userCertificate;binary\nuserCertificate;binary:: MIIDjjCCA06g" );
+ assertFalse( entryEditorBot.getAttributeValues()
+ .contains( "userCertificate;binary: X.509v3: CN=End Entity,DC=example,DC=com" ) );
+ assertTrue( entryEditorBot.getAttributeValues()
+ .contains( "userCertificate;binary: X.509v3: CN=DSA End Entity,DC=example,DC=com" ) );
+
+ // delete userCertificate;binary
+ entryEditorBot.deleteValue( "userCertificate;binary", "X.509v3: CN=DSA End Entity,DC=example,DC=com" );
+ modificationLogsViewBot.waitForText( "delete: userCertificate;binary\nuserCertificate;binary:: MIIDjjCCA06g" );
+ assertFalse( entryEditorBot.getAttributeValues()
+ .contains( "userCertificate;binary: X.509v3: CN=DSA End Entity,DC=example,DC=com" ) );
+
+ }
+
+
+ /**
+ * DIRSTUDIO-1267:Test adding, editing and deleting of attributes with language tag in the entry editor.
+ */
+ @Test
+ public void testAddEditDeleteAttributeWithLanguageTag() throws Exception
+ {
+ browserViewBot.selectEntry( "DIT", "Root DSE", "dc=example,dc=org", "ou=users", "uid=user.1" );
+
+ EntryEditorBot entryEditorBot = studioBot.getEntryEditorBot( "uid=user.1,ou=users,dc=example,dc=org" );
+ entryEditorBot.activate();
+
+ // add attribute description;lang-en
+ entryEditorBot.activate();
+ NewAttributeWizardBot wizardBot = entryEditorBot.openNewAttributeWizard();
+ assertTrue( wizardBot.isVisible() );
+ wizardBot.typeAttributeType( "description" );
+ wizardBot.clickNextButton();
+ wizardBot.setLanguageTag( "en", "" );
+ wizardBot.clickFinishButton();
+ entryEditorBot.typeValueAndFinish( "English" );
+ modificationLogsViewBot.waitForText( "add: description;lang-en\ndescription;lang-en: English\n-" );
+ assertTrue( entryEditorBot.getAttributeValues().contains( "description;lang-en: English" ) );
+
+ // edit the attribute to description;lang-en
+ EditAttributeWizardBot editWizardBot = entryEditorBot.editAttribute( "description;lang-en", "English" );
+ editWizardBot.clickNextButton();
+ editWizardBot.setLanguageTag( "en", "us" );
+ editWizardBot.clickFinishButton();
+ modificationLogsViewBot.waitForText( "delete: description;lang-en\ndescription;lang-en: English\n-" );
+ modificationLogsViewBot.waitForText( "add: description;lang-en-us\ndescription;lang-en-us: English\n-" );
+ assertFalse( entryEditorBot.getAttributeValues().contains( "description;lang-en: English" ) );
+ assertTrue( entryEditorBot.getAttributeValues().contains( "description;lang-en-us: English" ) );
+
+ // edit the value
+ entryEditorBot.editValue( "description;lang-en-us", "English" );
+ entryEditorBot.typeValueAndFinish( "English US" );
+ modificationLogsViewBot.waitForText( "delete: description;lang-en-us\ndescription;lang-en-us: English\n-" );
+ modificationLogsViewBot.waitForText( "add: description;lang-en-us\ndescription;lang-en-us: English US\n-" );
+ assertFalse( entryEditorBot.getAttributeValues().contains( "description;lang-en-us: English" ) );
+ assertTrue( entryEditorBot.getAttributeValues().contains( "description;lang-en-us: English US" ) );
+
+ // delete the attribute
+ entryEditorBot.deleteValue( "description;lang-en-us", "English US" );
+ modificationLogsViewBot.waitForText( "delete: description;lang-en-us\ndescription;lang-en-us: English US\n-" );
+ assertFalse( entryEditorBot.getAttributeValues().contains( "description;lang-en-us: English US" ) );
+ }
+
}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ResourceUtils.java
similarity index 51%
copy from tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java
copy to tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ResourceUtils.java
index 1562294..2fad2f3 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ResourceUtils.java
@@ -17,42 +17,34 @@
* under the License.
*
*/
-package org.apache.directory.studio.test.integration.ui.bots;
+package org.apache.directory.studio.test.integration.ui;
-public class NewAttributeWizardBot extends WizardBot
-{
-
- public NewAttributeWizardBot()
- {
- super( "New Attribute" );
- }
-
-
- public void typeAttributeType( String text )
- {
- bot.comboBox().setText( text );
- }
-
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.UUID;
- public DnEditorDialogBot clickFinishButtonExpectingDnEditor()
- {
- clickFinishButton();
- return new DnEditorDialogBot();
- }
+import org.apache.directory.api.util.IOUtils;
+import org.eclipse.core.runtime.Platform;
- public PasswordEditorDialogBot clickFinishButtonExpectingPasswordEditor()
+public class ResourceUtils
+{
+ public static String prepareInputFile( String inputFileName ) throws IOException
{
- clickFinishButton();
- return new PasswordEditorDialogBot();
- }
+ URL url = Platform.getInstanceLocation().getURL();
+ String destFile = url.getFile() + UUID.randomUUID().toString();
+ try ( InputStream is = ResourceUtils.class.getResourceAsStream( inputFileName );
+ FileOutputStream fos = new FileOutputStream( new File( destFile ) ); )
+ {
+ IOUtils.copy( is, fos );
+ }
- public ImageEditorDialogBot clickFinishButtonExpectingImageEditor()
- {
- clickFinishButton();
- return new ImageEditorDialogBot();
+ return destFile;
}
}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/CertificateEditorDialogBot.java
similarity index 72%
copy from tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java
copy to tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/CertificateEditorDialogBot.java
index 077c618..cdb02c8 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/CertificateEditorDialogBot.java
@@ -20,18 +20,21 @@
package org.apache.directory.studio.test.integration.ui.bots;
-public class HexEditorDialogBot extends DialogBot
+import org.apache.directory.studio.valueeditors.certificate.CertificateDialog;
+
+
+public class CertificateEditorDialogBot extends DialogBot
{
- public HexEditorDialogBot()
+ public CertificateEditorDialogBot()
{
- super( "Hex Editor" );
+ super( "Certificate Editor" );
}
- public String getHexText()
+ public void typeFile( String file )
{
- return bot.text().getText();
+ bot.textWithTooltip( CertificateDialog.LOAD_FILE_NAME_TOOLTIP ).setText( file );
}
}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EditAttributeWizardBot.java
similarity index 66%
copy from tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java
copy to tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EditAttributeWizardBot.java
index 077c618..cba11d2 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EditAttributeWizardBot.java
@@ -20,18 +20,31 @@
package org.apache.directory.studio.test.integration.ui.bots;
-public class HexEditorDialogBot extends DialogBot
+public class EditAttributeWizardBot extends WizardBot
{
- public HexEditorDialogBot()
+ public EditAttributeWizardBot()
{
- super( "Hex Editor" );
+ super( "Edit Attribute Description" );
}
- public String getHexText()
+ public void typeAttributeType( String text )
{
- return bot.text().getText();
+ bot.comboBox().setText( text );
+ }
+
+
+ public void setLanguageTag( String lang, String country )
+ {
+ bot.comboBox( 0 ).setText( lang );
+ bot.comboBox( 1 ).setText( country );
+ }
+
+
+ public void selectBinaryOption()
+ {
+ bot.checkBox().select();
}
}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorBot.java
index 1542c6e..dcae169 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorBot.java
@@ -101,6 +101,12 @@ public class EntryEditorBot
}
+ public EditAttributeWizardBot editAttribute( String attributeType, String value )
+ {
+ return editorBot.editAttribute( attributeType, value );
+ }
+
+
public DnEditorDialogBot editValueExpectingDnEditor( String attributeType, String value )
{
return editorBot.editValueExpectingDnEditor( attributeType, value );
@@ -119,12 +125,19 @@ public class EntryEditorBot
}
- public SubtreeSpecificationEditorDialogBot editValueExpectingSubtreeSpecificationEditor( String attributeType, String value )
+ public SubtreeSpecificationEditorDialogBot editValueExpectingSubtreeSpecificationEditor( String attributeType,
+ String value )
{
return editorBot.editValueExpectingSubtreeSpecificationEditor( attributeType, value );
}
+ public CertificateEditorDialogBot editValueExpectingCertificateEditor( String attributeType, String value )
+ {
+ return editorBot.editValueExpectingCertificateEditor( attributeType, value );
+ }
+
+
public HexEditorDialogBot editValueExpectingHexEditor( String attributeType, String value )
{
return editorBot.editValueExpectingHexEditor( attributeType, value );
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorWidgetBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorWidgetBot.java
index 70bbecc..a768b8a 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorWidgetBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorWidgetBot.java
@@ -126,6 +126,16 @@ class EntryEditorWidgetBot
}
+ EditAttributeWizardBot editAttribute( String attributeType, String value )
+ {
+ cancelEditValue();
+ SWTBotTreeItem treeItem = getTreeItem( attributeType, value );
+ treeItem.select();
+ ContextMenuHelper.clickContextMenu( bot.tree(), "Edit Attribute Description" );
+ return new EditAttributeWizardBot();
+ }
+
+
void editValue( String attributeType, String value )
{
cancelEditValue();
@@ -164,13 +174,21 @@ class EntryEditorWidgetBot
}
- SubtreeSpecificationEditorDialogBot editValueExpectingSubtreeSpecificationEditor( String attributeType, String value )
+ SubtreeSpecificationEditorDialogBot editValueExpectingSubtreeSpecificationEditor( String attributeType,
+ String value )
{
editValue( attributeType, value );
return new SubtreeSpecificationEditorDialogBot();
}
+ CertificateEditorDialogBot editValueExpectingCertificateEditor( String attributeType, String value )
+ {
+ editValue( attributeType, value );
+ return new CertificateEditorDialogBot();
+ }
+
+
HexEditorDialogBot editValueExpectingHexEditor( String attributeType, String value )
{
editValue( attributeType, value );
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java
index 077c618..2d76811 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java
@@ -20,6 +20,9 @@
package org.apache.directory.studio.test.integration.ui.bots;
+import org.apache.directory.studio.ldapbrowser.common.dialogs.HexDialog;
+
+
public class HexEditorDialogBot extends DialogBot
{
@@ -29,6 +32,12 @@ public class HexEditorDialogBot extends DialogBot
}
+ public void typeFile( String file )
+ {
+ bot.textWithTooltip( HexDialog.LOAD_FILE_NAME_TOOLTIP ).setText( file );
+ }
+
+
public String getHexText()
{
return bot.text().getText();
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java
index 1562294..62877bd 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java
@@ -35,6 +35,19 @@ public class NewAttributeWizardBot extends WizardBot
}
+ public void setLanguageTag( String lang, String country )
+ {
+ bot.comboBox( 0 ).setText( lang );
+ bot.comboBox( 1 ).setText( country );
+ }
+
+
+ public void selectBinaryOption()
+ {
+ bot.checkBox().select();
+ }
+
+
public DnEditorDialogBot clickFinishButtonExpectingDnEditor()
{
clickFinishButton();
@@ -55,4 +68,18 @@ public class NewAttributeWizardBot extends WizardBot
return new ImageEditorDialogBot();
}
+
+ public CertificateEditorDialogBot clickFinishButtonExpectingCertificateEditor()
+ {
+ clickFinishButton();
+ return new CertificateEditorDialogBot();
+ }
+
+
+ public HexEditorDialogBot clickFinishButtonExpectingHexEditor()
+ {
+ clickFinishButton();
+ return new HexEditorDialogBot();
+ }
+
}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewEntryWizardBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewEntryWizardBot.java
index 3cf573b..4de6704 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewEntryWizardBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewEntryWizardBot.java
@@ -19,6 +19,7 @@
*/
package org.apache.directory.studio.test.integration.ui.bots;
+
import org.apache.directory.api.ldap.model.name.Dn;
import org.apache.directory.studio.ldapbrowser.core.BrowserCoreMessages;
import org.apache.directory.studio.test.integration.ui.bots.utils.JobWatcher;
@@ -30,7 +31,6 @@ public class NewEntryWizardBot extends WizardBot
private EntryEditorWidgetBot widgetBot;
-
public NewEntryWizardBot()
{
super( TITLE );
@@ -94,6 +94,20 @@ public class NewEntryWizardBot extends WizardBot
}
+ public NewAttributeWizardBot openNewAttributeWizard()
+ {
+ widgetBot.isVisisble();
+ return widgetBot.openNewAttributeWizard();
+ }
+
+
+ public EditAttributeWizardBot editAttribute( String attributeType, String value )
+ {
+ widgetBot.isVisisble();
+ return widgetBot.editAttribute( attributeType, value );
+ }
+
+
public void editValue( String attributeType, String value )
{
widgetBot.isVisisble();
@@ -113,7 +127,7 @@ public class NewEntryWizardBot extends WizardBot
while ( true )
{
String text = bot.text( 1 ).getText();
-
+
if ( Dn.isValid( text ) )
{
return text;
diff --git a/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/ImportExportTest_Modifications.ldif b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/ImportExportTest_Modifications.ldif
index c9672be..5034e9c 100644
--- a/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/ImportExportTest_Modifications.ldif
+++ b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/ImportExportTest_Modifications.ldif
@@ -103,6 +103,12 @@ delete: l
add: description
description:: QSDDqSDigqwg0K8gzrsg16kg2Lkg4ruhIA==
-
+add: description;lang-en
+description;lang-en: English
+-
+add: description;lang-de
+description;lang-de: Deutsch
+-
add: roomNumber
roomNumber: 1234
roomNumber: 2345
@@ -114,8 +120,22 @@ replace: employeeType
employeeType: Intern
-
replace: mail
-mail: mail: user.1@example.com
-mail: mail: Aaccf.Amar@example.com
+mail: user.1@example.com
+mail: Aaccf.Amar@example.com
+-
+add: userCertificate;binary
+userCertificate;binary:: MIICcTCCAdqgAwIBAgIBEjANBgkqhkiG9w0BAQUFADBDMRMwEQYKCZImiZPy
+ LGQBGRYDY29tMRcwFQYKCZImiZPyLGQBGRYHZXhhbXBsZTETMBEGA1UEAxMKRXhhbXBsZSBDQTAeF
+ w0wNDA5MTUxMTQ4MjFaFw0wNTAzMTUxMTQ4MjFaMEMxEzARBgoJkiaJk/IsZAEZFgNjb20xFzAVBg
+ oJkiaJk/IsZAEZFgdleGFtcGxlMRMwEQYDVQQDEwpFbmQgRW50aXR5MIGfMA0GCSqGSIb3DQEBAQU
+ AA4GNADCBiQKBgQDhauQDMJcCPPQQ87UeTX8Ue/b10HjppIrwo3Xs7bZWln+ImYWa8j5od4frntGf
+ wLQX3KuJI6QdfhYjTE+oTfUxuHyq4xpJCfRLJtsnZzCCEgFK6Rq2wQxTi2z8L3pD7DM2fjKye9Wqz
+ wEUxhLsE/ItFHqLIVgUE0xGo5ryFpX/IwIDAQABo3UwczAhBgNVHREEGjAYgRZlbmQuZW50aXR5QG
+ V4YW1wbGUuY29tMB0GA1UdDgQWBBQXe5Iw/0TWZuGQECJsFk/AjkHdbTAfBgNVHSMEGDAWgBQIaK+
+ FM8g5Snr4gpOOcGpKIIQsMjAOBgNVHQ8BAf8EBAMCBsAwDQYJKoZIhvcNAQEFBQADgYEAACAoNFto
+ MgG7CjYOrXHFlRrhBM+urcdiFKQbNjHA4gw92R7AANwQoLqFb0HLYnq3TGOBJl7SgEVeM+dwRTs5O
+ yZKnDvyJjZpCHm7+5ZDd0thi6GrkWTg8zdhPBqjpMmKsr9z1E3kWORi6rwgdJKGDs6EYHbpc7vHhd
+ ORRepiXc0=
dn: uid=user.2,ou=users,ou=system
diff --git a/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert1.cer b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert1.cer
new file mode 100644
index 0000000..bad00d0
Binary files /dev/null and b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert1.cer differ
diff --git a/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert2.cer b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert2.cer
new file mode 100644
index 0000000..34af010
Binary files /dev/null and b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert2.cer differ
diff --git a/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert3.cer b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert3.cer
new file mode 100644
index 0000000..f9613dc
Binary files /dev/null and b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert3.cer differ
diff --git a/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_crl.crl b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_crl.crl
new file mode 100644
index 0000000..a4cc405
Binary files /dev/null and b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_crl.crl differ