/*******************************************************************************
* Copyright (c) 2017 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.cdk.ui.bot.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.jboss.reddeer.common.exception.RedDeerException;
import org.jboss.reddeer.common.exception.WaitTimeoutExpiredException;
import org.jboss.reddeer.common.logging.Logger;
import org.jboss.reddeer.common.wait.TimePeriod;
import org.jboss.reddeer.common.wait.WaitUntil;
import org.jboss.reddeer.common.wait.WaitWhile;
import org.jboss.reddeer.core.condition.JobIsRunning;
import org.jboss.reddeer.core.condition.WidgetIsFound;
import org.jboss.reddeer.core.matcher.ClassMatcher;
import org.jboss.reddeer.core.matcher.WithMnemonicTextMatcher;
import org.jboss.reddeer.core.matcher.WithTextMatcher;
import org.jboss.reddeer.eclipse.wst.server.ui.view.Server;
import org.jboss.reddeer.eclipse.wst.server.ui.view.ServersView;
import org.jboss.reddeer.eclipse.wst.server.ui.view.ServersViewEnums.ServerState;
import org.jboss.reddeer.eclipse.wst.server.ui.view.ServersViewException;
import org.jboss.reddeer.jface.exception.JFaceLayerException;
import org.jboss.reddeer.jface.viewer.handler.TreeViewerHandler;
import org.jboss.reddeer.swt.api.TreeItem;
import org.jboss.reddeer.swt.impl.button.PushButton;
import org.jboss.reddeer.swt.impl.clabel.DefaultCLabel;
import org.jboss.reddeer.swt.impl.tree.DefaultTree;
import org.jboss.reddeer.workbench.ui.dialogs.WorkbenchPreferenceDialog;
import org.jboss.tools.cdk.reddeer.preferences.OpenShift3SSLCertificatePreferencePage;
import org.jboss.tools.cdk.reddeer.ui.CDEServersView;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
public abstract class CDKDevstudioAbstractTest {
protected ServersView serversView;
protected Server server;
private static final Logger log = Logger.getLogger(CDKDevstudioAbstractTest.class);
protected static final String USERNAME;
protected static final String PASSWORD;
private static final String CREDENTIALS_DOMAIN = "access.redhat.com"; //$NON-NLS-1$
static {
USERNAME = getSystemProperty("developers.username"); //$NON-NLS-1$
PASSWORD = getSystemProperty("developers.password"); //$NON-NLS-1$
}
protected static String getSystemProperty(String systemProperty) {
String property = System.getProperty(systemProperty);
if (!(property == null || property.equals("") || property.startsWith("${"))) { //$NON-NLS-1$ //$NON-NLS-2$
return property;
}
return null;
}
protected abstract Server getCDEServer();
protected abstract ServersView getServersView();
protected abstract void setServersView(ServersView view);
protected abstract void setCDEServer(Server server);
protected abstract String getServerAdapter();
private static void checkCredentials() {
if (USERNAME == null || PASSWORD== null) {
throw new RedDeerException("Credentials for Red Hat Developers were not set properly"); //$NON-NLS-1$
}
log.info("Red Hat Developers username " + USERNAME + " and given password are set"); //$NON-NLS-1$ //$NON-NLS-2$
}
@BeforeClass
public static void setUpEnvironemnt() {
log.info("Checking given program arguments"); //$NON-NLS-1$
checkCredentials();
new WaitWhile(new JobIsRunning(), TimePeriod.LONG, false);
}
@Before
public void setUpServers() {
log.info("Open Servers view tab"); //$NON-NLS-1$
setServersView(new CDEServersView());
getServersView().open();
log.info("Getting server object from Servers View with name: " + getServerAdapter()); //$NON-NLS-1$
setCDEServer(getServersView().getServer(getServerAdapter()));
new WaitUntil(new JobIsRunning(), TimePeriod.NORMAL, false);
}
@After
public void tearDownServers() {
if (getCDEServer().getLabel().getState() == ServerState.STARTED) {
getCDEServer().stop();
}
// remove SSL Certificate to be added at next server start at method annotated with before
deleteCertificates();
setCDEServer(null);
getServersView().close();
}
protected void startServerAdapter() {
log.info("Starting server adapter"); //$NON-NLS-1$
try {
getCDEServer().start();
} catch (ServersViewException e) {
log.error(e.getMessage());
e.printStackTrace();
}
printCertificates();
checkAvailableServers();
assertEquals(ServerState.STARTED, getCDEServer().getLabel().getState());
}
private void checkAvailableServers() {
for (Server serverItem : getServersView().getServers()) {
String serverName = serverItem.getLabel().getName();
log.info(serverName);
}
assertTrue(getCDEServer().getLabel().getName().contains(getServerAdapter()));
}
private static void printCertificates() {
WorkbenchPreferenceDialog dialog = new WorkbenchPreferenceDialog();
dialog.open();
OpenShift3SSLCertificatePreferencePage preferencePage = new OpenShift3SSLCertificatePreferencePage();
dialog.select(preferencePage);
preferencePage.printCertificates();
dialog.ok();
}
private static void deleteCertificates() {
WorkbenchPreferenceDialog dialog = new WorkbenchPreferenceDialog();
dialog.open();
OpenShift3SSLCertificatePreferencePage preferencePage = new OpenShift3SSLCertificatePreferencePage();
dialog.select(preferencePage);
preferencePage.deleteAll();
preferencePage.apply();
dialog.ok();
}
// removes access redhat com credentials used for first cdk run
protected static void removeAccessRedHatCredentials() {
WorkbenchPreferenceDialog dialog = new WorkbenchPreferenceDialog();
dialog.open();
dialog.select("JBoss Tools", "Credentials"); //$NON-NLS-1$ //$NON-NLS-2$
try {
new WaitUntil(new WidgetIsFound<org.eclipse.swt.custom.CLabel>(
new ClassMatcher(org.eclipse.swt.custom.CLabel.class),
new WithMnemonicTextMatcher("Credentials")), TimePeriod.NORMAL); //$NON-NLS-1$
new DefaultCLabel("Credentials"); //$NON-NLS-1$
DefaultTree tree = new DefaultTree(1);
TreeItem item = TreeViewerHandler.getInstance().getTreeItem(tree, new String[]{CREDENTIALS_DOMAIN, USERNAME});
item.select();
new PushButton(new WithTextMatcher("Remove User")).click(); //$NON-NLS-1$
new WaitUntil(new JobIsRunning(), TimePeriod.NORMAL, false);
} catch (WaitTimeoutExpiredException exc) {
log.error("JBoss Tools - Credentials preferences page has timed out"); //$NON-NLS-1$
exc.printStackTrace();
} catch (JFaceLayerException exc) {
log.error("JBoss Tools - Credentials does not contain required username to be deleted"); //$NON-NLS-1$
exc.printStackTrace();
} finally {
dialog.ok();
}
}
}