| /******************************************************************************* |
| * 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.deployer.test; |
| |
| import java.io.File; |
| import java.io.FileWriter; |
| import java.io.IOException; |
| import java.io.Writer; |
| |
| import org.eclipse.virgo.nano.deployer.api.core.DeploymentException; |
| import org.eclipse.virgo.nano.deployer.api.core.DeploymentIdentity; |
| import org.junit.Assert; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| import org.osgi.framework.Version; |
| |
| import static org.junit.Assert.assertTrue; |
| |
| /** |
| * These tests cover the use of URIs in plans. |
| */ |
| public class PlanUriIntegrationTests extends AbstractDeployerIntegrationTest { |
| |
| private static final String PLAN_TYPE = "plan"; |
| |
| private static final String TEST_RESOURCES_DIRECTORY = "src/test/resources/plan-deployment/"; |
| |
| private static final String GENERATED_PLAN_DIRECTORY = "target/PlanUriIntegrationTests/"; |
| |
| private static final String PLAN_EXTENSION = ".plan"; |
| |
| private static final String XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; |
| |
| private static final String NAMESPACES = " xmlns=\"http://www.eclipse.org/virgo/schema/plan\" \n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n xsi:schemaLocation=\" http://www.eclipse.org/virgo/schema/plan http://www.eclipse.org/virgo/schema/plan/eclipse-virgo-plan.xsd\""; |
| |
| @BeforeClass |
| public static void setUpClass() { |
| File generatedPlanDirectory = new File(GENERATED_PLAN_DIRECTORY); |
| generatedPlanDirectory.mkdirs(); |
| } |
| |
| @Test |
| public void testUriInPlan() throws IOException, DeploymentException { |
| TestArtifactInfo planInfo = createPlanFile("uriplan", Version.emptyVersion, false, false, |
| new File(TEST_RESOURCES_DIRECTORY + "global.jar").toURI().toString()); |
| testPlan(planInfo); |
| } |
| |
| @Test |
| public void testBundleAndConfigUrisInPlan() throws IOException, DeploymentException { |
| TestArtifactInfo planInfo = createPlanFile("uriplan", Version.emptyVersion, false, false, new File(TEST_RESOURCES_DIRECTORY |
| + "com.foo.bar.properties").toURI().toString(), new File(TEST_RESOURCES_DIRECTORY + "global.jar").toURI().toString()); |
| testPlan(planInfo); |
| } |
| |
| @Test(expected = DeploymentException.class) |
| public void testNonFileUriInPlan() throws IOException, DeploymentException { |
| TestArtifactInfo planInfo = createPlanFile("uriplan", Version.emptyVersion, false, false, "http://www.eclipse.org"); |
| testPlan(planInfo); |
| } |
| |
| @Test(expected = DeploymentException.class) |
| public void testRelativeUriInPlan() throws IOException, DeploymentException { |
| TestArtifactInfo planInfo = createPlanFile("uriplan", Version.emptyVersion, false, false, "file:" + TEST_RESOURCES_DIRECTORY + "global.jar"); |
| testPlan(planInfo); |
| } |
| |
| private void testPlan(TestArtifactInfo plan) throws DeploymentException { |
| DeploymentIdentity parentId = deploy(plan); |
| this.deployer.undeploy(parentId); |
| } |
| |
| private DeploymentIdentity deploy(TestArtifactInfo i) throws DeploymentException { |
| DeploymentIdentity identity = this.deployer.deploy(i.getFile().toURI()); |
| Assert.assertEquals(i.getType(), identity.getType()); |
| Assert.assertEquals(i.getName(), identity.getSymbolicName()); |
| Assert.assertEquals(i.getVersion(), new Version(identity.getVersion())); |
| return identity; |
| } |
| |
| private static TestArtifactInfo createPlanFile(String planName, Version planVersion, boolean scoped, boolean atomic, String... uris) |
| throws IOException { |
| StringBuilder planContent = new StringBuilder(1024); |
| planContent.append(XML_HEADER); |
| planContent.append("<plan name=\"").append(planName).append("\" version=\"") |
| .append(planVersion).append("\" scoped=\"").append(Boolean.valueOf(scoped)).append("\" atomic=\"") |
| .append(Boolean.valueOf(atomic)).append("\" \n").append(NAMESPACES).append(">\n"); |
| |
| for (String uri : uris) { |
| planContent.append(" <artifact uri=\"").append(uri).append("\"/>\n"); |
| } |
| |
| planContent.append("</plan>"); |
| |
| TestArtifactInfo info = new TestArtifactInfo(PLAN_TYPE, planName, planVersion); |
| |
| String fileName = planName + "-" + planVersion + PLAN_EXTENSION; |
| File planFile = new File(GENERATED_PLAN_DIRECTORY + fileName); |
| try (Writer writer = new FileWriter(planFile)) { |
| writer.write(planContent.toString()); |
| } |
| |
| info.setFile(planFile); |
| |
| return info; |
| } |
| |
| private static class TestArtifactInfo { |
| |
| private final String type; |
| |
| private final String name; |
| |
| private final Version version; |
| |
| private File file; |
| |
| TestArtifactInfo(String type, String name, Version version) { |
| this.type = type; |
| this.name = name; |
| this.version = version; |
| } |
| |
| public String getType() { |
| return type; |
| } |
| |
| public String getName() { |
| return name; |
| } |
| |
| public Version getVersion() { |
| return version; |
| } |
| |
| public void setFile(File file) { |
| this.file = file; |
| } |
| |
| public File getFile() { |
| if (this.file == null) { |
| throw new IllegalStateException("TestArtifactInfo file not set"); |
| } |
| return file; |
| } |
| |
| @Override |
| public String toString() { |
| return name; |
| } |
| |
| } |
| |
| } |