/******************************************************************************* * 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 * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package com.openshift.internal.restclient.capability.resources; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.*; import static com.openshift.restclient.utils.ResourceTestHelper.*; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import com.openshift.restclient.IClient; import com.openshift.restclient.NotFoundException; import com.openshift.restclient.OpenShiftException; import com.openshift.restclient.capability.resources.IDeployCapability; import com.openshift.restclient.http.IHttpConstants; import com.openshift.restclient.model.IDeploymentConfig; import com.openshift.restclient.model.IReplicationController; import com.openshift.restclient.model.IStatus; @RunWith(MockitoJUnitRunner.class) public class DeployCapabilityTest { private static final String NAMESPACE = "aNamespace"; private static final int VERSION = 1986; private static final String NAME = "aDCName"; private IDeployCapability cap; @Mock private IDeploymentConfig config; @Mock private IReplicationController deployment; @Mock private IClient client; @Before public void setUp() throws Exception { cap = new DeployCapability(config, client); when(config.getNamespace()).thenReturn(NAMESPACE); when(config.getName()).thenReturn(NAME); givenDeployConfigIsVersion(config, VERSION); } @Test public void testIsSupported() { assertTrue("Exp. the capability to be supported", cap.isSupported()); } @SuppressWarnings("unchecked") @Test(expected=OpenShiftException.class) public void testThrowsErrorWhenUnableToFindLatestDeployment() { when(client.get(anyString(), anyString(), anyString())).thenThrow(OpenShiftException.class); whenDeploying(); } @Test public void testWhenLatestDeploymentNotFound() { givenTheLatestDeploymentIsNotFound(); whenDeploying(); thenVersionShouldIncrease(config); thenResourceShouldBeUpdated(client, config); } @Test public void testConfigNotUpdatedWhenAlreadyInProgress() { givenTheDeploymentIsRetrieved(); givenDeploymentStatusIs("New"); whenDeploying(); thenResourceShouldNotBeUpdated(client, config); thenVersionShouldNotBeIncreased(config); } @Test public void testStartsNewDeploymentWhenPreviousFailed() { givenTheDeploymentIsRetrieved(); givenDeploymentStatusIs("Failed"); whenDeploying(); thenVersionShouldIncrease(config); thenResourceShouldBeUpdated(client, config); } @Test public void testStartsNewDeploymentWhenPreviousComplete() { givenTheDeploymentIsRetrieved(); givenDeploymentStatusIs("Complete"); whenDeploying(); thenVersionShouldIncrease(config); thenResourceShouldBeUpdated(client, config); } private void thenVersionShouldIncrease(IDeploymentConfig config) { int newVersion = config.getLatestVersionNumber()+1; verify(config, times(1)).setLatestVersionNumber(newVersion); } private void thenVersionShouldNotBeIncreased(IDeploymentConfig config) { int newVersion = config.getLatestVersionNumber()+1; verify(config, times(0)).setLatestVersionNumber(newVersion); } private void whenDeploying() { cap.deploy(); } private void givenDeploymentStatusIs(String status) { givenResourceIsAnnotatedWith(deployment, IReplicationController.DEPLOYMENT_PHASE, status); } private void givenTheDeploymentIsRetrieved() { when(client.get(anyString(),anyString(),anyString())).thenReturn(deployment); } private void givenTheLatestDeploymentIsNotFound() { IStatus status = mock(IStatus.class); when(status.getCode()).thenReturn(IHttpConstants.STATUS_NOT_FOUND); NotFoundException e = new NotFoundException(null, status, "Not Found"); when(client.get(anyString(),anyString(),anyString())).thenThrow(e); } }