/** * Copyright 2015-2016 Red Hat, Inc, and individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wildfly.swarm.bootstrap; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Properties; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.ByteArrayAsset; import org.jboss.shrinkwrap.api.asset.StringAsset; import org.jboss.shrinkwrap.api.exporter.ZipExporter; import org.jboss.shrinkwrap.api.importer.ZipImporter; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.wildfly.swarm.bootstrap.env.WildFlySwarmManifest; import org.wildfly.swarm.bootstrap.util.BootstrapProperties; /** * @author Bob McWhirter */ public abstract class AbstractBootstrapIntegrationTestCase { protected ClassLoader createClassLoader(JavaArchive archive) throws IOException { File tmpFile = export(archive); return new URLClassLoader(new URL[]{tmpFile.toURI().toURL()}, null); } protected ClassLoader createClassLoader(JavaArchive archive, ClassLoader parent) throws IOException { File tmpFile = export(archive); return new URLClassLoader(new URL[]{tmpFile.toURI().toURL()}, parent); } protected File export(JavaArchive archive) throws IOException { File tmpFile = File.createTempFile("boostrap-archive", ".jar"); tmpFile.deleteOnExit(); tmpFile.delete(); archive.as(ZipExporter.class).exportTo(tmpFile); return tmpFile; } protected JavaArchive createBootstrapArchive() throws IOException { return createBootstrapArchive(null); } protected JavaArchive createBootstrapArchive(String mainClassName) throws IOException { return createBootstrapArchive(mainClassName, null); } protected JavaArchive createBootstrapArchive(String mainClassName, String appArtifact) throws IOException { JavaArchive archive = ShrinkWrap.create(JavaArchive.class); archive.as(ZipImporter.class).importFrom(new JarFile(findBootstrapJar())); Properties props = new Properties(); if (appArtifact != null) { props.put(BootstrapProperties.APP_ARTIFACT, appArtifact); } ByteArrayOutputStream propsOut = new ByteArrayOutputStream(); props.store(propsOut, ""); propsOut.close(); archive.addAsManifestResource(new ByteArrayAsset(propsOut.toByteArray()), "wildfly-swarm.properties"); if (appArtifact != null) { WildFlySwarmManifest manifest = new WildFlySwarmManifest(); manifest.setAsset( appArtifact ); archive.add(new StringAsset(manifest.toString()), WildFlySwarmManifest.CLASSPATH_LOCATION ); } if (mainClassName != null) { Manifest manifest = new Manifest(); manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0"); manifest.getMainAttributes().put(new Attributes.Name("Wildfly-Swarm-Main-Class"), mainClassName); ByteArrayOutputStream out = new ByteArrayOutputStream(); manifest.write(out); out.close(); archive.addAsManifestResource(new ByteArrayAsset(out.toByteArray()), "MANIFEST.MF"); } return archive; } protected File findBootstrapJar() { Path targetDir = Paths.get("target"); File[] children = targetDir.toFile().listFiles(); for (File child : children) { if (child.getName().startsWith("bootstrap") && child.getName().endsWith(".jar") && !child.getName().endsWith("-sources.jar")) { return child; } } return null; } }