stevel      2005/03/23 06:09:06

  Modified:    .        build.xml WHATSNEW
               docs/manual/CoreTasks signjar.html
               src/main/org/apache/tools/ant/taskdefs SignJar.java
               src/etc/testcases/taskdefs signjar.xml
               src/testcases/org/apache/tools/ant/taskdefs SignJarTest.java
  Log:
  -tests for old and new signjar features written; working
  -signjar test patched for offline testing
  -fixed SignJar to pass the tests
  -doc updates to match tested code
  
  Revision  Changes    Path
  1.464     +0 -1      ant/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/ant/build.xml,v
  retrieving revision 1.463
  retrieving revision 1.464
  diff -u -r1.463 -r1.464
  --- build.xml 10 Mar 2005 23:20:02 -0000      1.463
  +++ build.xml 23 Mar 2005 14:09:05 -0000      1.464
  @@ -334,7 +334,6 @@
   
     <patternset id="onlinetests">
       <exclude name="**/GetTest.java" if="offline"/>
  -    <exclude name="**/SignJarTest.java" if="offline"/>
     </patternset>
   
     <patternset id="teststhatfail">
  
  
  
  1.790     +10 -0     ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/ant/WHATSNEW,v
  retrieving revision 1.789
  retrieving revision 1.790
  diff -u -r1.789 -r1.790
  --- WHATSNEW  22 Mar 2005 17:25:19 -0000      1.789
  +++ WHATSNEW  23 Mar 2005 14:09:06 -0000      1.790
  @@ -40,6 +40,10 @@
     actually crashes the JVM on our (Java1.5) systems, we don't think any
     build files which actually worked will be affected by the change.
   
  +* <signjar> used to ignore a nested fileset when a jar was also provided
  +  as an attribute, printing a warning message; now it signs files in the
  +  fileset.
  +
   
   Fixed bugs:
   -----------
  @@ -141,6 +145,12 @@
   * <sync> has a new nested element <preserveInTarget> that can be used
     to protect extra-content in the target directory.  Bugzilla Report
     21832.
  +  
  +* <signjar> now supports:
  +  -nested filesets at the same time as the jar attribute
  +  -a destDir attribute with the appropriate dependency logic, which
  +   can be used with the jar attribute or nested filesets
  +  -a mapper to permit filename remapping on signing
   
   Changes from Ant 1.6.2 to current Ant 1.6 CVS version
   =====================================================
  
  
  
  1.20      +1 -8      ant/docs/manual/CoreTasks/signjar.html
  
  Index: signjar.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/CoreTasks/signjar.html,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- signjar.html      22 Mar 2005 17:36:58 -0000      1.19
  +++ signjar.html      23 Mar 2005 14:09:06 -0000      1.20
  @@ -24,16 +24,11 @@
   <li>Out of date destination JARs are created/signed</li>
   <li>If a destination file and a source file are the same,
   and <tt>lazy</tt> is true, the JAR is only signed if it does not 
  -contain any signature.</li> 
  +contain a signature by this alias.</li>
   <li>If a destination file and a source file are the same,
   and <tt>lazy</tt> is false, the JAR is signed.</li> 
   </ul>
   
  -<p>
  -When checking signatures, the actual signatory itself is not verified. This
  -means that "lazy" checks do not work if a JAR is signed by multiple authors.
  -</p>
  -
   <h3>Parameters</h3>
   <table border="1" cellpadding="2" cellspacing="0">
     <tr>
  @@ -131,13 +126,11 @@
       <td valign="top">fileset of JAR files to sign. </td>
       <td valign="top" align="center">No</td>
     </tr>
  -<!--   
     <tr>
       <td valign="top">mapper</td>
       <td valign="top">A mapper to rename jar files during signing</td>
       <td valign="top" align="center">No, and only one can be supplied</td>
     </tr>
  - -->
    </table>
   <h3>Examples</h3>
     <blockquote><pre>
  
  
  
  1.50      +34 -10    ant/src/main/org/apache/tools/ant/taskdefs/SignJar.java
  
  Index: SignJar.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/SignJar.java,v
  retrieving revision 1.49
  retrieving revision 1.50
  diff -u -r1.49 -r1.50
  --- SignJar.java      23 Mar 2005 10:24:43 -0000      1.49
  +++ SignJar.java      23 Mar 2005 14:09:06 -0000      1.50
  @@ -59,16 +59,43 @@
       protected String alias;
   
       /**
  -     * The name of keystore file.
  +     * The url or path of keystore file.
        */
       private String keystore;
   
  +    /**
  +     * password for the store
  +     */
       protected String storepass;
  +
  +    /**
  +     * type of store,-storetype param
  +     */
       protected String storetype;
  +
  +    /**
  +     * password for the key in the store
  +     */
       protected String keypass;
  +
  +    /**
  +     * name to a signature file
  +     */
       protected String sigfile;
  +
  +    /**
  +     * name of a single jar
  +     */
       protected File signedjar;
  +
  +    /**
  +     * verbose output
  +     */
       protected boolean verbose;
  +
  +    /**
  +     * flag for
  +     */
       protected boolean internalsf;
       protected boolean sectionsonly;
       private boolean preserveLastModified;
  @@ -98,11 +125,8 @@
       /**
        * mapper for todir work
        */
  -    private Mapper mapper;
  +    private FileNameMapper mapper;
   
  -    /** error string for unit test verification: [EMAIL PROTECTED] */
  -    public static final String ERROR_SIGNEDJAR_AND_FILESET =
  -            "The signedjar attribute is not supported with filesets";
       /**
        * error string for unit test verification: [EMAIL PROTECTED]
        */
  @@ -113,7 +137,7 @@
        */
       public static final String ERROR_TOO_MANY_MAPPERS = "Too many mappers";
       /**
  -     * error string for unit test verification: [EMAIL PROTECTED]
  +     * error string for unit test verification [EMAIL PROTECTED]
        */
       public static final String ERROR_SIGNEDJAR_AND_FILESETS = "You cannot 
