/******************************************************************************* * Copyright (c) 2015 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. ******************************************************************************/ package org.jboss.tools.openshift.test.ui.explorer; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.net.MalformedURLException; import java.net.URL; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.graphics.Image; import org.jboss.tools.openshift.core.connection.Connection; import org.jboss.tools.openshift.internal.common.ui.OpenShiftCommonImages; import org.jboss.tools.openshift.internal.ui.OpenShiftImages; import org.jboss.tools.openshift.internal.ui.explorer.NewProjectLinkNode; import org.jboss.tools.openshift.internal.ui.explorer.OpenShiftExplorerLabelProvider; import org.jboss.tools.openshift.internal.ui.models.IResourceWrapper; import org.jboss.tools.openshift.internal.ui.wizard.newapp.IApplicationSource; import org.jboss.tools.openshift.internal.ui.wizard.newapp.fromimage.ImageStreamApplicationSource; import org.jboss.tools.openshift.internal.ui.wizard.newapp.fromtemplate.TemplateApplicationSource; import org.jboss.tools.openshift.test.core.connection.ConnectionTestUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import com.openshift.restclient.IClient; import com.openshift.restclient.ResourceKind; import com.openshift.restclient.images.DockerImageURI; import com.openshift.restclient.model.IBuild; import com.openshift.restclient.model.IBuildConfig; import com.openshift.restclient.model.IDeploymentConfig; import com.openshift.restclient.model.IImageStream; import com.openshift.restclient.model.IPod; import com.openshift.restclient.model.IProject; import com.openshift.restclient.model.IReplicationController; import com.openshift.restclient.model.IResource; import com.openshift.restclient.model.IService; import com.openshift.restclient.model.route.IRoute; /** * @author jeff.cantrill */ @RunWith(MockitoJUnitRunner.class) public class OpenShiftExplorerLabelProviderTest { private OpenShiftExplorerLabelProvider provider; @Mock IClient client; @Before public void setup() throws MalformedURLException{ when(client.getBaseURL()).thenReturn(new URL("https://localhost:8443")); provider = new OpenShiftExplorerLabelProvider(); } private <T extends IResource> T givenAResource(Class<T> klass, String kind){ T resource = mock(klass); when(resource.getKind()).thenReturn(kind); when(resource.getName()).thenReturn("someName"); return resource; } private <T extends IResource> IResourceWrapper<T, ?> givenAResourceUIModel(Class<T> klass, String kind){ T resource = givenAResource(klass, kind); @SuppressWarnings("unchecked") IResourceWrapper<T, ?> resourceUIModel = mock(IResourceWrapper.class); when(resourceUIModel.getWrapped()).thenReturn(resource); when(resourceUIModel.getAdapter((Class<?>)Mockito.any(Class.class))).then(invocation-> { if (invocation.getArguments()[0] == IResource.class) { return resource; } return null; }); return resourceUIModel; } @Test public void getStyledTextForABuild(){ IBuild build = givenAResource(IBuild.class, ResourceKind.BUILD); when(build.getStatus()).thenReturn("Running"); assertEquals(String.format("%s Build Running", build.getName()), provider.getStyledText(build).getString()); } @Test public void getStyledTextForAnApplicationSource(){ IApplicationSource source = mock(IApplicationSource.class); when(source.getTags()).thenReturn(Arrays.asList("foo","bar")); when(source.getNamespace()).thenReturn("aNamespace"); when(source.getName()).thenReturn("aname"); assertEquals("", "aname (foo, bar) - aNamespace", provider.getStyledText(source).getString()); } @Test public void getStyledTextForAnApplicationSourceWithoutTags(){ IApplicationSource source = mock(IApplicationSource.class); when(source.getTags()).thenReturn(Collections.emptyList()); when(source.getNamespace()).thenReturn("aNamespace"); when(source.getName()).thenReturn("aname"); assertEquals("", "aname () - aNamespace", provider.getStyledText(source).getString()); } @Test public void getStyledTextForARoute() { IRoute route = givenAResource(IRoute.class, ResourceKind.ROUTE); when(route.getHost()).thenReturn("www.example.com"); when(route.getPath()).thenReturn(""); assertEquals(String.format("%s www.example.com", route.getName()), provider.getStyledText(route).getString()); when(route.getPath()).thenReturn("/foo"); assertEquals(String.format("%s www.example.com/foo", route.getName()), provider.getStyledText(route).getString()); //test description assertEquals(String.format("%s www.example.com/foo", route.getName()), provider.getDescription(route)); } @Test public void getStyledTextForAReplicationController(){ IReplicationController rc = givenAResource(IReplicationController.class, ResourceKind.REPLICATION_CONTROLLER); Map<String, String> selector = new HashMap<>(); selector.put("foo", "bar"); when(rc.getReplicaSelector()).thenReturn(selector); assertEquals(String.format("%s selector: foo=bar", rc.getName()), provider.getStyledText(rc).getString()); } @Test public void getStyledTextForAPod(){ IPod pod = givenAResource(IPod.class, ResourceKind.POD); assertEquals(String.format("%s Pod", pod.getName()), provider.getStyledText(pod).getString()); String status = "Chilling"; when(pod.getStatus()).thenReturn(status); String exp = String.format("%s Pod %s", pod.getName(), status); assertEquals(exp, provider.getStyledText(pod).getString()); } @Test public void getStyledTextForAPodWithLongNames() { provider.setLabelLimit(10); IPod pod = givenAResource(IPod.class, ResourceKind.POD); String status = "Chilling"; when(pod.getStatus()).thenReturn(status); String exp = "s...e P...g"; assertEquals(exp, provider.getStyledText(pod).getString()); //test description assertEquals("someName Pod Chilling", provider.getDescription(pod)); } @Test public void getStyledTextForAPodWithoutLabels(){ IPod pod = givenAResource(IPod.class, ResourceKind.POD); when(pod.getIP()).thenReturn("172.17.2.226"); Map<String, String> labels = new HashMap<>(); when(pod.getLabels()).thenReturn(labels); assertEquals(String.format("%s Pod", pod.getName()), provider.getStyledText(pod).getString()); } @Test public void getStyledTextForAService(){ IService service = givenAResource(IService.class, ResourceKind.SERVICE); when(service.getPortalIP()).thenReturn("172.17.2.226"); when(service.getPort()).thenReturn(5432); when(service.getTargetPort()).thenReturn("3306"); Map<String, String> labels = new HashMap<>(); labels.put("foo", "bar"); when(service.getSelector()).thenReturn(labels); String exp = String.format("%s selector: foo=bar", service.getName()); assertEquals(exp, provider.getStyledText(service).getString()); } @Test public void getStyledTextForAnImageRepository(){ IImageStream repo = givenAResource(IImageStream.class, ResourceKind.IMAGE_STREAM); when(repo.getDockerImageRepository()) .thenReturn(new DockerImageURI("127.0.0.1", "foo", "bar")); assertEquals(repo.getName() +" " + repo.getDockerImageRepository(), provider.getStyledText(repo).getString()); } @Test public void getStyledTextForADeploymentConfig(){ IDeploymentConfig config = givenAResource(IDeploymentConfig.class, ResourceKind.DEPLOYMENT_CONFIG); Map<String, String> selector = new HashMap<>(); selector.put("name", "foo"); selector.put("deployment", "bar"); when(config.getReplicaSelector()).thenReturn(selector ); assertEquals(config.getName() + " selector: deployment=bar,name=foo", provider.getStyledText(config).getString()); } @Test public void getStyledTextForADeploymentConfigWithLongNames(){ provider.setLabelLimit(120); IDeploymentConfig config = givenAResource(IDeploymentConfig.class, ResourceKind.DEPLOYMENT_CONFIG); Map<String, String> selector = new HashMap<>(); String name = "foo01234567890123456789012345678901234567890123456789"; selector.put("name", name); String deployment = "bar01234567890123456789012345678901234567890123456789"; selector.put("deployment", deployment); when(config.getReplicaSelector()).thenReturn(selector ); assertEquals("someName selector: deployment=bar0123456789012345678901234567890...=foo01234567890123456789012345678901234567890123456789", provider.getStyledText(config).getString()); //test description assertEquals("someName selector: deployment=" + deployment + ",name=" + name, provider.getDescription(config)); } @Test public void getStyledTextForABuildConfig(){ IBuildConfig buildConfig = givenAResource(IBuildConfig.class, ResourceKind.BUILD_CONFIG); when(buildConfig.getSourceURI()).thenReturn("git://somplace.com/foo/bar.git"); StyledString actual = provider.getStyledText(buildConfig); assertEquals(buildConfig.getName() + " git://somplace.com/foo/bar.git", actual.getString()); } @Test public void getStyledTextForAProjectWithoutDisplayName(){ String displayName = "The Display Name"; String namespace = "anamespace"; IProject project = givenAResource(IProject.class, ResourceKind.PROJECT); when(project.getName()).thenReturn(displayName); when(project.getNamespace()).thenReturn(namespace); assertEquals(project.getName(), provider.getStyledText(project).getString()); } @Test public void getStyledTextForAProject(){ String displayName = "The Display Name"; String namespace = "anamespace"; IProject project = givenAResource(IProject.class, ResourceKind.PROJECT); when(project.getDisplayName()).thenReturn(displayName); when(project.getNamespace()).thenReturn(namespace); assertEquals(project.getDisplayName() + " " + project.getName(), provider.getStyledText(project).getString()); } @Test public void getStyledTextForAConnection() throws Exception{ Connection connection = ConnectionTestUtils.createConnection("username", "token", client.getBaseURL().toString()); connection.setUsername("foo@bar.com"); String exp = String.format("foo@bar.com %s", client.getBaseURL().toString()); assertEquals("Exp. a connection to display its base URL", exp, provider.getStyledText(connection).getString()); } @Test public void getStyledTextForAConnectionWithoutUserName() throws Exception{ Connection connection = ConnectionTestUtils.createConnection(null, "token", client.getBaseURL().toString()); String exp = String.format("<unknown user> %s", client.getBaseURL().toString()); assertEquals("Exp. a connection to display its base URL", exp, provider.getStyledText(connection).getString()); } @Test public void getImage(){ testImage(null, null); testImage(null, new Object()); testImage(OpenShiftImages.SERVICE_IMG, IService.class, ResourceKind.SERVICE); testImage(OpenShiftImages.PROJECT_NEW_IMG, mock(NewProjectLinkNode.class)); testImage(OpenShiftImages.BUILD_IMG, IBuild.class, ResourceKind.BUILD); testImage(OpenShiftImages.BUILDCONFIG_IMG, IBuild.class, ResourceKind.BUILD_CONFIG); testImage(OpenShiftImages.IMAGE_IMG, IBuild.class, ResourceKind.IMAGE_STREAM); testImage(OpenShiftImages.BLOCKS_IMG, IBuild.class, ResourceKind.POD); testImage(OpenShiftImages.PROJECT_IMG, IBuild.class, ResourceKind.PROJECT); testImage(OpenShiftImages.ROUTE_IMG, IBuild.class, ResourceKind.ROUTE); testImage(OpenShiftImages.SERVICE_IMG, IBuild.class, ResourceKind.SERVICE); testImage(OpenShiftCommonImages.FILE, IResource.class, "unknown"); testImage(OpenShiftImages.IMAGE_IMG, mock(ImageStreamApplicationSource.class)); testImage(OpenShiftImages.TEMPLATE_IMG, mock(TemplateApplicationSource.class)); } private void testImage(Image expectedImage, Object element) { assertEquals(expectedImage, provider.getImage(element)); } private void testImage(Image expectedImage, Class<? extends IResource> klass, String kind) { testImage(expectedImage, givenAResource(klass, kind)); testImage(expectedImage, givenAResourceUIModel(klass, kind)); } }