blob: 4775860ed776425529f6b8179a3811b37b472649 [file] [log] [blame]
/*
* 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 static org.apache.directory.studio.test.integration.ui.Constants.LOCALHOST;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.directory.studio.connection.core.Connection;
import org.apache.directory.studio.connection.core.ConnectionCorePlugin;
import org.apache.directory.studio.connection.core.ConnectionFolder;
import org.apache.directory.studio.connection.core.ConnectionFolderManager;
import org.apache.directory.studio.connection.core.ConnectionManager;
import org.apache.directory.studio.connection.core.ConnectionParameter;
import org.apache.directory.studio.connection.core.ConnectionParameter.AuthenticationMethod;
import org.apache.directory.studio.connection.core.ConnectionParameter.EncryptionMethod;
import org.apache.directory.studio.connection.core.Messages;
import org.apache.directory.studio.connection.core.jobs.OpenConnectionsRunnable;
import org.apache.directory.studio.connection.core.jobs.StudioConnectionJob;
import org.apache.directory.studio.test.integration.junit5.TestLdapServer;
import org.apache.directory.studio.test.integration.ui.ContextMenuHelper;
import org.apache.directory.studio.test.integration.ui.bots.utils.JobWatcher;
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
import org.eclipse.swtbot.swt.finder.utils.TableCollection;
import org.eclipse.swtbot.swt.finder.utils.TableRow;
import org.eclipse.swtbot.swt.finder.waits.DefaultCondition;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
public class ConnectionsViewBot
{
private SWTWorkbenchBot bot = new SWTWorkbenchBot();
public NewConnectionWizardBot openNewConnectionWizard()
{
ContextMenuHelper.clickContextMenu( getConnectionsTree(), "New Connection..." );
NewConnectionWizardBot newConnectionWizardBot = new NewConnectionWizardBot();
return newConnectionWizardBot;
}
public NewConnectionFolderDialogBot openNewConnectionFolderDialog()
{
ContextMenuHelper.clickContextMenu( getConnectionsTree(), "New Connection Folder..." );
return new NewConnectionFolderDialogBot();
}
public void openSelectedConnection()
{
JobWatcher watcher = new JobWatcher( Messages.jobs__open_connections_name_1 );
getConnectionsTree().contextMenu( "Open Connection" ).click();
watcher.waitUntilDone();
}
public void openSelectedConnectionExpectingVerifyMasterPasswordDialog( String masterPassword )
{
JobWatcher watcher = new JobWatcher( Messages.jobs__open_connections_name_1 );
getConnectionsTree().contextMenu( "Open Connection" ).click();
VerifyMasterPasswordDialogBot verifyMasterPasswordDialogBot = new VerifyMasterPasswordDialogBot();
verifyMasterPasswordDialogBot.enterMasterPassword( masterPassword );
verifyMasterPasswordDialogBot.clickOkButton();
watcher.waitUntilDone();
}
public ErrorDialogBot openSelectedConnectionExpectingNoSchemaProvidedErrorDialog()
{
String shellText = BotUtils.shell( () -> {
JobWatcher watcher = new JobWatcher( Messages.jobs__open_connections_name_1 );
getConnectionsTree().contextMenu( "Open Connection" ).click();
watcher.waitUntilDone();
}, "Problem Occurred" ).getText();
return new ErrorDialogBot( shellText );
}
public void closeSelectedConnections()
{
JobWatcher watcher = new JobWatcher( Messages.jobs__close_connections_name_1 );
getConnectionsTree().contextMenu( "Close Connection" ).click();
watcher.waitUntilDone();
}
public SchemaBrowserBot openSchemaBrowser()
{
ContextMenuHelper.clickContextMenu( getConnectionsTree(), "Open Schema Browser" );
return new SchemaBrowserBot();
}
public DeleteDialogBot openDeleteConnectionDialog()
{
getConnectionsTree().contextMenu( "Delete Connection" ).click();
return new DeleteDialogBot( DeleteDialogBot.DELETE_CONNECTION );
}
public DeleteDialogBot openDeleteConnectionFolderDialog()
{
getConnectionsTree().contextMenu( DeleteDialogBot.DELETE_CONNECTION_FOLDER ).click();
return new DeleteDialogBot( DeleteDialogBot.DELETE_CONNECTION_FOLDER );
}
public ExportConnectionsWizardBot openExportConnectionsWizard()
{
getConnectionsTree().contextMenu( "Export" ).contextMenu( "Export Connections..." ).click();
return new ExportConnectionsWizardBot();
}
public ImportConnectionsWizardBot openImportConnectionsWizard()
{
getConnectionsTree().contextMenu( "Import" ).contextMenu( "Import Connections..." ).click();
return new ImportConnectionsWizardBot();
}
public ApacheDSConfigurationEditorBot openApacheDSConfiguration()
{
getConnectionsTree().contextMenu( "Open Configuration" ).click();
String title = getSelection() + " - Configuration";
return new ApacheDSConfigurationEditorBot( title );
}
public void select( String... path )
{
List<String> pathList = new ArrayList<String>( Arrays.asList( path ) );
SWTBotTreeItem item = getConnectionsTree().getTreeItem( pathList.remove( 0 ) );
while ( !pathList.isEmpty() )
{
item = item.getNode( pathList.remove( 0 ) );
}
item.select();
}
public String getSelection()
{
TableCollection selection = getConnectionsTree().selection();
if ( selection != null && selection.rowCount() == 1 )
{
TableRow row = selection.get( 0 );
return row.get( 0 );
}
return null;
}
public int getCount()
{
return getConnectionsTree().visibleRowCount();
}
private SWTBotTree getConnectionsTree()
{
SWTBotView view = bot.viewByTitle( "Connections" );
view.show();
SWTBotTree tree = view.bot().tree();
return tree;
}
public void waitForConnection( final String connectionName )
{
bot.waitUntil( new DefaultCondition()
{
public boolean test() throws Exception
{
for ( SWTBotTreeItem item : getConnectionsTree().getAllItems() )
{
String text = item.getText();
if ( text.startsWith( connectionName ) )
{
return true;
}
}
return false;
}
public String getFailureMessage()
{
return "Connection " + connectionName + " not visible in connections view.";
}
} );
}
public Connection createTestConnection( TestLdapServer server ) throws Exception
{
return createTestConnection( server.getType().name(), server.getHost(),
server.getPort(), server.getAdminDn(),
server.getAdminPassword() );
}
/**
* Creates the test connection.
*
* @param name
* the name of the connection
* @param port
* the port to use
*
* @return the connection
*
*/
public Connection createTestConnection( String name, int port ) throws Exception
{
return createTestConnection( name, LOCALHOST, port, "uid=admin,ou=system", "secret" );
}
public Connection createTestConnection( String name, String host, int port, String bindDn, String bindPassword )
throws Exception
{
name = name + "_" + System.currentTimeMillis();
ConnectionManager connectionManager = ConnectionCorePlugin.getDefault().getConnectionManager();
ConnectionParameter connectionParameter = new ConnectionParameter();
connectionParameter.setName( name );
connectionParameter.setHost( host );
connectionParameter.setPort( port );
connectionParameter.setEncryptionMethod( EncryptionMethod.NONE );
connectionParameter.setAuthMethod( AuthenticationMethod.SIMPLE );
connectionParameter.setBindPrincipal( bindDn );
connectionParameter.setBindPassword( bindPassword );
Connection connection = new Connection( connectionParameter );
connectionManager.addConnection( connection );
ConnectionFolderManager connectionFolderManager = ConnectionCorePlugin.getDefault()
.getConnectionFolderManager();
ConnectionFolder rootConnectionFolder = connectionFolderManager.getRootConnectionFolder();
rootConnectionFolder.addConnectionId( connection.getId() );
select( name );
StudioConnectionJob job = new StudioConnectionJob( new OpenConnectionsRunnable( connection ) );
job.execute();
job.join();
return connection;
}
/**
* Deletes the test connection.
*/
public void deleteTestConnections()
{
ConnectionManager connectionManager = ConnectionCorePlugin.getDefault().getConnectionManager();
for ( Connection connection : connectionManager.getConnections() )
{
connectionManager.removeConnection( connection );
}
ConnectionFolderManager connectionFolderManager = ConnectionCorePlugin.getDefault()
.getConnectionFolderManager();
for ( ConnectionFolder connectionFolder : connectionFolderManager.getConnectionFolders() )
{
connectionFolderManager.removeConnectionFolder( connectionFolder );
}
}
}