Repository: flex-falcon Updated Branches: refs/heads/feature/maven-migration 15b295eaf -> 81d2994e5
Implemented the MavenTestAdapter to automatically unpack the framework config zip (Needed the commons-compress library for that) Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/da24e603 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/da24e603 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/da24e603 Branch: refs/heads/feature/maven-migration Commit: da24e6038b731d4ec725724e8a8b892137e049a0 Parents: b4fd161 Author: Christofer Dutz <christofer.d...@codecentric.de> Authored: Sat Mar 19 17:07:42 2016 +0100 Committer: Christofer Dutz <christofer.d...@codecentric.de> Committed: Sat Mar 19 17:07:42 2016 +0100 ---------------------------------------------------------------------- compiler.tests/downloads.xml | 35 ++++++++- .../org/apache/flex/utils/MavenTestAdapter.java | 74 +++++++++++++++++++- 2 files changed, 103 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/da24e603/compiler.tests/downloads.xml ---------------------------------------------------------------------- diff --git a/compiler.tests/downloads.xml b/compiler.tests/downloads.xml index 2638cb9..ebd4324 100644 --- a/compiler.tests/downloads.xml +++ b/compiler.tests/downloads.xml @@ -33,7 +33,8 @@ For Apache, the JARS must be removed from the repository. Licenses: - JUnit (4.10) - CPL 1.0 + JUnit (4.10) - CPL 1.0 + Commons Compress - Apache 2.0 --> <!-- @@ -41,7 +42,7 @@ they are each downloaded only if they don't already exist. --> - <target name="main" depends="prepare, junit-jar" + <target name="main" depends="prepare, junit-jar, commons-compress-jar" description="Downloads all the required thirdparty JARs"/> <target name="prepare" > @@ -57,6 +58,7 @@ <delete includeEmptyDirs="true" failonerror="false"> <fileset dir="${download.dir}"> <include name="junit*/**"/> + <include name="commons-compress*/**"/> </fileset> </delete> </target> @@ -115,5 +117,32 @@ <param name="destJarFile" value="${lib.dir}/junit-4.10.jar"/> </antcall> </target> - + + <!-- + commons-compress + --> + + <target name="commons-compress-jar-check" description="Checks if commons-compress JAR exists."> + <condition property="commons-compress.jar.exists"> + <and> + <available file="${lib.dir}/commons-compress-1.10.jar"/> + </and> + </condition> + </target> + + <target name="commons-compress-jar" depends="commons-compress-jar-check" unless="commons-compress.jar.exists" + description="Copies the commons-compress JAR to the lib directory."> + <echo message="Obtaining lib/commons-compress-1.10.jar"/> + <antcall target="commons-compress-download-jar"/> + </target> + + <target name="commons-compress-download-jar" depends="commons-compress-jar-check" unless="commons-compress.jar.exists" + description="Downloads the commons-compress jar."> + <antcall target="download-jar"> + <param name="srcUrl" value="https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.10"/> + <param name="srcJarFile" value="commons-compress-1.10.jar"/> + <param name="destJarFile" value="${lib.dir}/commons-compress-1.10.jar"/> + </antcall> + </target> + </project> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/da24e603/compiler.tests/src/org/apache/flex/utils/MavenTestAdapter.java ---------------------------------------------------------------------- diff --git a/compiler.tests/src/org/apache/flex/utils/MavenTestAdapter.java b/compiler.tests/src/org/apache/flex/utils/MavenTestAdapter.java index 485d14b..ae45eda 100644 --- a/compiler.tests/src/org/apache/flex/utils/MavenTestAdapter.java +++ b/compiler.tests/src/org/apache/flex/utils/MavenTestAdapter.java @@ -19,9 +19,13 @@ package org.apache.flex.utils; +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.ArchiveException; +import org.apache.commons.compress.archivers.ArchiveInputStream; +import org.apache.commons.compress.archivers.ArchiveStreamFactory; import org.apache.commons.io.FilenameUtils; -import java.io.File; +import java.io.*; import java.util.ArrayList; import java.util.List; @@ -30,6 +34,10 @@ import java.util.List; */ public class MavenTestAdapter implements ITestAdapter { + private static final int KILOBYTE = 1024; + private static final int MEGABYTE = KILOBYTE * 1024; + private static final int BUFFER_MAX = MEGABYTE; + @Override public String getTempDir() { File tempDir = new File("target/surefire-temp"); @@ -79,7 +87,7 @@ public class MavenTestAdapter implements ITestAdapter { // If the directory doesn't exist, we have to create it by unpacking the zip archive. // This is identical behaviour to Flexmojos, which does the same thing. if(!unpackedConfigsDir.exists()) { - // TODO: Implement + unpackFrameworkConfigs(configsZip, unpackedConfigsDir); } return new File(unpackedConfigsDir, type + "-manifest.xml").getPath(); } @@ -105,7 +113,7 @@ public class MavenTestAdapter implements ITestAdapter { // If the directory doesn't exist, we have to create it by unpacking the zip archive. // This is identical behaviour to Flexmojos, which does the same thing. if(!unpackedConfigsDir.exists()) { - // TODO: Implement + unpackFrameworkConfigs(configsZip, unpackedConfigsDir); } return new File(unpackedConfigsDir, type + "-manifest.xml").getPath(); } @@ -133,4 +141,64 @@ public class MavenTestAdapter implements ITestAdapter { return dependency; } + private void unpackFrameworkConfigs(File configZip, File outputDirectory) { + final byte[] data = new byte[BUFFER_MAX]; + ArchiveInputStream archiveInputStream = null; + ArchiveEntry entry; + try { + archiveInputStream = new ArchiveStreamFactory().createArchiveInputStream( + new BufferedInputStream(new FileInputStream(configZip))); + if(!outputDirectory.exists() && !outputDirectory.mkdirs()) { + throw new RuntimeException("Could not create output directory for config zip at " + + outputDirectory.getPath()); + } + while ((entry = archiveInputStream.getNextEntry()) != null) { + final File outputFile = new File(outputDirectory, entry.getName()); + + // Entry is a directory. + if (entry.isDirectory()) { + if (!outputFile.exists()) { + if(!outputFile.mkdirs()) { + throw new RuntimeException( + "Could not create output directory " + outputFile.getAbsolutePath()); + } + } + } + + // Entry is a file. + else { + final FileOutputStream fos = new FileOutputStream(outputFile); + BufferedOutputStream dest = null; + try { + dest = new BufferedOutputStream(fos, BUFFER_MAX); + + int count; + while ((count = archiveInputStream.read(data, 0, BUFFER_MAX)) != -1) { + dest.write(data, 0, count); + } + } finally { + if(dest != null) { + dest.flush(); + dest.close(); + } + } + } + } + } catch (FileNotFoundException e) { + throw new RuntimeException("Error unpacking resources", e); + } catch (IOException e) { + throw new RuntimeException("Error unpacking resources", e); + } catch (ArchiveException e) { + throw new RuntimeException("Error unpacking resources", e); + } finally { + if(archiveInputStream != null) { + try { + archiveInputStream.close(); + } catch(Exception e) { + // Ignore... + } + } + } + } + }