You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2006/04/17 16:33:18 UTC
svn commit: r394678 - in /maven/plugins/trunk/maven-jar-plugin/src:
main/java/org/apache/maven/plugin/jar/JarSignMojo.java
test/java/org/apache/maven/plugin/jar/JarSignMojoTest.java
test/java/org/apache/maven/plugin/jar/JarSignVerifyMojoTest.java
Author: jdcasey
Date: Mon Apr 17 07:33:16 2006
New Revision: 394678
URL: http://svn.apache.org/viewcvs?rev=394678&view=rev
Log:
[MJAR-32] Applying fix for jar-signer mojo verifying the wrong jar file after signing.
Modified:
maven/plugins/trunk/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarSignMojo.java
maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignMojoTest.java
maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignVerifyMojoTest.java
Modified: maven/plugins/trunk/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarSignMojo.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarSignMojo.java?rev=394678&r1=394677&r2=394678&view=diff
==============================================================================
--- maven/plugins/trunk/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarSignMojo.java (original)
+++ maven/plugins/trunk/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarSignMojo.java Mon Apr 17 07:33:16 2006
@@ -117,7 +117,7 @@
/**
* See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/jarsigner.html#Options">options</a>.
- *
+ * <p/>
* Not specifying this argument will sign the jar in-place (your original jar is going to be overwritten).
*
* @parameter expression="${signedjar}"
@@ -186,23 +186,29 @@
getLog().info( "Skipping JAR signing for file: " + getJarFile().getAbsolutePath() );
}
+ // we use this mojo to check if there's a need to sign.
+ // If we sign and if we need to verify, we reuse it to check the signature
JarSignVerifyMojo verifyMojo = createJarSignVerifyMojo();
+ verifyMojo.setWorkingDir( workingDirectory );
+
+ verifyMojo.setBasedir( basedir );
+
File signedJarFile = signedjar != null ? signedjar : getJarFile();
+ verifyMojo.setVerbose( verbose );
+
+ verifyMojo.setJarPath( signedJarFile );
+
if ( signedJarFile.exists() )
{
- verifyMojo.setWorkingDir( workingDirectory );
- verifyMojo.setBasedir( basedir );
- verifyMojo.setJarPath( signedJarFile );
- verifyMojo.setVerbose( verbose );
verifyMojo.setErrorWhenNotSigned( false );
verifyMojo.execute();
}
if ( verifyMojo.isSigned() )
{
- getLog().info( "JAR " + getJarFile().getAbsoluteFile() + " is already signed. Skipping.");
+ getLog().info( "JAR " + signedJarFile.getAbsoluteFile() + " is already signed. Skipping." );
return;
}
Modified: maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignMojoTest.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignMojoTest.java?rev=394678&r1=394677&r2=394678&view=diff
==============================================================================
--- maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignMojoTest.java (original)
+++ maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignMojoTest.java Mon Apr 17 07:33:16 2006
@@ -104,7 +104,7 @@
project.setArtifact( mockArtifact );
mojo.setProject( project );
- new File(getNullJar()).delete();
+ new File( getDummyNonSignedJarPath() ).delete();
}
public void tearDown()
@@ -117,12 +117,65 @@
public void testRunOK()
throws MojoExecutionException
{
+ JarSignVerifyMojoTest.MockJarSignVerifyMojo mockJarSignVerifyMojo =
+ new JarSignVerifyMojoTest.MockJarSignVerifyMojo();
+ mojo.verifyMojo = mockJarSignVerifyMojo;
+
+ mojo.execute();
+
+ String[] expectedArguments = {"-keystore", "/tmp/keystore", "-keypass", "secretpassword", "-signedjar",
+ "/tmp/signed/file-version.jar", getDummyNonSignedJarPath(), "alias"};
+
+ checkMojo( expectedArguments );
+
+ assertEquals( "sign operation wasn't verified", 0, mockJarSignVerifyMojo.commandLines.size() );
+ }
+
+ /**
+ */
+ public void testVerifyJarGeneratedBySignOperation()
+ throws MojoExecutionException
+ {
+ JarSignVerifyMojoTest.MockJarSignVerifyMojo mockJarSignVerifyMojo =
+ new JarSignVerifyMojoTest.MockJarSignVerifyMojo();
+ mojo.verifyMojo = mockJarSignVerifyMojo;
+ mojo.setVerify( true );
+ mockJarSignVerifyMojo.lastOutLine = "jar verified.";
+
mojo.execute();
String[] expectedArguments = {"-keystore", "/tmp/keystore", "-keypass", "secretpassword", "-signedjar",
- "/tmp/signed/file-version.jar", getNullJar(), "alias"};
+ "/tmp/signed/file-version.jar", getDummyNonSignedJarPath(), "alias"};
checkMojo( expectedArguments );
+
+ String[] expectedVerifyArguments = {"-verify", "/tmp/signed/file-version.jar"};
+
+ JarSignVerifyMojoTest.checkMojo( mockJarSignVerifyMojo, expectedVerifyArguments );
+ }
+
+ /**
+ */
+ public void testVerifyInPlaceSignedJar()
+ throws MojoExecutionException
+ {
+ JarSignVerifyMojoTest.MockJarSignVerifyMojo mockJarSignVerifyMojo =
+ new JarSignVerifyMojoTest.MockJarSignVerifyMojo();
+ mojo.verifyMojo = mockJarSignVerifyMojo;
+ mojo.setSignedJar( null );
+ mojo.setVerify( true );
+ mockJarSignVerifyMojo.lastOutLine = "jar verified.";
+
+ mojo.execute();
+
+ String[] expectedArguments =
+ {"-keystore", "/tmp/keystore", "-keypass", "secretpassword", getDummyNonSignedJarPath(), "alias"};
+
+ checkMojo( expectedArguments );
+
+ String[] expectedVerifyArguments = {"-verify", getDummyNonSignedJarPath()};
+
+ JarSignVerifyMojoTest.checkMojo( mockJarSignVerifyMojo, expectedVerifyArguments );
}
/**
@@ -153,12 +206,12 @@
mojo.verifyMojo = new MyJarSignVerifyMojo();
- new File(getNullJar()).createNewFile();
+ new File( getDummyNonSignedJarPath() ).createNewFile();
mojo.execute();
String[] expectedArguments = {"-keystore", "/tmp/keystore", "-keypass", "secretpassword", "-signedjar",
- "/tmp/signed/file-version.jar", getNullJar(), "alias"};
+ "/tmp/signed/file-version.jar", getDummyNonSignedJarPath(), "alias"};
checkMojo( expectedArguments );
}
@@ -167,6 +220,10 @@
*/
public void testRunFailure()
{
+ JarSignVerifyMojoTest.MockJarSignVerifyMojo mockJarSignVerifyMojo =
+ new JarSignVerifyMojoTest.MockJarSignVerifyMojo();
+ mojo.verifyMojo = mockJarSignVerifyMojo;
+
mojo.executeResult = 1;
// any missing argument should produce this. Let's simulate a missing alias
@@ -183,12 +240,14 @@
}
String[] expectedArguments = {"-keystore", "/tmp/keystore", "-keypass", "secretpassword", "-signedjar",
- "/tmp/signed/file-version.jar", getNullJar()};
+ "/tmp/signed/file-version.jar", getDummyNonSignedJarPath()};
checkMojo( expectedArguments );
+
+ assertEquals( "sign operation wasn't verified", 0, mockJarSignVerifyMojo.commandLines.size() );
}
- private String getNullJar()
+ private String getDummyNonSignedJarPath()
{
String value = System.getProperty( "java.io.tmpdir" );
if ( !value.endsWith( "\\" ) && !value.endsWith( "/" ) )
@@ -216,7 +275,7 @@
}
String[] expectedArguments = {"-keystore", "/tmp/keystore", "-keypass", "secretpassword", "-signedjar",
- "/tmp/signed/file-version.jar", getNullJar(), "alias"};
+ "/tmp/signed/file-version.jar", getDummyNonSignedJarPath(), "alias"};
checkMojo( expectedArguments );
}
Modified: maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignVerifyMojoTest.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignVerifyMojoTest.java?rev=394678&r1=394677&r2=394678&view=diff
==============================================================================
--- maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignVerifyMojoTest.java (original)
+++ maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignVerifyMojoTest.java Mon Apr 17 07:33:16 2006
@@ -23,9 +23,7 @@
import org.codehaus.plexus.util.cli.CommandLineException;
import org.codehaus.plexus.util.cli.StreamConsumer;
-import junit.framework.Test;
import junit.framework.TestCase;
-import junit.framework.TestSuite;
import java.io.File;
import java.io.InputStream;
@@ -35,83 +33,97 @@
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
-import java.util.Arrays;
/**
* These unit tests only check whether the generated command lines are correct.
* Really running the command would mean checking the results, which is too painful and not really a unit test.
* It would probably require to 'jarsigner -verify' the resulting signed jar and I believe it would make the code
* too complex with very few benefits.
- *
+ *
* @author Jerome Lacoste <je...@coffeebreaks.org>
* @version $Id$
*/
-public class JarSignVerifyMojoTest extends TestCase
+public class JarSignVerifyMojoTest
+ extends TestCase
{
private MockJarSignVerifyMojo mojo;
- static class MockJarSignVerifyMojo extends JarSignVerifyMojo {
+ static class MockJarSignVerifyMojo
+ extends JarSignVerifyMojo
+ {
public int executeResult;
+
public List commandLines = new ArrayList();
+
public String failureMsg;
+
public Map systemProperties = new HashMap();
+
public String lastOutLine;
- protected int executeCommandLine( Commandline commandLine, InputStream inputStream,
- StreamConsumer systemOut, StreamConsumer systemErr )
- throws CommandLineException
+ protected int executeCommandLine( Commandline commandLine, InputStream inputStream, StreamConsumer systemOut,
+ StreamConsumer systemErr )
+ throws CommandLineException
{
commandLines.add( commandLine );
- if ( failureMsg != null ) {
- throw new CommandLineException( failureMsg ) ;
+ if ( failureMsg != null )
+ {
+ throw new CommandLineException( failureMsg );
}
- if ( lastOutLine != null ) {
- systemOut.consumeLine( lastOutLine );
+ if ( lastOutLine != null )
+ {
+ systemOut.consumeLine( lastOutLine );
}
return executeResult;
}
- protected String getSystemProperty( String key ) {
- return (String) systemProperties.get( key );
+ protected String getSystemProperty( String key )
+ {
+ return (String) systemProperties.get( key );
}
}
- public void setUp() throws IOException {
+ public void setUp()
+ throws IOException
+ {
mojo = new MockJarSignVerifyMojo();
mojo.executeResult = 0;
// it doesn't really matter if the paths are not cross-platform, we don't execute the command lines anyway
- File basedir = new File( System.getProperty( "java.io.tmpdir" ) ) ;
+ File basedir = new File( System.getProperty( "java.io.tmpdir" ) );
mojo.setBasedir( basedir );
mojo.setWorkingDir( basedir );
mojo.setJarPath( new File( "/tmp/signed/file-version.jar" ) );
}
- public void tearDown() {
+ public void tearDown()
+ {
mojo = null;
}
- public void testPleaseMaven() {
+ public void testPleaseMaven()
+ {
assertTrue( true );
}
/**
*/
- public void testRunOK() throws MojoExecutionException
+ public void testRunOK()
+ throws MojoExecutionException
{
mojo.lastOutLine = "jar verified.";
mojo.execute();
- String[] expectedArguments =
- { "-verify", "/tmp/signed/file-version.jar" };
+ String[] expectedArguments = {"-verify", "/tmp/signed/file-version.jar"};
checkMojo( expectedArguments );
}
/**
*/
- public void testRunOKAllArguments() throws MojoExecutionException
+ public void testRunOKAllArguments()
+ throws MojoExecutionException
{
mojo.lastOutLine = "jar verified.";
@@ -120,8 +132,7 @@
mojo.execute();
- String[] expectedArguments =
- { "-verify", "-verbose", "-certs", "/tmp/signed/file-version.jar" };
+ String[] expectedArguments = {"-verify", "-verbose", "-certs", "/tmp/signed/file-version.jar"};
checkMojo( expectedArguments );
}
@@ -132,15 +143,17 @@
{
mojo.executeResult = 1;
- try {
- mojo.execute();
- fail( "expected failure" );
- } catch ( MojoExecutionException e ) {
+ try
+ {
+ mojo.execute();
+ fail( "expected failure" );
+ }
+ catch ( MojoExecutionException e )
+ {
assertTrue( e.getMessage().startsWith( "Result of " ) );
}
- String[] expectedArguments =
- { "-verify", "/tmp/signed/file-version.jar" };
+ String[] expectedArguments = {"-verify", "/tmp/signed/file-version.jar"};
checkMojo( expectedArguments );
}
@@ -151,15 +164,17 @@
{
mojo.lastOutLine = "jar is unsigned.";
- try {
- mojo.execute();
- fail( "expected failure" );
- } catch ( MojoExecutionException e ) {
+ try
+ {
+ mojo.execute();
+ fail( "expected failure" );
+ }
+ catch ( MojoExecutionException e )
+ {
assertTrue( e.getMessage().startsWith( "Verify failed: jar is unsigned." ) );
}
- String[] expectedArguments =
- { "-verify", "/tmp/signed/file-version.jar" };
+ String[] expectedArguments = {"-verify", "/tmp/signed/file-version.jar"};
checkMojo( expectedArguments );
}
@@ -170,22 +185,30 @@
{
mojo.failureMsg = "simulated failure";
- try {
+ try
+ {
mojo.execute();
fail( "expected failure" );
- } catch ( MojoExecutionException e ) {
+ }
+ catch ( MojoExecutionException e )
+ {
assertEquals( "command execution failed", e.getMessage() );
}
- String[] expectedArguments =
- { "-verify", "/tmp/signed/file-version.jar" };
+ String[] expectedArguments = {"-verify", "/tmp/signed/file-version.jar"};
checkMojo( expectedArguments );
}
- private void checkMojo( String[] expectedCommandLineArguments ) {
+ private void checkMojo( String[] expectedCommandLineArguments )
+ {
+ checkMojo( mojo, expectedCommandLineArguments );
+ }
+
+ static void checkMojo( MockJarSignVerifyMojo mojo, String[] expectedCommandLineArguments )
+ {
assertEquals( 1, mojo.commandLines.size() );
- Commandline commandline = (Commandline) mojo.commandLines.get(0);
+ Commandline commandline = (Commandline) mojo.commandLines.get( 0 );
String[] arguments = commandline.getArguments();
// isn't there an assertEquals for arrays?
/*
@@ -193,12 +216,12 @@
System.out.println( arguments[ i ] );
}
*/
- assertEquals( "Differing number of arguments",
- expectedCommandLineArguments.length,
- arguments.length );
- for (int i = 0; i < arguments.length; i++ ) {
- expectedCommandLineArguments[ i ] = StringUtils.replace( expectedCommandLineArguments[ i ], "/", File.separator );
- assertEquals( expectedCommandLineArguments[ i ], arguments[ i ] );
+ assertEquals( "Differing number of arguments", expectedCommandLineArguments.length, arguments.length );
+ for ( int i = 0; i < arguments.length; i++ )
+ {
+ expectedCommandLineArguments[i] =
+ StringUtils.replace( expectedCommandLineArguments[i], "/", File.separator );
+ assertEquals( expectedCommandLineArguments[i], expectedCommandLineArguments[i], arguments[i] );
}
}
}