/******************************************************************************* * Copyright (c) 2012-2015 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are 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: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.api.runner; import org.eclipse.che.api.project.shared.dto.RunnerEnvironment; import org.eclipse.che.api.project.shared.dto.RunnerEnvironmentLeaf; import org.eclipse.che.api.project.shared.dto.RunnerEnvironmentTree; import org.eclipse.che.api.runner.dto.RunnerDescriptor; import org.eclipse.che.dto.server.DtoFactory; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.List; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; /** * @author andrew00x */ @Listeners(value = {MockitoTestNGListener.class}) public class RunnerServiceTest { private DtoFactory dtoFactory = DtoFactory.getInstance(); @Mock private RunQueue runQueue; @InjectMocks private RunnerService service; @BeforeMethod public void beforeMethod() { doNothing().when(runQueue).checkStarted(); } @AfterMethod public void afterMethod() { } @Test public void testGetRunnerEnvironments() throws Exception { List<RemoteRunnerServer> servers = new ArrayList<>(1); RemoteRunnerServer server1 = mock(RemoteRunnerServer.class); doReturn(true).when(server1).isAvailable(); servers.add(server1); List<RunnerDescriptor> runners1 = new ArrayList<>(1); RunnerDescriptor runner1 = dto(RunnerDescriptor.class).withName("java/web"); runner1.getEnvironments().add(dto(RunnerEnvironment.class).withId("tomcat7")); runner1.getEnvironments().add(dto(RunnerEnvironment.class).withId("jboss7")); runners1.add(runner1); RemoteRunnerServer server2 = mock(RemoteRunnerServer.class); doReturn(true).when(server2).isAvailable(); servers.add(server2); List<RunnerDescriptor> runners2 = new ArrayList<>(1); RunnerDescriptor runner2 = dto(RunnerDescriptor.class).withName("java/web"); runner2.getEnvironments().add(dto(RunnerEnvironment.class).withId("tomcat7")); runner2.getEnvironments().add(dto(RunnerEnvironment.class).withId("jboss7")); runners2.add(runner2); doReturn(runners1).when(server1).getRunnerDescriptors(); doReturn(runners2).when(server2).getRunnerDescriptors(); doReturn(servers).when(runQueue).getRegisterRunnerServers(); RunnerEnvironmentTree system = service.getRunnerEnvironments(null, null); assertEquals(system.getDisplayName(), "system"); assertEquals(system.getLeaves().size(), 0); List<RunnerEnvironmentTree> nodes = system.getNodes(); assertEquals(nodes.size(), 1); RunnerEnvironmentTree java = system.getNode("java"); assertNotNull(java); assertEquals(java.getDisplayName(), "java"); nodes = java.getNodes(); assertEquals(nodes.size(), 1); assertEquals(java.getLeaves().size(), 0); RunnerEnvironmentTree web = java.getNode("web"); assertNotNull(web); assertEquals(web.getNodes().size(), 0); assertEquals(web.getLeaves().size(), 2); RunnerEnvironmentLeaf tomcat7 = web.getEnvironment("tomcat7"); assertNotNull(tomcat7); RunnerEnvironmentLeaf jboss7 = web.getEnvironment("jboss7"); assertNotNull(jboss7); RunnerEnvironment tomcat7Environment = tomcat7.getEnvironment(); RunnerEnvironment jboss7Environment = jboss7.getEnvironment(); assertNotNull(tomcat7Environment); assertNotNull(jboss7Environment); assertEquals(tomcat7Environment.getId(), "system:/java/web/tomcat7"); assertEquals(jboss7Environment.getId(), "system:/java/web/jboss7"); } @Test public void testGetRunnerEnvironmentsIfOneServerUnavailable() throws Exception { List<RemoteRunnerServer> servers = new ArrayList<>(2); RemoteRunnerServer server1 = mock(RemoteRunnerServer.class); doReturn(true).when(server1).isAvailable(); servers.add(server1); List<RunnerDescriptor> runners = new ArrayList<>(1); RunnerDescriptor runner1 = dto(RunnerDescriptor.class).withName("java/web"); runner1.getEnvironments().add(dto(RunnerEnvironment.class).withId("tomcat7")); runner1.getEnvironments().add(dto(RunnerEnvironment.class).withId("jboss7")); runners.add(runner1); doReturn(runners).when(server1).getRunnerDescriptors(); RemoteRunnerServer server2 = mock(RemoteRunnerServer.class); doReturn(true).when(server2).isAvailable(); doThrow(new RunnerException("Connection refused")).when(server2).getRunnerDescriptors(); servers.add(server2); doReturn(servers).when(runQueue).getRegisterRunnerServers(); RunnerEnvironmentTree system = service.getRunnerEnvironments(null, null); assertEquals(system.getDisplayName(), "system"); assertEquals(system.getLeaves().size(), 0); List<RunnerEnvironmentTree> nodes = system.getNodes(); assertEquals(nodes.size(), 1); RunnerEnvironmentTree java = system.getNode("java"); assertNotNull(java); assertEquals(java.getDisplayName(), "java"); nodes = java.getNodes(); assertEquals(nodes.size(), 1); assertEquals(java.getLeaves().size(), 0); RunnerEnvironmentTree web = java.getNode("web"); assertNotNull(web); assertEquals(web.getNodes().size(), 0); assertEquals(web.getLeaves().size(), 2); RunnerEnvironmentLeaf tomcat7 = web.getEnvironment("tomcat7"); assertNotNull(tomcat7); RunnerEnvironmentLeaf jboss7 = web.getEnvironment("jboss7"); assertNotNull(jboss7); RunnerEnvironment tomcat7Environment = tomcat7.getEnvironment(); RunnerEnvironment jboss7Environment = jboss7.getEnvironment(); assertNotNull(tomcat7Environment); assertNotNull(jboss7Environment); assertEquals(tomcat7Environment.getId(), "system:/java/web/tomcat7"); assertEquals(jboss7Environment.getId(), "system:/java/web/jboss7"); } @Test public void testFilerEnvironmentsByWorkspaceGetAll() throws Exception { createRunners(); RunnerEnvironmentTree system = service.getRunnerEnvironments(null, null); assertEquals(system.getDisplayName(), "system"); assertEquals(system.getLeaves().size(), 0); List<RunnerEnvironmentTree> nodes = system.getNodes(); assertEquals(nodes.size(), 1); RunnerEnvironmentTree java = system.getNode("java"); assertNotNull(java); RunnerEnvironmentTree web = java.getNode("web"); assertNotNull(web); assertEquals(web.getNodes().size(), 0); assertEquals(web.getLeaves().size(), 4); RunnerEnvironmentLeaf tomcat7 = web.getEnvironment("tomcat7"); assertNotNull(tomcat7); RunnerEnvironmentLeaf jboss7 = web.getEnvironment("jboss7"); assertNotNull(jboss7); RunnerEnvironmentLeaf _tomcat7 = web.getEnvironment("my_tomcat7"); assertNotNull(_tomcat7); RunnerEnvironmentLeaf _jboss7 = web.getEnvironment("my_jboss7"); assertNotNull(_jboss7); } @Test public void testFilerEnvironmentsByWorkspaceRestricted() throws Exception { List<RemoteRunnerServer> servers = createRunners(); // first server isn't accessible doReturn("my").when(servers.get(0)).getAssignedWorkspace(); RunnerEnvironmentTree system = service.getRunnerEnvironments(null, null); assertEquals(system.getDisplayName(), "system"); assertEquals(system.getLeaves().size(), 0); List<RunnerEnvironmentTree> nodes = system.getNodes(); assertEquals(nodes.size(), 1); RunnerEnvironmentTree java = system.getNode("java"); assertNotNull(java); RunnerEnvironmentTree web = java.getNode("web"); assertNotNull(web); assertEquals(web.getNodes().size(), 0); // from private shouldn't be visible assertEquals(web.getLeaves().size(), 2); RunnerEnvironmentLeaf tomcat7 = web.getEnvironment("tomcat7"); assertNotNull(tomcat7); RunnerEnvironmentLeaf jboss7 = web.getEnvironment("jboss7"); assertNotNull(jboss7); } private List<RemoteRunnerServer> createRunners() throws Exception { List<RemoteRunnerServer> servers = new ArrayList<>(1); RemoteRunnerServer server1 = mock(RemoteRunnerServer.class); doReturn(true).when(server1).isAvailable(); servers.add(server1); List<RunnerDescriptor> runners1 = new ArrayList<>(1); RunnerDescriptor runner1 = dto(RunnerDescriptor.class).withName("java/web"); runner1.getEnvironments().add(dto(RunnerEnvironment.class).withId("my_tomcat7")); runner1.getEnvironments().add(dto(RunnerEnvironment.class).withId("my_jboss7")); runners1.add(runner1); RemoteRunnerServer server2 = mock(RemoteRunnerServer.class); doReturn(true).when(server2).isAvailable(); servers.add(server2); List<RunnerDescriptor> runners2 = new ArrayList<>(1); RunnerDescriptor runner2 = dto(RunnerDescriptor.class).withName("java/web"); runner2.getEnvironments().add(dto(RunnerEnvironment.class).withId("tomcat7")); runner2.getEnvironments().add(dto(RunnerEnvironment.class).withId("jboss7")); runners2.add(runner2); doReturn(runners1).when(server1).getRunnerDescriptors(); doReturn(runners2).when(server2).getRunnerDescriptors(); doReturn(servers).when(runQueue).getRegisterRunnerServers(); return servers; } private <T> T dto(Class<T> type) { return dtoFactory.createDto(type); } }