/* * Capsule * Copyright (c) 2014-2015, Parallel Universe Software Co. All rights reserved. * * This program and the accompanying materials are licensed under the terms * of the Eclipse Public License v1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ import capsule.test.Pair; import co.paralleluniverse.capsule.Jar; import co.paralleluniverse.capsule.test.CapsuleTestUtils; import co.paralleluniverse.common.FlexibleClassLoader; import co.paralleluniverse.common.JarClassLoader; import co.paralleluniverse.common.PathClassLoader; import org.junit.Test; import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * @author circlespainter */ public class CapsuleAgentTest { @Test public void testWrapperCapsuleAgent() throws Exception { final Jar wrapper = new Jar() .setAttribute("Manifest-Version", "1.0") .setAttribute("Main-Class", "Capsule") .setAttribute("Premain-Class", "Capsule") .setAttribute("Capsule-Agent", "true") .setAttribute("Caplets", "MyCapsule") .addClass(TestCapsule.class) .addClass(Pair.class) .addClass(JarClassLoader.class) .addClass(PathClassLoader.class) .addClass(FlexibleClassLoader.class) .addClass(MyCapsule.class) .addClass(Capsule.class); final Jar app = new Jar() .setAttribute("Manifest-Version", "1.0") .setAttribute("Main-Class", Capsule.class.getName()) .setAttribute("Premain-Class", Capsule.class.getName()) .setAttribute("Capsule-Agent", "true") .setAttribute("Application-Class", MainTest.class.getName()) .addClass(Capsule.class) .addClass(MainTest.class); final Path wrapperPath = Files.createTempFile("capsule-agent-test-wrapper", ".jar"); CapsuleTestUtils.newCapsule(wrapper, wrapperPath); // Create final Path appPath = Files.createTempFile("capsule-agent-test-app", ".jar"); CapsuleTestUtils.newCapsule(app, appPath); // Create final Path cacheDir = Files.createTempDirectory("capsule-agent-test-cache"); final ProcessBuilder pb = new ProcessBuilder("java", "-jar", wrapperPath.toString(), appPath.toString()); pb.environment().put("CAPSULE_CACHE_DIR", cacheDir.toAbsolutePath().toString()); assertEquals(0, pb.start().waitFor()); final Path appCache = cacheDir.resolve("apps").resolve(MainTest.class.getName()); assertTrue(Files.exists(appCache.resolve(MyCapsule.WRAPPER_AGENT_OK_FNAME))); Files.delete(wrapperPath); Files.delete(appPath); Files.walkFileTree(cacheDir, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { Files.delete(file); return FileVisitResult.CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { Files.delete(dir); return FileVisitResult.CONTINUE; } }); } }