package org.codehaus.mojo.webstart; /* * Copyright 2001-2007 The Apache Software Foundation. * * 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. */ import java.io.File; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.DefaultArtifact; import org.apache.maven.artifact.handler.DefaultArtifactHandler; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.versioning.VersionRange; import org.apache.maven.embedder.MavenEmbedder; import org.apache.maven.embedder.MavenEmbedderConsoleLogger; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.jar.JarSignMojo; import org.apache.maven.plugin.jar.JarSignVerifyMojo; import org.codehaus.mojo.keytool.GenkeyMojo; import org.codehaus.plexus.PlexusTestCase; import org.codehaus.plexus.archiver.manager.ArchiverManager; import org.codehaus.plexus.util.FileUtils; /** * This is more an integration test as we exercise both the signing and unsigning operations * on existing jars * * @author Jerome Lacoste <jerome@coffeebreaks.org> * @version $Id$ */ public class JarUnsignMojoTest extends PlexusTestCase { private JarUnsignMojo mojo; private File tempdir; private JarSignMojoConfig sign; private MavenEmbedder embedder; public void setUp() throws Exception { super.setUp(); embedder = new MavenEmbedder(); embedder.setClassLoader( Thread.currentThread().getContextClassLoader() ); embedder.setLogger( new MavenEmbedderConsoleLogger() ); embedder.start(); tempdir = new File( System.getProperty( "java.io.tmpdir" ) ); File unsignTempDir = new File( tempdir, "unsign" ); FileUtils.deleteDirectory( unsignTempDir ); mojo = new JarUnsignMojo(); mojo.setTempDir( unsignTempDir ); mojo.setVerbose( false ); ArchiverManager archiverManager = (ArchiverManager) lookup( ArchiverManager.ROLE ); mojo.setArchiverManager( archiverManager ); File keystore = new File( tempdir, "keystore" ); keystore.delete(); sign = new JarSignMojoConfig(); sign.setAlias( "test" ); sign.setKeypass( "123456" ); sign.setKeystore( keystore.getAbsolutePath() ); sign.setStorepass( "123456" ); sign.setVerify( false ); sign.setDnameCn( "CN" ); sign.setDnameOu( "OU" ); sign.setDnameL( "L" ); sign.setDnameSt( "ST" ); sign.setDnameO( "O" ); sign.setDnameC( "C" ); genKeyStore(); } public void tearDown() throws Exception { mojo = null; super.tearDown(); } /** */ public void testAddThenRemoveSignatureCheckUsingJarSignVerifyMojo() throws Exception { File unsignedJar = getUnsignedJarFile(); ensureJarSignedOrNot( unsignedJar, false, "initial jar must be unsigned" ); FileUtils.copyFileToDirectory( unsignedJar, tempdir ); File copiedJar = new File( tempdir, unsignedJar.getName() ); signJar( copiedJar ); ensureJarSignedOrNot( copiedJar, true, "now jar has been successfully signed" ); mojo.setJarPath( copiedJar ); mojo.execute(); ensureJarSignedOrNot( copiedJar, false, "Now jar must be unsigned" ); } private File getUnsignedJarFile() throws Exception { ArtifactRepository localRepository = embedder.getLocalRepository(); Artifact junit = new DefaultArtifact( "junit", "junit", VersionRange.createFromVersion( "3.8.1" ), "test", "jar", "", new DefaultArtifactHandler( "" ) ); return new File( localRepository.getBasedir() + "/" + localRepository.pathOf( junit ) + ".jar" ); } private void genKeyStore() throws MojoExecutionException { GenkeyMojo genKeystore = new GenkeyMojo(); genKeystore.setAlias( sign.getAlias() ); genKeystore.setDname( sign.getDname() ); genKeystore.setKeyalg( sign.getKeyalg() ); genKeystore.setKeypass( sign.getKeypass() ); genKeystore.setKeysize( sign.getKeysize() ); genKeystore.setKeystore( sign.getKeystore() ); genKeystore.setSigalg( sign.getSigalg() ); genKeystore.setStorepass( sign.getStorepass() ); genKeystore.setStoretype( sign.getStoretype() ); genKeystore.setValidity( sign.getValidity() ); genKeystore.setVerbose( false ); genKeystore.setWorkingDir( tempdir ); genKeystore.execute(); } private void signJar( File jarToSign ) throws MojoExecutionException { JarSignMojo signJar = new JarSignMojo(); signJar.setAlias( sign.getAlias() ); signJar.setBasedir( tempdir ); signJar.setKeypass( sign.getKeypass() ); signJar.setKeystore( sign.getKeystore() ); // signJar.setLog( getLog() ); signJar.setSigFile( sign.getSigfile() ); signJar.setStorepass( sign.getStorepass() ); signJar.setType( sign.getStoretype() ); signJar.setVerbose( false ); signJar.setWorkingDir( tempdir ); signJar.setVerify( sign.getVerify() ); signJar.setJarPath( jarToSign ); signJar.setSignedJar( null ); signJar.execute(); } private void ensureJarSignedOrNot( File jarFile, boolean signed, String msg ) throws MojoExecutionException { JarSignVerifyMojo verifyMojo = new JarSignVerifyMojo(); assertTrue( "jar file exists", jarFile.exists() ); verifyMojo.setWorkingDir( tempdir ); verifyMojo.setBasedir( tempdir ); verifyMojo.setJarPath( jarFile ); verifyMojo.setVerbose( false ); verifyMojo.setErrorWhenNotSigned( false ); verifyMojo.execute(); assertEquals( msg, signed, verifyMojo.isSigned() ); } }