mirror of https://github.com/apache/maven.git
MNG-2617 Creating a single directory which contains all the ITs
Submitted by: Dan Fabulich git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@465382 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2f76cfa17e
commit
213a9e2199
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* Created on Oct 17, 2006
|
||||
*
|
||||
*/
|
||||
package org.apache.maven.it.util;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
import java.util.zip.*;
|
||||
|
||||
|
||||
/* @todo this can be replaced with plexus-archiver */
|
||||
public class ResourceExtractor {
|
||||
|
||||
public static void extractResourcePath(String resourcePath, File dest) throws IOException {
|
||||
extractResourcePath(ResourceExtractor.class, resourcePath, dest);
|
||||
}
|
||||
|
||||
public static void extractResourcePath(Class cl, String resourcePath, File dest)
|
||||
throws IOException {
|
||||
URL url = cl.getResource(resourcePath);
|
||||
if (url == null) throw new IllegalArgumentException("Resource not found: " + resourcePath);
|
||||
if ("jar".equalsIgnoreCase(url.getProtocol())) {
|
||||
File jarFile = getJarFileFromUrl(url);
|
||||
extractResourcePathFromJar(cl, jarFile, resourcePath, dest);
|
||||
} else {
|
||||
try {
|
||||
File resourceFile = new File(new URI(url.toExternalForm()));
|
||||
if (resourceFile.isDirectory()) {
|
||||
FileUtils.copyDirectoryStructure(resourceFile, dest);
|
||||
} else {
|
||||
FileUtils.copyFile(resourceFile, dest);
|
||||
}
|
||||
} catch (URISyntaxException e) {
|
||||
throw new RuntimeException("Couldn't convert URL to File:" + url, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void extractResourcePathFromJar(Class cl, File jarFile, String resourcePath, File dest) throws IOException {
|
||||
ZipFile z = new ZipFile(jarFile, ZipFile.OPEN_READ);
|
||||
String zipStyleResourcePath = resourcePath.substring(1) + "/";
|
||||
ZipEntry ze = z.getEntry(zipStyleResourcePath);
|
||||
if (ze != null) {
|
||||
// DGF If it's a directory, then we need to look at all the entries
|
||||
for (Enumeration entries = z.entries(); entries.hasMoreElements();) {
|
||||
ze = (ZipEntry) entries.nextElement();
|
||||
if (ze.getName().startsWith(zipStyleResourcePath)) {
|
||||
String relativePath = ze.getName().substring(zipStyleResourcePath.length());
|
||||
File destFile = new File(dest, relativePath);
|
||||
if (ze.isDirectory()) {
|
||||
destFile.mkdirs();
|
||||
} else {
|
||||
FileOutputStream fos = new FileOutputStream(destFile);
|
||||
IOUtil.copy(z.getInputStream(ze), fos);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
FileOutputStream fos = new FileOutputStream(dest);
|
||||
IOUtil.copy(cl.getResourceAsStream(resourcePath), fos);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private static File getJarFileFromUrl(URL url) {
|
||||
if (!"jar".equalsIgnoreCase(url.getProtocol()))
|
||||
throw new IllegalArgumentException("This is not a Jar URL:"
|
||||
+ url.toString());
|
||||
String resourceFilePath = url.getFile();
|
||||
int index = resourceFilePath.indexOf("!");
|
||||
if (index == -1) {
|
||||
throw new RuntimeException("Bug! " + url.toExternalForm()
|
||||
+ " does not have a '!'");
|
||||
}
|
||||
String jarFileURI = resourceFilePath.substring(0, index);
|
||||
try {
|
||||
File jarFile = new File(new URI(jarFileURI));
|
||||
return jarFile;
|
||||
} catch (URISyntaxException e) {
|
||||
throw new RuntimeException("Bug! URI failed to parse: " + jarFileURI, e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
227
mavenexecute.pl
227
mavenexecute.pl
|
@ -1,19 +1,23 @@
|
|||
#!/usr/bin/perl
|
||||
use File::Path;
|
||||
use strict;
|
||||
|
||||
my $dirname = "maven-core-it";
|
||||
my $newITs = "maven-core-it-new";
|
||||
my $newITsResources = "$newITs/src/test/resources";
|
||||
|
||||
$dirname = "maven-core-it";
|
||||
$newITs = "maven-core-it-new";
|
||||
|
||||
open( FILE, "$dirname/integration-tests-descriptions.txt" ) or die;
|
||||
undef $/;
|
||||
$readme = <FILE>;
|
||||
my $readme = <FILE>;
|
||||
close( FILE );
|
||||
|
||||
$/ = "\n";
|
||||
|
||||
@descriptions = $readme =~ m/(it\d+\: .*?)(?=\nit\d+\:|$)/gsx;
|
||||
for $desc (@descriptions) {
|
||||
($name, $value) = ($desc =~ m/^(it\d+)\: (.*)$/s);
|
||||
my @descriptions = $readme =~ m/(it\d+\: .*?)(?=\nit\d+\:|$)/gsx;
|
||||
my %comment;
|
||||
for my $desc (@descriptions) {
|
||||
my ($name, $value) = ($desc =~ m/^(it\d+)\: (.*)$/s);
|
||||
chomp ($value);
|
||||
$comment{$name} = $value;
|
||||
}
|
||||
|
@ -21,42 +25,82 @@ for $desc (@descriptions) {
|
|||
rmtree($newITs);
|
||||
mkpath($newITs);
|
||||
|
||||
open( POM, "> $newITs/pom.xml" );
|
||||
print POM "<project>\n";
|
||||
print POM " <modelVersion>4.0.0</modelVersion>\n";
|
||||
print POM " <groupId>org.apache.maven.it</groupId>\n";
|
||||
print POM " <artifactId>maven-core-its</artifactId>\n";
|
||||
print POM " <version>1.0-SNAPSHOT</version>\n";
|
||||
print POM " <packaging>pom</packaging>\n";
|
||||
print POM " <modules>\n";
|
||||
open (POM, "> $newITs/pom.xml" );
|
||||
print POM <<END;
|
||||
|
||||
<project>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.apache.maven.integrationtests</groupId>
|
||||
<artifactId>maven-core-integrationtests</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<name>Maven Integration Tests</name>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<includes>
|
||||
<include>**/IntegrationTestSuite.java</include>
|
||||
</includes>
|
||||
<forkMode>never</forkMode>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-core-it-verifier</artifactId>
|
||||
<version>2.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
END
|
||||
|
||||
close POM;
|
||||
|
||||
my $suiteRoot = "$newITs/src/test/java/org/apache/maven/integrationtests";
|
||||
mkpath($suiteRoot);
|
||||
mkpath($newITsResources);
|
||||
|
||||
open( SUITE, "> $suiteRoot/IntegrationTestSuite.java" );
|
||||
print SUITE <<END;
|
||||
package org.apache.maven.integrationtests;
|
||||
|
||||
import junit.framework.*;
|
||||
|
||||
public class IntegrationTestSuite extends TestCase {
|
||||
|
||||
public static Test suite() {
|
||||
TestSuite suite = new TestSuite();
|
||||
END
|
||||
|
||||
opendir(DIR, $dirname) or die "can't opendir $dirname: $!";
|
||||
while (defined($filename = readdir(DIR))) {
|
||||
while (defined(my $filename = readdir(DIR))) {
|
||||
next unless (-d "$dirname/$filename");
|
||||
next if ($filename eq ".svn");
|
||||
next unless ($filename =~ m/^it0\d+$/);
|
||||
$filePrebuildHook = "$dirname/$filename/prebuild-hook.txt";
|
||||
$fileCliOptions = "$dirname/$filename/cli-options.txt";
|
||||
$fileSystemProperties = "$dirname/$filename/system.properties";
|
||||
$fileVerifierProperties = "$dirname/$filename/verifier.properties";
|
||||
$fileGoals = "$dirname/$filename/goals.txt";
|
||||
$fileExpectedResults = "$dirname/$filename/expected-results.txt";
|
||||
$failOnErrorOutput = 1;
|
||||
my $filePrebuildHook = "$dirname/$filename/prebuild-hook.txt";
|
||||
my $fileCliOptions = "$dirname/$filename/cli-options.txt";
|
||||
my $fileSystemProperties = "$dirname/$filename/system.properties";
|
||||
my $fileVerifierProperties = "$dirname/$filename/verifier.properties";
|
||||
my $fileGoals = "$dirname/$filename/goals.txt";
|
||||
my $fileExpectedResults = "$dirname/$filename/expected-results.txt";
|
||||
my $failOnErrorOutput = 1;
|
||||
|
||||
# 96
|
||||
# 97 will not due to bugs in maven, they work when other ITs are run but it's due to ordering and fluke
|
||||
# notes: I'm not sure this is testing anything anyone would be stupid enough to do. Basically creating an
|
||||
# incomprehensible path though projects.
|
||||
# - mvn clean with this project seems to require plugin resolution and it fails. Executing clean should not require plugins.
|
||||
# fix: remove the plugin it requires to be built to work and use a special IT repo that is checked in so that it will work.
|
||||
# we should also setup a local instance of jetty to test remote repository workings
|
||||
#
|
||||
# - setup file based repo
|
||||
# - run all tests with file-base repos
|
||||
# - fire up jetty
|
||||
# - run all tests with an http-based repo
|
||||
#
|
||||
# We need to isolate
|
||||
my $itTestCaseDirectory = $suiteRoot;
|
||||
my $itTestName = "Maven" . uc($filename) . "Test";
|
||||
my $testFile = "$itTestCaseDirectory/$itTestName" . ".java";
|
||||
my $testProjectDirectory = "$newITsResources/$filename";
|
||||
|
||||
# 96, 97 will not due to bugs in maven, they work when other ITs are run but it's due to ordering and fluke
|
||||
# 43 will not run because it can't find the maven-help-plugin
|
||||
# 90 will not run because it relies of an environment variable which I think is wrong
|
||||
# 91 POM interpolation test failure
|
||||
|
@ -74,30 +118,25 @@ while (defined($filename = readdir(DIR))) {
|
|||
$filename eq "it0106" ||
|
||||
$filename eq "it0107" )
|
||||
{
|
||||
print POM " <!-- <module>$filename</module> -->\n";
|
||||
print SUITE " // suite.addTestSuite($itTestName.class);\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
print POM " <module>$filename</module>\n";
|
||||
print SUITE " suite.addTestSuite($itTestName.class);\n";
|
||||
}
|
||||
|
||||
if (!exists($comment{$filename})) {
|
||||
die "no comment: $filename\n";
|
||||
}
|
||||
|
||||
$itBaseDirectory = "$newITs/$filename";
|
||||
$itPOM = "$itBaseDirectory/pom.xml";
|
||||
$itTestCaseDirectory = "$itBaseDirectory/src/test/java/org/apache/maven/it";
|
||||
$itTestName = "Maven" . uc($filename) . "Test";
|
||||
$testFile = "$itTestCaseDirectory/$itTestName" . ".java";
|
||||
$testProjectDirectory = "$itBaseDirectory/src/test-project";
|
||||
|
||||
|
||||
mkpath($itTestCaseDirectory);
|
||||
# DGF can't believe perl doesn't have a baked in recursive copy!
|
||||
if ("MSWin32" eq $^O) {
|
||||
$winSrc = "$dirname/$filename";
|
||||
my $winSrc = "$dirname/$filename";
|
||||
$winSrc =~ s!/!\\!g;
|
||||
$winDest = $testProjectDirectory;
|
||||
my $winDest = $testProjectDirectory;
|
||||
$winDest =~ s!/!\\!g;
|
||||
mkpath($testProjectDirectory);
|
||||
system( "xcopy /e $winSrc $winDest" );
|
||||
|
@ -112,50 +151,35 @@ while (defined($filename = readdir(DIR))) {
|
|||
unlink("$testProjectDirectory/prebuild-hook.txt");
|
||||
unlink("$testProjectDirectory/log.txt");
|
||||
|
||||
open( P, "> $itPOM" ) or die;
|
||||
print P "<project>\n";
|
||||
print P " <modelVersion>4.0.0</modelVersion>\n";
|
||||
print P " <groupId>org.apache.maven.it</groupId>\n";
|
||||
print P " <artifactId>maven-core-it-$filename</artifactId>\n";
|
||||
print P " <version>1.0-SNAPSHOT</version>\n";
|
||||
print P " <name>Maven Integration Tests :: $filename</name>\n";
|
||||
print P " <description>![CDATA[\n\n";
|
||||
print P " $comment{$filename}\n\n";
|
||||
print P " ]]</description>\n";
|
||||
|
||||
$build = <<EOF;
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-core-it-verifier</artifactId>
|
||||
<version>2.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
EOF
|
||||
|
||||
print P "$build";
|
||||
print P "</project>\n";
|
||||
close P;
|
||||
|
||||
open( T, "> $testFile") or die;
|
||||
open( T, "> $testFile") or die;
|
||||
print $filename . "\n";
|
||||
print T "package org.apache.maven.it;\n\n";
|
||||
print T "import java.io.*;\n";
|
||||
print T "import java.util.*;\n";
|
||||
print T "import junit.framework.*;\n\n";
|
||||
print T "import org.apache.maven.it.util.*;\n";
|
||||
print T "public class $itTestName extends TestCase /*extends AbstractMavenIntegrationTest*/ {\n";
|
||||
print T "/** $comment{$filename} */\n";
|
||||
print T "public void test$filename() throws Exception {\n";
|
||||
print T "String basedir = System.getProperty(\"basedir\");\n";
|
||||
print T "File testDir = new File(basedir, \"src\/test-project\");\n";
|
||||
print T "Verifier verifier = new Verifier(testDir.getAbsolutePath());\n";
|
||||
|
||||
print T <<END;
|
||||
package org.apache.maven.integrationtests;
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
import junit.framework.*;
|
||||
|
||||
import org.apache.maven.it.*;
|
||||
import org.apache.maven.it.util.*;
|
||||
|
||||
public class $itTestName extends TestCase /*extends AbstractMavenIntegrationTest*/ {
|
||||
|
||||
/** $comment{$filename} */
|
||||
public void test$filename() throws Exception {
|
||||
String basedir = System.getProperty("maven.test.tmpdir", System.getProperty("java.io.tmpdir"));
|
||||
File testDir = new File(basedir, getName());
|
||||
FileUtils.deleteDirectory(testDir);
|
||||
System.out.println("Extracting $filename to " + testDir.getAbsolutePath());
|
||||
ResourceExtractor.extractResourcePath(getClass(), "/$filename", testDir);
|
||||
Verifier verifier = new Verifier(testDir.getAbsolutePath());
|
||||
END
|
||||
|
||||
if (-e "$filePrebuildHook") {
|
||||
open (FILE, "$filePrebuildHook");
|
||||
while ($line = <FILE>) {
|
||||
while (my $line = <FILE>) {
|
||||
if ($line =~ /^(rm|rmdir) (.*)/) {
|
||||
($cmd, $path) = ($1, $2);
|
||||
my ($cmd, $path) = ($1, $2);
|
||||
|
||||
if ($cmd eq "rm") {
|
||||
if ($path =~ m/^\$\{artifact:([^:]*?):([^:]*?):([^:]*?):([^:]*?)\}$/) {
|
||||
|
@ -178,7 +202,7 @@ EOF
|
|||
|
||||
if (-e "$fileCliOptions") {
|
||||
open(FILE, $fileCliOptions);
|
||||
$cliOptions = <FILE>;
|
||||
my $cliOptions = <FILE>;
|
||||
chomp ($cliOptions);
|
||||
$cliOptions =~ s/"/\\"/g;
|
||||
print T "List cliOptions = new ArrayList();\n";
|
||||
|
@ -189,9 +213,9 @@ EOF
|
|||
if (-e "$fileSystemProperties") {
|
||||
open(FILE, $fileSystemProperties);
|
||||
print T "Properties systemProperties = new Properties();\n";
|
||||
while ($line = <FILE>) {
|
||||
while (my $line = <FILE>) {
|
||||
next if ($line =~ m/^\s*\#/);
|
||||
($name, $value) = ($line =~ m/^([^=]*)=(.*)/);
|
||||
my ($name, $value) = ($line =~ m/^([^=]*)=(.*)/);
|
||||
print T "systemProperties.put(\"$name\", \"$value\");\n";
|
||||
}
|
||||
print T "verifier.setSystemProperties(systemProperties);\n";
|
||||
|
@ -200,9 +224,9 @@ EOF
|
|||
if (-e "$fileVerifierProperties") {
|
||||
open(FILE, $fileVerifierProperties);
|
||||
print T "Properties verifierProperties = new Properties();\n";
|
||||
while ($line = <FILE>) {
|
||||
while (my $line = <FILE>) {
|
||||
next if ($line =~ m/^\s*\#/);
|
||||
($name, $value) = ($line =~ m/^([^=]*)=(.*)/);
|
||||
my ($name, $value) = ($line =~ m/^([^=]*)=(.*)/);
|
||||
if ($name eq "failOnErrorOutput" and $value eq "false") {
|
||||
$failOnErrorOutput = 0;
|
||||
}
|
||||
|
@ -214,8 +238,8 @@ EOF
|
|||
|
||||
open (FILE, $fileGoals) or die "Couldn't open $fileGoals: $!\n";
|
||||
|
||||
@goals = ();
|
||||
while ($line = <FILE>) {
|
||||
my @goals = ();
|
||||
while (my $line = <FILE>) {
|
||||
next if ($line =~ m/^\s*$/);
|
||||
chomp ($line);
|
||||
push (@goals, $line);
|
||||
|
@ -224,7 +248,7 @@ EOF
|
|||
print T "verifier.executeGoal(\"$goals[0]\");\n";
|
||||
} else {
|
||||
print T "List goals = Arrays.asList(new String[] {";
|
||||
for ($i = 0; $i < @goals; $i++) {
|
||||
for (my $i = 0; $i < @goals; $i++) {
|
||||
print T "\"$goals[$i]\"";
|
||||
print T ", " if ($i != scalar(@goals) -1);
|
||||
}
|
||||
|
@ -238,7 +262,7 @@ EOF
|
|||
|
||||
open (FILE, $fileExpectedResults) or die "Couldn't open $fileExpectedResults: $!\n";
|
||||
|
||||
while ($line = <FILE>) {
|
||||
while (my $line = <FILE>) {
|
||||
chomp ($line);
|
||||
#print T ("OLDLINE: $line\n");
|
||||
if ($line =~ /^\#(.*)/) {
|
||||
|
@ -263,13 +287,18 @@ EOF
|
|||
} else {
|
||||
print T "// don't verify error free log\n";
|
||||
}
|
||||
print T "verifier.resetStreams();\n";
|
||||
print T "System.out.println(\"PASS\");\n";
|
||||
print T "}}\n\n";
|
||||
|
||||
}
|
||||
|
||||
print POM " </modules>\n";
|
||||
print POM "</project>";
|
||||
|
||||
print T $postamble;
|
||||
# DGF end of the suite
|
||||
print SUITE <<END;
|
||||
return suite;
|
||||
}
|
||||
}
|
||||
END
|
||||
|
||||
|
||||
closedir(DIR);
|
||||
|
|
Loading…
Reference in New Issue