/******************************************************************************* * 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 com.openshift.internal.restclient.model.v1; import static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static com.openshift.internal.util.JBossDmrExtentions.*; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.jboss.dmr.ModelNode; import org.junit.Before; import org.junit.Test; import com.openshift.internal.restclient.model.DeploymentConfig; import com.openshift.internal.restclient.model.properties.ResourcePropertiesRegistry; import com.openshift.restclient.IClient; import com.openshift.restclient.ResourceKind; import com.openshift.restclient.images.DockerImageURI; import com.openshift.restclient.model.IPort; import com.openshift.restclient.model.deploy.IDeploymentConfigChangeTrigger; import com.openshift.restclient.model.deploy.IDeploymentImageChangeTrigger; import com.openshift.restclient.model.deploy.IDeploymentTrigger; import com.openshift.restclient.utils.Samples; /** * @author Jeff Cantrill */ public class DeploymentConfigTest { private static final String VERSION = "v1"; private DeploymentConfig config; private IClient client; private ModelNode node; private Map<String, String[]> propertyKeys; @Before public void setup(){ client = mock(IClient.class); node = ModelNode.fromJSONString(Samples.V1_DEPLOYMENT_CONIFIG.getContentAsString()); propertyKeys = ResourcePropertiesRegistry.getInstance().get(VERSION, ResourceKind.DEPLOYMENT_CONFIG); config = new DeploymentConfig(node, client, propertyKeys); } @Test public void getLabels() { assertArrayEquals(new String[] {"template"},config.getLabels().keySet().toArray(new String[] {})); } @Test public void getConfigChangeTrigger() { List<IDeploymentTrigger> trigger = new ArrayList<>(config.getTriggers()); assertEquals("Exp. equal number of triggers",2,trigger.size()); assertTrue("Expected to find a config change trigger", IDeploymentConfigChangeTrigger.class.isAssignableFrom(trigger.get(0).getClass())); assertTrue("Expected to find a config change trigger", IDeploymentImageChangeTrigger.class.isAssignableFrom(trigger.get(1).getClass())); IDeploymentImageChangeTrigger ict = (IDeploymentImageChangeTrigger) trigger.get(1); assertEquals("foo", ict.getNamespace()); } @Test public void getReplicas(){ assertEquals(1, config.getReplicas()); } @Test public void setReplicas(){ config.setReplicas(3); assertEquals(3, config.getReplicas()); } @Test public void setLatestVersionNumber(){ config.setLatestVersionNumber(3); assertEquals(3, config.getLatestVersionNumber()); } @Test public void setReplicaSelector() { Map<String, String> exp = new HashMap<String, String>(); exp.put("foo", "bar"); node = ModelNode.fromJSONString(Samples.V1_DEPLOYMENT_CONIFIG.getContentAsString()); DeploymentConfig config = new DeploymentConfig(node, client, ResourcePropertiesRegistry.getInstance().get(VERSION, ResourceKind.DEPLOYMENT_CONFIG)); config.setReplicaSelector(exp); assertEquals(exp, config.getReplicaSelector()); } @Test public void getReplicaSelector() { Map<String, String> exp = new HashMap<String, String>(); exp.put("name", "database"); assertEquals(exp, config.getReplicaSelector()); } @Test public void getTriggerTypes() { assertArrayEquals(new String[] {"ConfigChange", "ImageChange"}, config.getTriggerTypes().toArray(new String[] {})); } @Test public void testGetDeploymentStrategyTypes() { assertEquals("Recreate", config.getDeploymentStrategyType()); } @Test public void testAddContainer() { //remove containers hack String[] path = getPath(DeploymentConfig.DEPLOYMENTCONFIG_CONTAINERS); node.get(path).clear(); //setup DockerImageURI uri = new DockerImageURI("aproject/an_image_name"); IPort port = mock(IPort.class); when(port.getProtocol()).thenReturn("TCP"); when(port.getContainerPort()).thenReturn(8080); Set<IPort> ports = new HashSet<>(); ports.add(port); config.addContainer(uri, ports, new HashMap<String, String>()); List<ModelNode> containers = node.get(path).asList(); assertEquals(1, containers.size()); //expectations ModelNode portNode = new ModelNode(); portNode.get("protocol").set(port.getProtocol()); portNode.get("containerPort").set(port.getContainerPort()); ModelNode exp = new ModelNode(); exp.get("name").set(uri.getName()); exp.get("image").set(uri.getUriWithoutHost()); exp.get("ports").add(portNode); assertEquals(exp.toJSONString(false), containers.get(0).toJSONString(false)); } }