specify the signed JAR when using filesets";
       /**
  @@ -296,14 +320,14 @@
        * @param newMapper
        * @since Ant 1.7
        */
  -    public void addMapper(Mapper newMapper) {
  +    public void add(FileNameMapper newMapper) {
           if (mapper != null) {
               throw new BuildException(ERROR_TOO_MANY_MAPPERS);
           }
           mapper = newMapper;
       }
   
  -    public Mapper getMapper() {
  +    public FileNameMapper getMapper() {
           return mapper;
       }
   
  @@ -373,7 +397,7 @@
           //set up our mapping policy
           FileNameMapper destMapper;
           if (hasMapper) {
  -            destMapper = mapper.getImplementation();
  +            destMapper = mapper;
           } else {
               //no mapper? use the identity policy
               destMapper = new IdentityMapper();
  @@ -563,7 +587,7 @@
   
       /**
        * test for a file being signed, by looking for a signature in the 
META-INF
  -     * directory
  +     * directory with our alias.
        *
        * @param file the file to be checked
        * @return true if the file is signed
  
  
  
  1.7       +145 -34   ant/src/etc/testcases/taskdefs/signjar.xml
  
  Index: signjar.xml
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/signjar.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- signjar.xml       10 Mar 2005 23:22:16 -0000      1.6
  +++ signjar.xml       23 Mar 2005 14:09:06 -0000      1.7
  @@ -1,48 +1,86 @@
   <project name="signjartest" default="help" basedir="..">
  +
     <property name="classes.dir" value="../../../build/classes"/>
  +  <property name="sign.dir" location="signedjars" />
  +  <property name="subdir" location="${sign.dir}/subdir" />
  +  <property name="test.jar" location="${sign.dir}/signtest.jar" />
  +  <property name="subdirtest.jar" location="${subdir}/signtest.jar" />
  +  <mkdir dir="${sign.dir}" />
  +  <mkdir dir="${subdir}" />
  +  
  +  <macrodef name="assertSigned">
  +    <attribute name="jar" default="${test.jar}" />
  +    <sequential>
  +      <fail message="not signed: @{jar}" >
  +        <condition>
  +          <not><issigned file="@{jar}" /></not>
  +        </condition>
  +      </fail>
  +    </sequential>
  +  </macrodef>
  +
  +  <presetdef name="sign-base">
  +    <signjar alias="testonly" keystore="testkeystore"
  +           storepass="apacheant"/>
  +  </presetdef>
  +  
  +  <presetdef name="sign">
  +    <sign-base jar="${test.jar}" />
  +  </presetdef>
  +  
  +  <target name="jar" >
  +    <jar jarfile="${test.jar}" basedir="${classes.dir}" 
includes="**/Task.class"/>
  +  </target>  
  +
  +  
  +  
  +  <target name="clean">
  +    <delete dir="${sign.dir}"/>
  +  </target>
   
  -  <target name="basic">
  -    <jar jarfile="signtest.jar" basedir="${classes.dir}" 
includes="**/Task.class"/>
  -    <signjar jar="signtest.jar" alias="testonly" keystore="testkeystore"
  -             storepass="apacheant"/>
  +  <target name="help">
  +    <echo>This build is for use with Ant's test cases</echo>
  +  </target>
  +  
  +  <target name="basic" depends="jar">
  +    <sign />
  +    <assertSigned/>             
     </target>
   
  -  <target name="sigfile">
  -    <jar jarfile="signtest.jar" basedir="${classes.dir}" 
includes="**/Task.class"/>
  -    <signjar jar="signtest.jar" alias="testonly" keystore="testkeystore"
  -             storepass="apacheant" sigfile="TEST"/>
  +  <target name="sigfile" depends="jar">
  +    <sign sigfile="TEST"/>
  +    <assertSigned/>             
     </target>
   
  -  <target name="maxmemory">
  -    <jar jarfile="signtest.jar" basedir="${classes.dir}" 
includes="**/Task.class"/>
  -    <signjar jar="signtest.jar" alias="testonly" keystore="testkeystore"
  -             storepass="apacheant" maxmemory="128m"/>
  +  <target name="maxmemory" depends="jar">
  +    <sign maxmemory="128m"/>
  +    <assertSigned/>             
     </target>
   
  -  <target name="urlKeystoreFile">
  -    <jar jarfile="signtest.jar" basedir="${classes.dir}" 
includes="**/Task.class"/>
  -    <signjar jar="signtest.jar" alias="testonly" 
keystore="file://../testkeystore"
  -             storepass="apacheant" maxmemory="128m"/>
  +  <target name="urlKeystoreFile" depends="jar">
  +    <sign keystore="file://../testkeystore"
  +       maxmemory="128m"/>
  +    <assertSigned/>             
     </target>
   
  +  
     <!--TODO: change this when we move to SUBVERSION-->
  -  <target name="urlKeystoreHTTP">
  -    <jar jarfile="signtest.jar" basedir="${classes.dir}" 
includes="**/Task.class"/>
  -    <signjar jar="signtest.jar" alias="testonly"
  -             
keystore="http://cvs.apache.org/viewcvs.cgi/*checkout*/ant/src/etc/testcases/testkeystore?rev=HEAD";
  -             storepass="apacheant" maxmemory="128m"/>
  +  <target name="urlKeystoreHTTP" depends="jar">
  +    <sign
  +      
keystore="http://cvs.apache.org/viewcvs.cgi/*checkout*/ant/src/etc/testcases/testkeystore?rev=HEAD";
  +      />
  +    <assertSigned/>             
     </target>
   
  -  <target name="preserveLastModified">
  -    <jar jarfile="signtest.jar" basedir="${classes.dir}" 
includes="**/Task.class"/>
  -    <touch file="signtest.jar" datetime="06/28/2000 2:02 pm"/>
  -    <signjar jar="signtest.jar" alias="testonly" keystore="testkeystore" 
storepass="apacheant" 
  +  <target name="preserveLastModified" depends="jar">
  +    <touch file="${test.jar}" datetime="06/28/2000 2:02 pm"/>
  +    <sign 
        preservelastmodified="true"/>
  -
  +    <assertSigned />
       <fail message="preserveLastModified did not preserve the last modified 
time">
         <condition>
           <not>
  -          <isfileselected file="signtest.jar">
  +          <isfileselected file="${test.jar}" >
               <date datetime="06/28/2000 2:02 pm" when="equal"/>
             </isfileselected>
           </not>
  @@ -50,13 +88,86 @@
       </fail>
     </target>
   
  -  <target name="clean">
  -    <delete file="signtest.jar"/>
  +  <target name="testFileset" depends="jar">
  +    <sign-base>
  +      <fileset file="${test.jar}" />
  +    </sign-base>
  +    <assertSigned/>
  +  </target>
  +
  +  <target name="testFilesetAndJar" depends="jar">
  +    <sign-base jar="${test.jar}" lazy="true">
  +      <fileset file="${test.jar}" />
  +    </sign-base>
  +    <assertSigned/>
  +  </target>
  +  
  +  <target name="testFilesetAndSignedJar" depends="jar">
  +    <sign-base signedjar="${sign.dir}/newfile.jar">
  +      <fileset file="${test.jar}" />
  +    </sign-base>
  +  </target>
  +  
  +  <target name="testSignedJar" depends="jar">
  +    <property name="new.jar" location="${sign.dir}/newfile.jar" />
  +    <sign signedjar="${new.jar}"/>
  +    <assertSigned jar="${new.jar}"/>
  +  </target>
  +
  +  <target name="testDestDirAndSignedJar" depends="jar">
  +    <sign destDir="${subdir}" signedjar="${sign.dir}/newfile.jar"/>
  +  </target>
  +
  +  <target name="testDestDir" depends="jar">
  +    <sign destDir="${subdir}" />
  +    <assertSigned jar="${subdirtest.jar}"/>
  +  </target>
  +  
  +  <target name="testDestDirFileset" depends="jar">
  +    <sign-base destDir="${subdir}">
  +      <fileset file="${test.jar}" />
  +    </sign-base>
  +    <assertSigned jar="${subdirtest.jar}"/>
  +  </target>
  +  
  +  <target name="testMapperNoDest" depends="jar">
  +    <sign-base >
  +      <flattenmapper />
  +      <fileset file="${test.jar}" />
  +    </sign-base>
  +  </target>
  +  
  +  <target name="testMapperFileset" depends="jar">
  +    <sign-base destDir="${subdir}">
  +      <fileset file="${test.jar}" />
  +      <flattenmapper />
  +    </sign-base>
  +    <assertSigned jar="${subdirtest.jar}"/>
  +  </target>
  +
  +  <target name="testTwoMappers" depends="jar">
  +    <sign-base destDir="${subdir}">
  +      <fileset file="${test.jar}" />
  +      <flattenmapper />
  +      <flattenmapper />
  +    </sign-base>
  +  </target>
  +
  +  <target name="testNoAlias" depends="jar">
  +    <signjar keystore="testkeystore"
  +       jar="${test.jar}"
  +       storepass="apacheant"/>
  +  </target>
  +
  +  <target name="testNoFiles" >
  +    <sign-base />
  +  </target>
  +
  +  <target name="testNoStorePass" depends="jar">
  +    <signjar keystore="testkeystore"
  +       alias="testonly"
  +       jar="${test.jar}"/>
     </target>
  -
  -  <target name="help">
  -    <echo>This build is for use with Ant's test cases</echo>
  -  </target>
  -
  +  
   </project>
   
  
  
  
  1.10      +78 -2     
ant/src/testcases/org/apache/tools/ant/taskdefs/SignJarTest.java
  
  Index: SignJarTest.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/SignJarTest.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SignJarTest.java  26 Nov 2004 09:52:06 -0000      1.9
  +++ SignJarTest.java  23 Mar 2005 14:09:06 -0000      1.10
  @@ -35,6 +35,7 @@
       public static final String EXPANDED_MANIFEST
           = "src/etc/testcases/taskdefs/manifests/META-INF/MANIFEST.MF";
   
  +
       public SignJarTest(String name) {
           super(name);
       }
  @@ -47,6 +48,13 @@
           executeTarget("clean");
       }
   
  +    /**
  +     * check for being offline
  +     * @return true iff the system property "offline" is "true"
  +     */
  +    private boolean isOffline() {
  +        return Boolean.getBoolean("offline");
  +    }
       public void testBasicSigning() {
           executeTarget("basic");
       }
  @@ -64,10 +72,78 @@
       }
   
       public void testURLKeystoreHTTP() {
  -        executeTarget("urlKeystoreHTTP");
  +        if(!isOffline()) {
  +            executeTarget("urlKeystoreHTTP");
  +        }
       }
   
       public void testPreserveLastModified() {
           executeTarget("preserveLastModified");
       }
  -}
  +
  +    public void testFileset() {
  +        executeTarget("testFileset");
  +    }
  +
  +    public void testFilesetAndJar() {
  +        executeTarget("testFilesetAndJar");
  +    }
  +
  +    public void testFilesetAndSignedJar() {
  +        expectBuildExceptionContaining("testFilesetAndSignedJar",
  +                "incompatible attributes",
  +                SignJar.ERROR_SIGNEDJAR_AND_FILESETS);
  +    }
  +
  +    public void testSignedJar() {
  +        executeTarget("testSignedJar");
  +    }
  +
  +    public void testDestDir() {
  +        executeTarget("testDestDir");
  +    }
  +
  +    public void testDestDirAndSignedJar() {
  +        expectBuildExceptionContaining("testFilesetAndSignedJar",
  +                "incompatible attributes",
  +                SignJar.ERROR_SIGNEDJAR_AND_FILESETS);
  +    }
  +
  +    public void testDestDirFileset() {
  +        executeTarget("testDestDirFileset");
  +    }
  +
  +    public void testMapperFileset() {
  +        executeTarget("testMapperFileset");
  +    }
  +
  +    public void testMapperNoDest() {
  +        expectBuildExceptionContaining("testMapperNoDest",
  +                "two mappers",
  +                SignJar.ERROR_MAPPER_WITHOUT_DEST);
  +    }
  +
  +    public void testTwoMappers() {
  +        expectBuildExceptionContaining("testTwoMappers",
  +                "two mappers",
  +                SignJar.ERROR_TOO_MANY_MAPPERS);
  +    }
  +
  +    public void testNoAlias() {
  +        expectBuildExceptionContaining("testNoAlias",
  +                "no alias",
  +                SignJar.ERROR_NO_ALIAS);
  +    }
  +
  +    public void testNoFiles() {
  +        expectBuildExceptionContaining("testNoFiles",
  +                "no files",
  +                SignJar.ERROR_NO_SOURCE);
  +    }
  +
  +    public void testNoStorePass() {
  +        expectBuildExceptionContaining("testNoStorePass",
  +                "no files",
  +                SignJar.ERROR_NO_STOREPASS);
  +    }
  + }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to