/*******************************************************************************
* 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
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.eclipse.linuxtools.docker.integration.tests.image;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.eclipse.linuxtools.docker.integration.tests.mock.MockDockerConnectionManager;
import org.eclipse.linuxtools.docker.reddeer.ui.DockerImageHierarchyTab;
import org.eclipse.linuxtools.docker.reddeer.ui.DockerImagesTab;
import org.eclipse.linuxtools.internal.docker.core.DockerConnection;
import org.eclipse.linuxtools.internal.docker.ui.testutils.MockDockerClientFactory;
import org.eclipse.linuxtools.internal.docker.ui.testutils.MockDockerConnectionFactory;
import org.eclipse.linuxtools.internal.docker.ui.testutils.MockImageFactory;
import org.jboss.reddeer.common.wait.WaitWhile;
import org.jboss.reddeer.core.condition.ShellWithTextIsAvailable;
import org.jboss.reddeer.swt.api.TreeItem;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.spotify.docker.client.DockerClient;
import com.spotify.docker.client.messages.Image;
/**
*
* @author jkopriva@redhat.com
* @cotributor adietish@redhat.com
*
*/
public class HierarchyViewTest extends AbstractImageBotTest {
private static final int DAEMON_MAJOR_VERSION = 11;
private static final int DAEMON_MINOR_VERSION = 1;
private DockerConnection connection;
@Before
public void before() {
deleteAllConnections();
getConnection();
}
@Test
public void testHierarchyView() {
DockerImagesTab imageTab = openDockerImagesTab();
buildImage(IMAGE_TEST_BUILD, DOCKERFILE_FOLDER, imageTab);
if (mockitoIsUsed()) {
buildImage();
}
DockerImageHierarchyTab hierarchyTab = openDockerImageHierarchyTab();
List<TreeItem> treeItems = hierarchyTab.getTreeItems();
compareTextInFirstNode(treeItems, "alpine:3.3");
List<TreeItem> treeItems2 = treeItems.get(0).getItems();
compareTextInFirstNode(treeItems2, IMAGE_TEST_BUILD + NAME_TAG_SEPARATOR + IMAGE_TAG_LATEST);
}
public void compareTextInFirstNode(List<TreeItem> treeItems, String expectedValue) {
String nodeText = treeItems.get(0).getText().replaceAll("\\(.*\\)", "").trim();
if (!mockitoIsUsed() && isDockerDaemon(DAEMON_MAJOR_VERSION, DAEMON_MINOR_VERSION)) {
nodeText = nodeText.replaceAll("docker.io/", ""); // On older
// deamons is
// this prefix
}
assertTrue("Hierarchy view contains string: " + nodeText + ", but it is expected: " + expectedValue,
nodeText.startsWith(expectedValue));
}
private DockerImageHierarchyTab openDockerImageHierarchyTab() {
getConnection().getImage(IMAGE_TEST_BUILD).openImageHierarchy();
new WaitWhile(new ShellWithTextIsAvailable("Docker Image Hierarchy"));
DockerImageHierarchyTab hierarchyTab = new DockerImageHierarchyTab();
hierarchyTab.open();
return hierarchyTab;
}
@After
public void after() {
deleteImageContainerAfter(IMAGE_TEST_BUILD);
cleanUpWorkspace();
}
public void buildImage() {
final Image rootImage = MockImageFactory.id("sha256:alpine:3.3").name("alpine:3.3").build();
final Image fooImage1 = MockImageFactory
.id("sha256:" + IMAGE_TEST_BUILD + NAME_TAG_SEPARATOR + IMAGE_TAG_LATEST)
.name(IMAGE_TEST_BUILD + NAME_TAG_SEPARATOR + IMAGE_TAG_LATEST).parentId("sha256:alpine:3.3").build();
final DockerClient client = MockDockerClientFactory.image(rootImage).image(fooImage1).build();
this.connection = MockDockerConnectionFactory.from(DEFAULT_CONNECTION_NAME, client)
.withDefaultTCPConnectionSettings();
this.connection.getImages(true);
this.connection.getContainers(true);
MockDockerConnectionManager.configureConnectionManager(connection);
}
}