blob: e6c30c62321142d0194145e07fd14358520db502 [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;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
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.ldapservers.LdapServersManager;
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.BotUtils;
import org.apache.directory.studio.test.integration.ui.bots.ConnectionFromServerDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.ConnectionsViewBot;
import org.apache.directory.studio.test.integration.ui.bots.ConsoleViewBot;
import org.apache.directory.studio.test.integration.ui.bots.DeleteDialogBot;
import org.apache.directory.studio.test.integration.ui.bots.ModificationLogsViewBot;
import org.apache.directory.studio.test.integration.ui.bots.NewApacheDSServerWizardBot;
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.utils.SWTBotPreferences;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Tests the Apache DS Plugin's UI.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
@RunWith(FrameworkRunnerWithScreenshotCaptureListener.class)
public class ApacheDSPluginTest
{
private StudioBot studioBot;
private ApacheDSServersViewBot serversViewBot;
private ConnectionsViewBot connectionsViewBot;
private ConsoleViewBot consoleViewBot;
@Before
public void setUp() throws Exception
{
studioBot = new StudioBot();
studioBot.resetLdapPerspective();
serversViewBot = studioBot.getApacheDSServersViewBot();
connectionsViewBot = studioBot.getConnectionView();
consoleViewBot = studioBot.getConsoleView();
}
@After
public void tearDown() throws Exception
{
connectionsViewBot.deleteTestConnections();
serversViewBot.deleteTestServers();
Assertions.genericTearDownAssertions();
}
/**
* Run the following tests:
* <ul>
* <li>Creates a new server</li>
* <li>Starts the server</li>
* <li>Creates and uses a connection</li>
* <li>Stops the server</li>
* <li>Deletes the server</li>
* </ul>
*/
@Test
public void serverCreationStartCreateConnectionStopAndDeletion()
{
String serverName = "ServerCreationStartCreateConnectionStopAndDeletion";
createServer( serverName );
setAvailablePorts( serverName );
// Starting the server
serversViewBot.runServer( serverName );
serversViewBot.waitForServerStart( serverName );
// DIRSTUDIO-1077: Check for log output in console to verify logging configuration still works
String consoleText = consoleViewBot.getConsoleText();
assertThat( consoleText, containsString( "You didn't change the admin password" ) );
// Verifying the connections count is 0
assertEquals( 0, getBrowserConnectionsCount() );
// Creating a connection associated with the server
ConnectionFromServerDialogBot connectionFromServerDialogBot = serversViewBot.createConnectionFromServer();
assertTrue( connectionFromServerDialogBot.isVisible() );
connectionFromServerDialogBot.clickOkButton();
// Verifying the connections count is now 1
assertEquals( 1, getBrowserConnectionsCount() );
// Opening the connection
connectionsViewBot.selectConnection( serverName );
connectionsViewBot.openSelectedConnection();
// Getting the associated connection object
Connection connection = getBrowserConnection();
// Checking if the connection is open
assertTrue( connection.getConnectionWrapper().isConnected() );
// Closing the connection
connectionsViewBot.selectConnection( serverName );
connectionsViewBot.closeSelectedConnections();
// Checking if the connection is closed
assertFalse( connection.getConnectionWrapper().isConnected() );
// Deleting the connection
connectionsViewBot.deleteTestConnections();
// Stopping the server
serversViewBot.stopServer( serverName );
serversViewBot.waitForServerStop( serverName );
// Deleting the server
DeleteDialogBot deleteDialogBot = serversViewBot.openDeleteServerDialog();
deleteDialogBot.clickOkButton();
// Verifying the servers count is back to 0
assertEquals( 0, getCoreServersCount() );
assertEquals( 0, serversViewBot.getServersCount() );
}
private void createServer( String serverName )
{
// Showing view
serversViewBot.show();
// Verifying the servers count is 0
assertEquals( 0, getCoreServersCount() );
assertEquals( 0, serversViewBot.getServersCount() );
// Opening wizard
NewApacheDSServerWizardBot wizardBot = serversViewBot.openNewServerWizard();
// Verifying the wizard can't be finished yet
assertFalse( wizardBot.isFinishButtonEnabled() );
// Filling fields of the wizard
wizardBot.selectApacheDS200();
wizardBot.typeServerName( serverName );
// Verifying the wizard can now be finished
assertTrue( wizardBot.isFinishButtonEnabled() );
// Closing wizard
wizardBot.clickFinishButton();
serversViewBot.waitForServer( serverName );
// Verifying the servers count is now 1
assertEquals( 1, getCoreServersCount() );
assertEquals( 1, serversViewBot.getServersCount() );
}
/**
* Verifies that the 'New Server' does not allow the creation of
* 2 servers with the same name.
*/
@Test
public void verifyServerNameCollisionInNewWizard()
{
// Showing view
serversViewBot.show();
// Verifying the servers count is 0
assertEquals( 0, getCoreServersCount() );
assertEquals( 0, serversViewBot.getServersCount() );
// Opening wizard
NewApacheDSServerWizardBot wizardBot = serversViewBot.openNewServerWizard();
// Verifying the wizard can't be finished yet
assertFalse( wizardBot.isFinishButtonEnabled() );
// Filling fields of the wizard
String serverName = "NewServerWizardTest";
wizardBot.selectApacheDS200();
wizardBot.typeServerName( serverName );
// Verifying the wizard can now be finished
assertTrue( wizardBot.isFinishButtonEnabled() );
// Closing wizard
wizardBot.clickFinishButton();
serversViewBot.waitForServer( serverName );
// Verifying the servers count is now 1
assertEquals( 1, getCoreServersCount() );
assertEquals( 1, serversViewBot.getServersCount() );
// Opening wizard
wizardBot = serversViewBot.openNewServerWizard();
// Verifying the wizard can't be finished yet
assertFalse( wizardBot.isFinishButtonEnabled() );
// Filling fields of the wizard
wizardBot.selectApacheDS200();
wizardBot.typeServerName( serverName );
// Verifying the wizard can't be finished (because a server with
// same name already exists)
assertFalse( wizardBot.isFinishButtonEnabled() );
// Canceling wizard
wizardBot.clickCancelButton();
// Selecting the server row
serversViewBot.selectServer( serverName );
// Deleting the server
DeleteDialogBot deleteDialogBot = serversViewBot.openDeleteServerDialog();
deleteDialogBot.clickOkButton();
// Verifying the servers count is back to 0
assertEquals( 0, getCoreServersCount() );
assertEquals( 0, serversViewBot.getServersCount() );
}
private void setAvailablePorts( String serverName )
{
ApacheDSConfigurationEditorBot editorBot = serversViewBot.openConfigurationEditor( serverName );
editorBot.setAvailablePorts();
editorBot.save();
editorBot.close();
}
/**
* Gets the servers count found in the core of the plugin.
*
* @return
* the servers count found in the core of the plugin
*/
private int getCoreServersCount()
{
LdapServersManager serversHandler = LdapServersManager.getDefault();
if ( serversHandler != null )
{
return serversHandler.getServersList().size();
}
return 0;
}
/**
* Get the connections count found in the LDAP Browser.
*
* @return
* the connections count found in the LDAP Browser
*/
private int getBrowserConnectionsCount()
{
ConnectionFolderManager connectionFolderManager = ConnectionCorePlugin.getDefault()
.getConnectionFolderManager();
if ( connectionFolderManager != null )
{
ConnectionFolder rootConnectionFolder = connectionFolderManager.getRootConnectionFolder();
if ( rootConnectionFolder != null )
{
return rootConnectionFolder.getConnectionIds().size();
}
}
return 0;
}
/**
* Get the connections count found in the LDAP Browser.
*
* @return
* the connections count found in the LDAP Browser
*/
private Connection getBrowserConnection()
{
ConnectionFolderManager connectionFolderManager = ConnectionCorePlugin.getDefault()
.getConnectionFolderManager();
ConnectionManager connectionManager = ConnectionCorePlugin.getDefault().getConnectionManager();
if ( connectionFolderManager != null )
{
ConnectionFolder rootConnectionFolder = connectionFolderManager.getRootConnectionFolder();
if ( rootConnectionFolder != null )
{
return connectionManager.getConnectionById( rootConnectionFolder.getConnectionIds().get( 0 ) );
}
}
return null;
}
/**
* Test for DIRSTUDIO-1080: edit the server configuration via remote connection.
*/
@Test
public void editRemoteConfig()
{
String serverName = "EditRemoteConfig";
createServer( serverName );
setAvailablePorts( serverName );
// Start the server
serversViewBot.runServer( serverName );
serversViewBot.waitForServerStart( serverName );
// Create a connection associated with the server
ConnectionFromServerDialogBot connectionFromServerDialogBot = serversViewBot.createConnectionFromServer();
connectionFromServerDialogBot.clickOkButton();
// Open the connection
connectionsViewBot.selectConnection( serverName );
connectionsViewBot.openSelectedConnection();
// Open the config editor and load remote config
ApacheDSConfigurationEditorBot remoteEditorBot = connectionsViewBot.openApacheDSConfiguration();
// Remember old ports
int oldLdapPort = remoteEditorBot.getLdapPort();
int oldLdapsPort = remoteEditorBot.getLdapsPort();
// Set new ports
remoteEditorBot.setAvailablePorts();
int newLdapPort = remoteEditorBot.getLdapPort();
int newLdapsPort = remoteEditorBot.getLdapsPort();
// Save the config editor
remoteEditorBot.save();
remoteEditorBot.close();
// Verify new port settings went over the network
ModificationLogsViewBot modificationLogsViewBot = studioBot.getModificationLogsViewBot();
modificationLogsViewBot.waitForText( "add: ads-systemPort" );
String modificationLogsText = modificationLogsViewBot.getModificationLogsText();
assertThat( modificationLogsText,
containsString( "delete: ads-systemPort\nads-systemPort: " + oldLdapPort + "\n" ) );
assertThat( modificationLogsText,
containsString( "add: ads-systemPort\nads-systemPort: " + newLdapPort + "\n" ) );
assertThat( modificationLogsText,
containsString( "delete: ads-systemPort\nads-systemPort: " + oldLdapsPort + "\n" ) );
assertThat( modificationLogsText,
containsString( "add: ads-systemPort\nads-systemPort: " + newLdapsPort + "\n" ) );
// Verify new port settings are visible in local config editor
ApacheDSConfigurationEditorBot localEditorBot = serversViewBot.openConfigurationEditor( serverName );
assertEquals( newLdapPort, localEditorBot.getLdapPort() );
assertEquals( newLdapsPort, localEditorBot.getLdapsPort() );
localEditorBot.close();
// Close the connection
connectionsViewBot.selectConnection( serverName );
connectionsViewBot.closeSelectedConnections();
// Delete the connection
connectionsViewBot.deleteTestConnections();
// Stopping the server
serversViewBot.stopServer( serverName );
serversViewBot.waitForServerStop( serverName );
// Deleting the server
DeleteDialogBot deleteDialogBot = serversViewBot.openDeleteServerDialog();
deleteDialogBot.clickOkButton();
}
/**
* Test for DIRSTUDIO-1118: Run repair
*/
@Test
public void repairAndStartAndStop()
{
String serverName = "Repair";
createServer( serverName );
setAvailablePorts( serverName );
// Repair the server
serversViewBot.repairServer( serverName );
consoleViewBot.waitForConsoleText("Database repaired");
serversViewBot.waitForServerStop( serverName );
// Wait a bit more after repair, another weird race condition...
BotUtils.sleep( SWTBotPreferences.TIMEOUT );
// Start the server after repair
serversViewBot.runServer( serverName );
serversViewBot.waitForServerStart( serverName );
// TODO: newer version of ApacheDS may log to console
// Stopping the server
serversViewBot.stopServer( serverName );
serversViewBot.waitForServerStop( serverName );
// Deleting the server
DeleteDialogBot deleteDialogBot = serversViewBot.openDeleteServerDialog();
deleteDialogBot.clickOkButton();
}
/**
* Test for DIRSTUDIO-1120: Checkbox active protocols
*/
@Test
public void testSetEnabledProtocols() throws Exception
{
String serverName = "SetEnabledProtocols";
createServer( serverName );
ApacheDSConfigurationEditorBot editorBot = serversViewBot.openConfigurationEditor( serverName );
// assert not enabled yet
assertFalse( editorBot.isSSLv3Enabled() );
assertFalse( editorBot.isTLSv1Enabled() );
assertFalse( editorBot.isTLSv1_1Enabled() );
assertFalse( editorBot.isTLSv1_2Enabled() );
// enable
editorBot.enableSSLv3();
editorBot.enableTLSv1();
editorBot.enableTLSv1_1();
editorBot.enableTLSv1_2();
editorBot.save();
editorBot.close();
// re-open and assert enabled
editorBot = serversViewBot.openConfigurationEditor( serverName );
assertTrue( editorBot.isSSLv3Enabled() );
assertTrue( editorBot.isTLSv1Enabled() );
assertTrue( editorBot.isTLSv1_1Enabled() );
assertTrue( editorBot.isTLSv1_2Enabled() );
editorBot.close();
// Deleting the server
DeleteDialogBot deleteDialogBot = serversViewBot.openDeleteServerDialog();
deleteDialogBot.clickOkButton();
}
}