/*******************************************************************************
* Copyright (c) 2008, 2011 VMware Inc. and others
* 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:
* VMware Inc. - initial contribution
* EclipseSource - Bug 358442 Change InstallArtifact graph from a tree to a DAG
*******************************************************************************/
package org.eclipse.virgo.kernel.install.artifact.internal;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.eclipse.virgo.kernel.install.artifact.BundleInstallArtifact;
import org.eclipse.virgo.kernel.install.artifact.InstallArtifact;
import org.eclipse.virgo.kernel.install.artifact.PlanInstallArtifact;
import org.eclipse.virgo.util.common.DirectedAcyclicGraph;
import org.eclipse.virgo.util.common.GraphNode;
import org.eclipse.virgo.util.common.ThreadSafeDirectedAcyclicGraph;
import org.junit.Test;
/**
*/
public class PlanMemberCollectorTests {
private final PlanMemberCollector collector = new PlanMemberCollector();
@Test
public void rootPlanIsNotIncludedInTheCollection() {
PlanInstallArtifact plan = createNiceMock(PlanInstallArtifact.class);
DirectedAcyclicGraph<InstallArtifact> dag = new ThreadSafeDirectedAcyclicGraph<InstallArtifact>();
GraphNode<InstallArtifact> graph = dag.createRootNode(plan);
expect(plan.getGraph()).andReturn(graph);
replay(plan);
List<InstallArtifact> members = this.collector.collectPlanMembers(plan);
assertNotNull(members);
assertEquals(0, members.size());
}
@Test
public void singleLevelPlan() {
PlanInstallArtifact plan = createNiceMock(PlanInstallArtifact.class);
DirectedAcyclicGraph<InstallArtifact> dag = new ThreadSafeDirectedAcyclicGraph<InstallArtifact>();
GraphNode<InstallArtifact> tree = dag.createRootNode(plan);
BundleInstallArtifact bundle1 = createNiceMock(BundleInstallArtifact.class);
tree.addChild(dag.createRootNode(bundle1));
BundleInstallArtifact bundle2 = createNiceMock(BundleInstallArtifact.class);
tree.addChild(dag.createRootNode(bundle2));
expect(plan.getGraph()).andReturn(tree);
replay(plan);
List<InstallArtifact> members = this.collector.collectPlanMembers(plan);
assertNotNull(members);
assertEquals(2, members.size());
assertTrue(members.contains(bundle1));
assertTrue(members.contains(bundle2));
}
@Test
public void nestedPlan() {
PlanInstallArtifact plan = createNiceMock(PlanInstallArtifact.class);
DirectedAcyclicGraph<InstallArtifact> dag = new ThreadSafeDirectedAcyclicGraph<InstallArtifact>();
GraphNode<InstallArtifact> tree = dag.createRootNode(plan);
expect(plan.getGraph()).andReturn(tree);
BundleInstallArtifact bundle1 = createNiceMock(BundleInstallArtifact.class);
tree.addChild(dag.createRootNode(bundle1));
BundleInstallArtifact bundle2 = createNiceMock(BundleInstallArtifact.class);
tree.addChild(dag.createRootNode(bundle2));
PlanInstallArtifact nestedPlan = createNiceMock(PlanInstallArtifact.class);
GraphNode<InstallArtifact> nestedTree = dag.createRootNode(nestedPlan);
expect(nestedPlan.getGraph()).andReturn(nestedTree);
BundleInstallArtifact bundle3 = createNiceMock(BundleInstallArtifact.class);
nestedTree.addChild(dag.createRootNode(bundle3));
tree.addChild(nestedTree);
replay(plan, nestedPlan);
List<InstallArtifact> members = this.collector.collectPlanMembers(plan);
assertNotNull(members);
assertEquals(4, members.size());
assertTrue(members.contains(bundle1));
assertTrue(members.contains(bundle2));
assertTrue(members.contains(nestedPlan));
assertTrue(members.contains(bundle3));
}
}