/******************************************************************************* * Copyright (c) 2012-2017 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.agent.server; import org.eclipse.che.api.core.model.machine.Machine; import org.eclipse.che.api.core.model.machine.MachineRuntimeInfo; import org.eclipse.che.api.core.model.machine.Server; import org.eclipse.che.api.core.rest.HttpJsonRequest; import org.eclipse.che.api.core.rest.HttpJsonResponse; import org.eclipse.che.api.workspace.shared.dto.WsAgentHealthStateDto; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; import java.io.IOException; import java.util.HashMap; import java.util.Map; import static java.util.Collections.emptyMap; import static javax.ws.rs.core.Response.Status.NOT_FOUND; import static javax.ws.rs.core.Response.Status.SERVICE_UNAVAILABLE; import static org.eclipse.che.api.machine.shared.Constants.WSAGENT_REFERENCE; import static org.eclipse.che.api.machine.shared.Constants.WS_AGENT_PORT; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; /** * @author Valeriy Svydenko */ @Listeners(value = {MockitoTestNGListener.class}) public class WsAgentHealthCheckerTest { private final static String WS_AGENT_SERVER_URL = "ws_agent"; @Mock private WsAgentPingRequestFactory wsAgentPingRequestFactory; @Mock private Machine devMachine; @Mock private MachineRuntimeInfo machineRuntimeInfo; @Mock private Server server; @Mock private HttpJsonRequest httpJsonRequest; @Mock private HttpJsonResponse httpJsonResponse; private Map<String, Server> servers = new HashMap<>(1); private WsAgentHealthCheckerImpl checker; @BeforeMethod public void setUp() throws Exception { servers.put(WSAGENT_REFERENCE, server); servers.put(WS_AGENT_PORT, server); when(server.getRef()).thenReturn(WSAGENT_REFERENCE); when(server.getUrl()).thenReturn(WS_AGENT_SERVER_URL); when(wsAgentPingRequestFactory.createRequest(devMachine)).thenReturn(httpJsonRequest); checker = new WsAgentHealthCheckerImpl(wsAgentPingRequestFactory); when(httpJsonRequest.setMethod(any())).thenReturn(httpJsonRequest); when(httpJsonRequest.setTimeout(anyInt())).thenReturn(httpJsonRequest); when(httpJsonRequest.request()).thenReturn(httpJsonResponse); when(httpJsonResponse.getResponseCode()).thenReturn(200); when(httpJsonResponse.asString()).thenReturn("response"); when(devMachine.getRuntime()).thenReturn(machineRuntimeInfo); doReturn(servers).when(machineRuntimeInfo).getServers(); } @Test public void stateShouldBeReturnedWithStatusNotFoundIfWorkspaceAgentIsNotExist() throws Exception { when(machineRuntimeInfo.getServers()).thenReturn(emptyMap()); WsAgentHealthStateDto result = checker.check(devMachine); assertEquals(NOT_FOUND.getStatusCode(), result.getCode()); } @Test public void returnStateWithNotFoundCode() throws Exception { doReturn(emptyMap()).when(machineRuntimeInfo).getServers(); final WsAgentHealthStateDto check = checker.check(devMachine); assertEquals(NOT_FOUND.getStatusCode(), check.getCode()); assertEquals("Workspace Agent not available", check.getReason()); } @Test public void pingRequestToWsAgentShouldBeSent() throws Exception { final WsAgentHealthStateDto result = checker.check(devMachine); verify(httpJsonRequest).request(); assertEquals(200, result.getCode()); } @Test public void returnResultWithUnavailableStateIfDoNotGetResponseFromWsAgent() throws Exception { doThrow(IOException.class).when(httpJsonRequest).request(); final WsAgentHealthStateDto result = checker.check(devMachine); verify(httpJsonRequest).request(); assertEquals(SERVICE_UNAVAILABLE.getStatusCode(), result.getCode()); } }