/******************************************************************************* * 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; import static org.fest.assertions.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static com.openshift.internal.util.JBossDmrExtentions.*; import java.util.ArrayList; import java.util.List; import org.jboss.dmr.ModelNode; import org.junit.Before; import org.junit.Test; import com.openshift.internal.restclient.OpenShiftAPIVersion; import com.openshift.internal.restclient.model.properties.ResourcePropertiesRegistry; import com.openshift.internal.restclient.model.properties.ResourcePropertyKeys; import com.openshift.restclient.ResourceKind; import com.openshift.restclient.capability.CapabilityVisitor; import com.openshift.restclient.capability.resources.IDeploymentTraceability; import com.openshift.restclient.capability.resources.ITemplateTraceability; /** * @author Jeff Cantrill */ public class KubernetesResourceTest { private ModelNode node; private KubernetesResource resource; @Before public void setup(){ this.node = createModelNode(); this.resource = createKubernetesResource(OpenShiftAPIVersion.v1.toString(), node); } private ModelNode createModelNode() { node = new ModelNode(); node.get(ResourcePropertyKeys.KIND).set(ResourceKind.LIST.toString()); ModelNode annotations = node.get(getPath(KubernetesResource.ANNOTATIONS)); annotations.get("foo").set("bar"); annotations.get("template").set("foobar"); node.get(KubernetesResource.METADATA_NAME).set("bartender"); node.get(KubernetesResource.METADATA_NAMESPACE).set("foofighters"); return node; } private KubernetesResource createKubernetesResource(String modelVersion, ModelNode node) { return new KubernetesResource(node, null, ResourcePropertiesRegistry.getInstance().get(modelVersion, ResourceKind.SERVICE)) {}; } @Test public void testSetAnnoationWithNullValueShouldReturnGracefully() { resource.setAnnotation("black",null); } @Test public void testSetAnnoation() { resource.setAnnotation("black", "white"); assertEquals("white",resource.getAnnotation("black")); } @Test public void testGetAnnotation() { assertEquals("bar", resource.getAnnotation("foo")); } @Test public void removeAnnotation() { resource.removeAnnotation("foo"); assertNull(resource.getAnnotation("foo")); } @Test public void isAnnotatedReturnsTrueForKnownAnnotation() { assertTrue(resource.isAnnotatedWith("foo")); } @Test public void isAnnotatedReturnsFalseForUnKnownAnnotation() { assertFalse(resource.isAnnotatedWith("bar")); } @Test public void supportsIsFalseForUnsupportedCapability() { assertFalse("Expected to not support capability because IClient is null",resource.supports(IDeploymentTraceability.class)); } @Test public void getCapabilityReturnsNonNullWhenSupportedCapability() { assertTrue("Exp. to support capability since resource has template annotation", resource.supports(ITemplateTraceability.class)); assertNotNull(resource.getCapability(ITemplateTraceability.class)); } @Test public void testAcceptVisitor(){ final List<Boolean> visited = new ArrayList<Boolean>(); resource.accept(new CapabilityVisitor<ITemplateTraceability, Object>(){ @Override public Object visit(ITemplateTraceability capability) { visited.add(Boolean.TRUE); return (Object)null; } }, new Object()); assertEquals("Exp. the visitor to be visited", 1, visited.size()); } @Test public void shouldSameHashCodeOnAddedLabels() { // pre-condition int hashCodeBeforeChange = resource.hashCode(); // operation resource.set(ResourcePropertyKeys.LABELS, "kungfoo"); // verification int hashCodeAfterChange = resource.hashCode(); assertEquals(hashCodeBeforeChange, hashCodeAfterChange); } @Test public void shouldDifferentHashCodeOnDifferentName() { // pre-condition int hashCodeBeforeChange = resource.hashCode(); // operation resource.set(KubernetesResource.METADATA_NAME, "brucefoolee"); // verification int hashCodeAfterChange = resource.hashCode(); assertThat(hashCodeBeforeChange).isNotEqualTo(hashCodeAfterChange); } @Test public void shouldDifferentHashCodeOnDifferentResourceKind() { // pre-condition int hashCodeBeforeChange = resource.hashCode(); // operation node.get(ResourcePropertyKeys.KIND).set(ResourceKind.EVENT.toString()); // verification int hashCodeAfterChange = resource.hashCode(); assertThat(hashCodeBeforeChange).isNotEqualTo(hashCodeAfterChange); } @Test public void shouldDifferentHashCodeOnDifferentNamespace() { // pre-condition int hashCodeBeforeChange = resource.hashCode(); // operation node.get(new String [] {"metadata", "namespace"}).set("barfoo"); // verification int hashCodeAfterChange = resource.hashCode(); assertThat(hashCodeBeforeChange).isNotEqualTo(hashCodeAfterChange); } @Test public void shouldEqualsOnAddedLabels() { // pre-condition KubernetesResource otherResource = createKubernetesResource(OpenShiftAPIVersion.v1.toString(), node); assertEquals(resource, otherResource); // operation otherResource.set(ResourcePropertyKeys.LABELS, "bruceleefoo"); // verification assertEquals(resource, otherResource); } @Test public void shouldNotEqualsOnDifferentName() { // pre-condition KubernetesResource otherResource = createKubernetesResource(OpenShiftAPIVersion.v1.toString(), createModelNode()); assertEquals(resource, otherResource); // operation otherResource.set(KubernetesResource.METADATA_NAME, "kungfoo"); // verification assertThat(resource).isNotEqualTo(otherResource); } @Test public void shouldNotEqualsOnDifferentNamespace() { // pre-condition KubernetesResource otherResource = createKubernetesResource(OpenShiftAPIVersion.v1.toString(), createModelNode()); assertEquals(resource, otherResource); // operation otherResource.set(KubernetesResource.METADATA_NAMESPACE, "karate"); // verification assertThat(resource).isNotEqualTo(otherResource); } @Test public void shouldNotEqualsOnDifferentResourceKind() { // pre-condition KubernetesResource otherResource = createKubernetesResource(OpenShiftAPIVersion.v1.toString(), createModelNode()); assertEquals(resource, otherResource); // operation otherResource.set(ResourcePropertyKeys.KIND, ResourceKind.EVENT.toString()); // verification assertThat(resource).isNotEqualTo(otherResource); } }