/*******************************************************************************
* Copyright (c) 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 v1.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.docker.ui.bot.test.ui;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.apache.commons.lang.StringUtils;
import org.jboss.ide.eclipse.as.reddeer.server.deploy.DeployOnServer;
import org.jboss.reddeer.common.wait.TimePeriod;
import org.jboss.reddeer.common.wait.WaitWhile;
import org.jboss.reddeer.core.condition.JobIsRunning;
import org.jboss.reddeer.eclipse.condition.ConsoleHasNoChange;
import org.jboss.reddeer.eclipse.jdt.ui.packageexplorer.PackageExplorer;
import org.jboss.reddeer.eclipse.ui.browser.BrowserView;
import org.jboss.reddeer.jface.preference.PreferenceDialog;
import org.jboss.reddeer.swt.api.Menu;
import org.jboss.reddeer.swt.exception.SWTLayerException;
import org.jboss.reddeer.swt.impl.button.FinishButton;
import org.jboss.reddeer.swt.impl.button.OkButton;
import org.jboss.reddeer.swt.impl.combo.LabeledCombo;
import org.jboss.reddeer.swt.impl.menu.ContextMenu;
import org.jboss.reddeer.swt.impl.menu.ShellMenu;
import org.jboss.reddeer.swt.impl.shell.DefaultShell;
import org.jboss.reddeer.workbench.ui.dialogs.WorkbenchPreferenceDialog;
import org.jboss.tools.docker.reddeer.preferences.DockerComposePreferencePage;
import org.jboss.tools.docker.reddeer.ui.DockerImagesTab;
import org.jboss.tools.docker.ui.bot.test.image.AbstractImageBotTest;
import org.junit.After;
import org.junit.Test;
/**
*
* @author jkopriva@redhat.com
*
*/
public class ComposeTest extends AbstractImageBotTest {
private static final String FILE_DOCKER_COMPOSE = "docker-compose.yml";
private static final String SYSPROP_DOCKER_COMPOSE_PATH = "dockerComposePath";
private static final String PATH_TEST_COMPOSE = "resources/test-compose";
private static final String PROJECT_TEST_COMPOSE = "test-compose";
private static final String IMAGE_NAME = "test_compose";
private static final String URL = "http://0.0.0.0:5000/";
@Test
public void testCompose() {
String dockerComposePath = System.getProperty(SYSPROP_DOCKER_COMPOSE_PATH);
assertTrue("Please provide -D" + SYSPROP_DOCKER_COMPOSE_PATH + "=<path to docker-compose binary> in your launch parameters.",
!StringUtils.isBlank(dockerComposePath));
// Set up Docker Compose location
PreferenceDialog dialog = new WorkbenchPreferenceDialog();
DockerComposePreferencePage composePreference = new DockerComposePreferencePage();
dialog.open();
dialog.select(composePreference);
composePreference.setPathToDockerCompose(dockerComposePath);
composePreference.apply();
new OkButton().click();
// Build Image
DockerImagesTab imagesTab = openDockerImagesTab();
buildImage(IMAGE_NAME, PATH_TEST_COMPOSE, imagesTab);
assertConsoleSuccess();
// Import resource folder
importProject(PATH_TEST_COMPOSE);
// Run Docker Compose
runDockerCompose(PROJECT_TEST_COMPOSE, FILE_DOCKER_COMPOSE);
// Check if application is running
BrowserView browserView = new BrowserView();
browserView.open();
browserView.openPageURL(URL);
DeployOnServer.checkBrowserForErrorPage(browserView, URL);
}
private void runDockerCompose(String project, String projectFile) {
PackageExplorer pe = new PackageExplorer();
pe.open();
pe.getProject(project).getProjectItem(projectFile).select();
Menu contextMenu = new ContextMenu("Run As", "2 Docker Compose");
contextMenu.select();
new OkButton().click();
try {
new DefaultShell("Docker Compose");
new OkButton().click();
fail("Docker Compose has not been found! Is it installed and the path is correct?");
} catch (SWTLayerException ex) {
}
new WaitWhile(new JobIsRunning(), TimePeriod.VERY_LONG);
new WaitWhile(new ConsoleHasNoChange());
}
private void importProject(String path) {
new ShellMenu("File", "Open Projects from File System...").select();
new LabeledCombo("Import source:").setText(path);
new FinishButton().click();
new WaitWhile(new JobIsRunning());
}
@After
public void after() {
deleteImageContainerAfter("testcompose_web_1","testcompose_redis_1","testcompose_web","test_compose", "python:2.7","redis");
cleanUpWorkspace();
}
}