/*******************************************************************************
* Copyright (c) 2007-2016 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 v 1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.openshift.ui.bot.test.application.v3.adapter;
import static org.junit.Assert.assertTrue;
import org.hamcrest.core.Is;
import org.hamcrest.core.StringContains;
import org.jboss.reddeer.common.exception.WaitTimeoutExpiredException;
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.JobIsKilled;
import org.jboss.reddeer.core.condition.JobIsRunning;
import org.jboss.reddeer.core.condition.ShellWithTextIsAvailable;
import org.jboss.reddeer.eclipse.wst.server.ui.view.ServersView;
import org.jboss.reddeer.eclipse.wst.server.ui.wizard.NewServerWizardDialog;
import org.jboss.reddeer.eclipse.wst.server.ui.wizard.NewServerWizardPage;
import org.jboss.reddeer.swt.condition.WidgetIsEnabled;
import org.jboss.reddeer.swt.impl.button.BackButton;
import org.jboss.reddeer.swt.impl.button.FinishButton;
import org.jboss.reddeer.swt.impl.button.NextButton;
import org.jboss.reddeer.swt.impl.menu.ContextMenu;
import org.jboss.reddeer.swt.impl.shell.DefaultShell;
import org.jboss.reddeer.swt.impl.text.LabeledText;
import org.jboss.reddeer.swt.impl.tree.DefaultTreeItem;
import org.jboss.tools.openshift.reddeer.condition.AmountOfResourcesExists;
import org.jboss.tools.openshift.reddeer.condition.OpenShiftResourceExists;
import org.jboss.tools.openshift.reddeer.condition.ServerAdapterExists;
import org.jboss.tools.openshift.reddeer.enums.Resource;
import org.jboss.tools.openshift.reddeer.enums.ResourceState;
import org.jboss.tools.openshift.reddeer.exception.OpenShiftToolsException;
import org.jboss.tools.openshift.reddeer.requirement.OpenShiftCommandLineToolsRequirement.OCBinary;
import org.jboss.tools.openshift.reddeer.requirement.OpenShiftConnectionRequirement.RequiredBasicConnection;
import org.jboss.tools.openshift.reddeer.utils.DatastoreOS3;
import org.jboss.tools.openshift.reddeer.utils.OpenShiftLabel;
import org.jboss.tools.openshift.reddeer.utils.TestUtils;
import org.jboss.tools.openshift.reddeer.view.OpenShiftExplorerView;
import org.jboss.tools.openshift.reddeer.view.resources.ServerAdapter;
import org.jboss.tools.openshift.reddeer.view.resources.ServerAdapter.Version;
import org.jboss.tools.openshift.ui.bot.test.application.v3.create.AbstractCreateApplicationTest;
import org.junit.After;
import org.junit.BeforeClass;
import org.junit.Test;
@OCBinary
@RequiredBasicConnection
public class CreateServerAdapterTest extends AbstractCreateApplicationTest {
private static final String JOB_NAME = "Refreshing server adapter list";
@BeforeClass
public static void waitTillApplicationIsRunning() {
new WaitWhile(new OpenShiftResourceExists(Resource.BUILD, "eap-app-1", ResourceState.RUNNING),
TimePeriod.getCustom(600));
new WaitUntil(new AmountOfResourcesExists(Resource.POD, 2), TimePeriod.LONG, false);
}
@Test
public void testCreateOpenShift3ServerAdapterViaShellMenu() {
NewServerWizardDialog dialog = new NewServerWizardDialog();
NewServerWizardPage page = new NewServerWizardPage();
dialog.open();
page.selectType(OpenShiftLabel.Others.OS3_SERVER_ADAPTER);
next();
next();
setAdapterDetailsAndCreateAdapterAndVerifyExistence();
}
@Test
public void testCreateOpenShift3ServerAdapterViaServersView() {
ServersView serversView = new ServersView();
serversView.open();
new ContextMenu(OpenShiftLabel.ContextMenu.NEW_SERVER).select();
new DefaultShell(OpenShiftLabel.Shell.ADAPTER);
new DefaultTreeItem(OpenShiftLabel.Others.OS3_SERVER_ADAPTER).select();
next();
next();
setAdapterDetailsAndCreateAdapterAndVerifyExistence();
}
@Test
public void testCreateOpenShift3ServerAdapterViaOpenShiftExplorerView() {
OpenShiftExplorerView explorer = new OpenShiftExplorerView();
explorer.getOpenShift3Connection().getProject().getService("eap-app").select();
new ContextMenu(OpenShiftLabel.ContextMenu.NEW_ADAPTER_FROM_EXPLORER).select();
new DefaultShell(OpenShiftLabel.Shell.SERVER_ADAPTER_SETTINGS);
assertTrue("Service should be preselected for new OpenShift 3 server adapter",
new DefaultTreeItem(DatastoreOS3.PROJECT1, "eap-app deploymentConfig=eap-app").isSelected());
assertTrue("Eclipse project should be preselected automatically for new server adapter",
new LabeledText("Eclipse Project: ").getText().equals(PROJECT_NAME));
new FinishButton().click();
new WaitWhile(new ShellWithTextIsAvailable(""));
new WaitWhile(new JobIsRunning(), TimePeriod.LONG, false);
assertTrue("OpenShift 3 server adapter was not created.",
new ServerAdapterExists(Version.OPENSHIFT3, BUILD_CONFIG, "Service").test());
}
private void setAdapterDetailsAndCreateAdapterAndVerifyExistence() {
new LabeledText("Eclipse Project: ").setText(PROJECT_NAME);
new DefaultTreeItem(DatastoreOS3.PROJECT1).getItems().get(0).select();
next();
finishNewServerAdapterWizardAndVerifyExistence();
}
public void finishNewServerAdapterWizardAndVerifyExistence() {
new FinishButton().click();
new WaitWhile(new ShellWithTextIsAvailable(OpenShiftLabel.Shell.ADAPTER));
boolean jobExists = false;
try {
new WaitUntil(new JobIsRunning(new StringContains(JOB_NAME)), TimePeriod.getCustom(5));
jobExists = true;
} catch (WaitTimeoutExpiredException e) {
// job is not running, do nothing
}
if (jobExists) {
new WaitUntil(new JobIsKilled(JOB_NAME), TimePeriod.LONG);
}
assertTrue("OpenShift 3 server adapter was not created.",
new ServerAdapterExists(Version.OPENSHIFT3, BUILD_CONFIG, "Service").test());
}
private void next() {
new WaitUntil(new WidgetIsEnabled(new NextButton()));
new NextButton().click();
TestUtils.acceptSSLCertificate();
new WaitUntil(new WidgetIsEnabled(new BackButton()));
}
@After
public void removeAdapterIfExists() {
try {
new WaitWhile(new JobIsRunning(), TimePeriod.LONG);
new ServerAdapter(Version.OPENSHIFT3, BUILD_CONFIG, "Service").delete();
} catch (OpenShiftToolsException ex) {
// do nothing, adapter does not exists
}
}
}