/******************************************************************************* * Copyright (c) 2008, 2010 VMware Inc. * 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 *******************************************************************************/ package org.eclipse.virgo.kernel.model.internal.deployer; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.isA; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.reset; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertEquals; import java.io.IOException; import org.eclipse.equinox.region.RegionDigraph; import org.eclipse.virgo.nano.deployer.api.core.DeploymentIdentity; import org.eclipse.virgo.kernel.deployer.model.RuntimeArtifactModel; import org.eclipse.virgo.kernel.model.StubArtifactRepository; import org.eclipse.virgo.kernel.model.StubSpringContextAccessor; import org.eclipse.virgo.kernel.model.internal.DependencyDeterminer; import org.eclipse.virgo.nano.serviceability.Assert.FatalAssertionException; import org.eclipse.virgo.kernel.stubs.StubInstallArtifact; import org.eclipse.virgo.kernel.stubs.StubPlanInstallArtifact; import org.eclipse.virgo.test.stubs.framework.StubBundleContext; import org.eclipse.virgo.test.stubs.region.StubRegion; import org.eclipse.virgo.test.stubs.support.TrueFilter; import org.junit.Before; import org.junit.Test; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.Version; public class ModelInstallArtifactLifecycleListenerInitializerTests { private final StubArtifactRepository artifactRepository = new StubArtifactRepository(); private final RuntimeArtifactModel runtimeArtifactModel = createMock(RuntimeArtifactModel.class); private final RegionDigraph regionDigraph = createMock(RegionDigraph.class); private final StubSpringContextAccessor springContextAccessor = new StubSpringContextAccessor(); private final StubRegion region = new StubRegion("test-region", null); private final StubBundleContext bundleContext; { this.bundleContext = new StubBundleContext(); String filterString1 = String.format("(&(objectClass=%s)(artifactType=bundle))", DependencyDeterminer.class.getCanonicalName()); this.bundleContext.addFilter(filterString1, new TrueFilter(filterString1)); String filterString2 = String.format("(&(objectClass=%s)(artifactType=plan))", DependencyDeterminer.class.getCanonicalName()); this.bundleContext.addFilter(filterString2, new TrueFilter(filterString2)); } private final ModelInstallArtifactLifecycleListenerInitializer initializer = new ModelInstallArtifactLifecycleListenerInitializer(artifactRepository, bundleContext, runtimeArtifactModel, regionDigraph, region, springContextAccessor); @Before public void setUp(){ reset(this.regionDigraph); expect(this.regionDigraph.getRegion("global")).andReturn(region).anyTimes(); replay(this.regionDigraph); } @Test(expected = FatalAssertionException.class) public void nullArtifactRepository() { new ModelInstallArtifactLifecycleListenerInitializer(null, bundleContext, runtimeArtifactModel, regionDigraph, region, springContextAccessor); } @Test(expected = FatalAssertionException.class) public void nullBundleContext() { new ModelInstallArtifactLifecycleListenerInitializer(artifactRepository, null, runtimeArtifactModel, regionDigraph, region, springContextAccessor); } @Test(expected = FatalAssertionException.class) public void nullRuntimeArtifactModel() { new ModelInstallArtifactLifecycleListenerInitializer(artifactRepository, bundleContext, null, regionDigraph, region, springContextAccessor); } @Test(expected = FatalAssertionException.class) public void nullRegionDigraph() { new ModelInstallArtifactLifecycleListenerInitializer(artifactRepository, bundleContext, runtimeArtifactModel, null, region, springContextAccessor); } @Test(expected = FatalAssertionException.class) public void nullRegion() { new ModelInstallArtifactLifecycleListenerInitializer(artifactRepository, bundleContext, runtimeArtifactModel, regionDigraph, null, springContextAccessor); } @Test(expected = FatalAssertionException.class) public void nullSpringContextAccessor() { new ModelInstallArtifactLifecycleListenerInitializer(artifactRepository, bundleContext, runtimeArtifactModel, regionDigraph, region, null); } @Test public void initialize() throws IOException, InvalidSyntaxException { expect(this.runtimeArtifactModel.getDeploymentIdentities()).andReturn(new DeploymentIdentity[] { new StubDeploymentIdentity("plan"), new StubDeploymentIdentity("bundle") }); expect(this.runtimeArtifactModel.get(isA(DeploymentIdentity.class))).andReturn(new StubInstallArtifact("bundle")); expect(this.runtimeArtifactModel.get(isA(DeploymentIdentity.class))).andReturn(new StubPlanInstallArtifact()); replay(this.runtimeArtifactModel); assertEquals(0, this.bundleContext.getServiceRegistrations().size()); this.initializer.initialize(); assertEquals(1, this.bundleContext.getServiceRegistrations().size()); assertEquals(2, this.artifactRepository.getArtifacts().size()); verify(this.runtimeArtifactModel); } @Test public void destroy() throws IOException, InvalidSyntaxException { expect(this.runtimeArtifactModel.getDeploymentIdentities()).andReturn(new DeploymentIdentity[0]); replay(this.runtimeArtifactModel); this.initializer.initialize(); assertEquals(1, this.bundleContext.getServiceRegistrations().size()); this.initializer.destroy(); assertEquals(0, this.bundleContext.getServiceRegistrations().size()); verify(this.runtimeArtifactModel); } private static class StubDeploymentIdentity implements DeploymentIdentity { private static final long serialVersionUID = 1L; private final String type; public StubDeploymentIdentity(String type) { this.type = type; } public String getSymbolicName() { return "test"; } public String getType() { return this.type; } public String getVersion() { return Version.emptyVersion.toString(); } } }