/** * Copyright (C) 2008 Progress Software, Inc. All rights reserved. * http://fusesource.com * * The software in this package is published under the terms of the AGPL license * a copy of which has been included with this distribution in the license.txt file. */ package org.fusesource.cloudmix.common.controller; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import junit.framework.TestCase; import org.fusesource.cloudmix.common.dto.Dependency; import org.fusesource.cloudmix.common.dto.FeatureDetails; import org.fusesource.cloudmix.common.dto.ProfileDetails; public class ProfileControllerTest extends TestCase { public void testProfileController() { ProfileDetails details = new ProfileDetails(); ProfileController pc = new ProfileController(null, details); assertSame(details, pc.getDetails()); } public void testGetDeployableFeatures() { MockGridController cl = new MockGridController(); ProfileController pc = new ProfileController(cl, new ProfileDetails("p1")); // basic feature: should be deployable... FeatureDetails fd = new FeatureDetails(); fd.setMaximumInstances("1"); fd.setId("f1"); cl.addFeature(fd); Map<String, String> overrides = new HashMap<String, String>(2); overrides.put("prop11", "value11"); overrides.put("prop12", "value12"); pc.getDetails().addFeature("f1", overrides); // basic feature but that already reached its max install count: should NOT be deployable... fd = new FeatureDetails(); fd.setMaximumInstances("1"); fd.setId("f2"); cl.addFeature(fd); cl.featureInstancesCount.put("f2", 12); overrides = new HashMap<String, String>(1); overrides.put("prop21", "value21"); pc.getDetails().addFeature("f2", overrides); // basic feature but with installed dependencies: should be deployable... fd = new FeatureDetails(); fd.setMaximumInstances("1"); fd.setDependencies(Arrays.asList(new Dependency("f3Dep1"), new Dependency("f3Dep2"))); fd.setId("f3"); cl.addFeature(fd); cl.addFeature(new FeatureDetails("f3Dep1")); cl.addFeature(new FeatureDetails("f3Dep2")); cl.featureInstancesCount.put("f3Dep1", 1); cl.featureInstancesCount.put("f3Dep2", 1); pc.getDetails().addFeature("f3", new HashMap<String, String>(0)); // basic feature but with un-installed dependencies: should NOT be deployable... fd = new FeatureDetails(); fd.setMaximumInstances("1"); fd.setDependencies(Arrays.asList(new Dependency("f4Dep1"), new Dependency("f4Dep2"))); fd.setId("f4"); cl.addFeature(fd); cl.addFeature(new FeatureDetails("f4Dep1")); cl.addFeature(new FeatureDetails("f4Dep2")); pc.getDetails().addFeature("f4", new HashMap<String, String>(0)); List<FeatureController> deployable = pc.getDeployableFeatures(); assertTrue(deployable.contains(cl.getFeatureController("f1"))); assertFalse(deployable.contains(cl.getFeatureController("f2"))); assertTrue(deployable.contains(cl.getFeatureController("f3"))); assertFalse(deployable.contains(cl.getFeatureController("f4"))); } public void testCompare() { // compare to nothing ProfileController nextOne = createMockProfile(); assertFalse(nextOne.compare(null)); assertTrue(nextOne.hasChanged()); assertTrue(nextOne.getDetails().getFeatures().get(0).hasChanged()); assertTrue(nextOne.getDetails().getFeatures().get(1).hasChanged()); assertTrue(nextOne.getDetails().getFeatures().get(2).hasChanged()); // compare same ProfileController original = createMockProfile(); nextOne = createMockProfile(); assertTrue(nextOne.compare(original)); assertFalse(nextOne.hasChanged()); assertFalse(nextOne.getDetails().getFeatures().get(0).hasChanged()); assertFalse(nextOne.getDetails().getFeatures().get(1).hasChanged()); assertFalse(nextOne.getDetails().getFeatures().get(2).hasChanged()); // compare with feature added original = createMockProfile(); original.getDetails().getFeatures().remove(1); nextOne = createMockProfile(); assertFalse(nextOne.compare(original)); assertTrue(nextOne.hasChanged()); assertFalse(nextOne.getDetails().getFeatures().get(0).hasChanged()); assertTrue(nextOne.getDetails().getFeatures().get(1).hasChanged()); assertFalse(nextOne.getDetails().getFeatures().get(2).hasChanged()); // compare with feature removed original = createMockProfile(); nextOne = createMockProfile(); nextOne.getDetails().getFeatures().remove(1); assertFalse(nextOne.compare(original)); assertTrue(nextOne.hasChanged()); assertFalse(nextOne.getDetails().getFeatures().get(0).hasChanged()); assertFalse(nextOne.getDetails().getFeatures().get(1).hasChanged()); // compare with cfg override added original = createMockProfile(); original.getDetails().getFeatures().get(2).getCfgUpdates().remove(0); nextOne = createMockProfile(); assertFalse(nextOne.compare(original)); assertTrue(nextOne.hasChanged()); assertFalse(nextOne.getDetails().getFeatures().get(0).hasChanged()); assertFalse(nextOne.getDetails().getFeatures().get(1).hasChanged()); assertTrue(nextOne.getDetails().getFeatures().get(2).hasChanged()); // compare with cfg override removed original = createMockProfile(); nextOne = createMockProfile(); nextOne.getDetails().getFeatures().get(2).getCfgUpdates().remove(0); assertFalse(nextOne.compare(original)); assertTrue(nextOne.hasChanged()); assertFalse(nextOne.getDetails().getFeatures().get(0).hasChanged()); assertFalse(nextOne.getDetails().getFeatures().get(1).hasChanged()); assertTrue(nextOne.getDetails().getFeatures().get(2).hasChanged()); // compare with cfg override changed original = createMockProfile(); nextOne = createMockProfile(); nextOne.getDetails().getFeatures().get(2).getCfgUpdates().get(0).setValue("another value"); assertFalse(nextOne.compare(original)); assertTrue(nextOne.hasChanged()); assertTrue(nextOne.getDetails().getFeatures().get(2).hasChanged()); } private ProfileController createMockProfile() { MockGridController cl = new MockGridController(); ProfileController pc = new ProfileController(cl, new ProfileDetails("p1")); FeatureDetails fd = new FeatureDetails(); fd.setMaximumInstances("1"); fd.setId("f1"); cl.addFeature(fd); Map<String, String> overrides = new HashMap<String, String>(2); overrides.put("prop11", "value11"); overrides.put("prop12", "value12"); pc.getDetails().addFeature("f1", overrides); fd = new FeatureDetails(); fd.setMaximumInstances("1"); fd.setId("f2"); cl.addFeature(fd); pc.getDetails().addFeature("f2", null); fd = new FeatureDetails(); fd.setMaximumInstances("1"); fd.setId("f3"); cl.addFeature(fd); overrides = new HashMap<String, String>(2); overrides.put("prop31", "value31"); pc.getDetails().addFeature("f3", overrides); return pc; } }