bodewig     2004/06/07 04:56:01

  Modified:    src/etc/testcases/taskdefs/optional/unix symlink.xml
               src/main/org/apache/tools/ant/taskdefs/optional/unix
                        Symlink.java
               src/testcases/org/apache/tools/ant/taskdefs/optional/unix
                        SymlinkTest.java
  Log:
  Tests for bug 25181
  
  Revision  Changes    Path
  1.2       +49 -2     ant/src/etc/testcases/taskdefs/optional/unix/symlink.xml
  
  Index: symlink.xml
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/optional/unix/symlink.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- symlink.xml       7 Nov 2002 16:52:07 -0000       1.1
  +++ symlink.xml       7 Jun 2004 11:56:01 -0000       1.2
  @@ -104,6 +104,8 @@
            Link: ${tdir}/symtest1/symtest2/link3==>
                                              ${tdir}/symtest1/symtest2/file2
            Link: ${tdir}/symtest1/dirlink==>${tdir}/symtest1/symtest3
  +         Link: ${tdir}/symtest1/dirlink2==>${tdir}/symtest1/symtest3
  +         Link: ${tdir}/symtest1/dirlink3==>${tdir}/symtest1/symtest3
            File: ${tdir}/symtest1/recorded.links
            File: ${tdir}/symtest1/symtest2/recorded.links
       Deletes:
  @@ -134,6 +136,12 @@
       <symlink resource="${tdir}/symtest1/symtest3"
                link="${tdir}/symtest1/dirlink"
                failonerror="no" />
  +    <symlink resource="${tdir}/symtest1/symtest3" 
  +             link="${tdir}/symtest1/dirlink2"
  +             failonerror="no"/>
  +    <symlink resource="${tdir}/symtest1/symtest3" 
  +             link="${tdir}/symtest1/dirlink3"
  +             failonerror="no"/>
   
       <sleep seconds="${delay}"/> <!-- make sure OS has time to catch up -->
   
  @@ -188,6 +196,11 @@
       <available file="${tdir}/symtest1/dirlink"
                  property="test.record.dirlink.created"/>
   
  +    <!-- this is redundant for this test, but used in the recreate test -->
  +
  +    <available file="${tdir}/symtest1/dirlink2" 
  +               property="test.record.dirlink2.created"/>
  +
       <!-- Test to see if the linkfiles were created -->
   
       <available file="${tdir}/symtest1/recorded.links"
  @@ -213,14 +226,26 @@
            Link: ${tdir}/symtest1/link2==>${tdir}/symtest1/symtest2/file2
            Link: ${tdir}/symtest1/symtest2/link3==>
                                              ${tdir}/symtest1/symtest2/file2
  -         Link: ${tdir}/sumtest1/dirlink==>${tdir}/symtest1/symtest3
  +         Link: ${tdir}/symtest1/dirlink==>${tdir}/symtest1/symtest3
  +         Link: ${tdir}/symtest1/dirlink3==>${tdir}/symtest1/symtest3
  +
  +    Creates
  +         Link: ${tdir}/symtest1/dirlink3==>${tdir}/symtest1/symtest2
   
       Recreates:
            Link: ${tdir}/symtest1/link1==>${tdir}/symtest1/file1
            Link: ${tdir}/symtest1/link2==>${tdir}/symtest1/symtest2/file2
            Link: ${tdir}/symtest1/symtest2/link3==>
                                              ${tdir}/symtest1/symtest2/file2
  -         Link: ${tdir}/sumtest1/dirlink==>${tdir}/symtest1/symtest3
  +         Link: ${tdir}/symtest1/dirlink==>${tdir}/symtest1/symtest3
  +
  +    Should Change:
  +         Link: ${tdir}/symtest1/dirlink3==>${tdir}/symtest1/symtest2
  +               to
  +               ${tdir}/symtest1/dirlink3==>${tdir}/symtest1/symtest3
  +
  +    Should Not Create (bug 25181):
  +         Link: ${tdir}/symtest1/symtest3/dirlink2==>${tdir}/symtest1/symtest3
     -->
   
     <target name="test-recreate" depends="test-record">
  @@ -229,6 +254,16 @@
       <symlink action="delete" link="${tdir}/symtest1/link2"/>
       <symlink action="delete" link="${tdir}/symtest1/symtest2/link3"/>
       <symlink action="delete" link="${tdir}/symtest1/dirlink"/>
  +    <!-- dirlink2 intentionally not deleted to test bug 25181 -->
  +    <symlink action="delete" link="${tdir}/symtest1/dirlink3"/>
  +
  +    <sleep seconds="${delay}"/>  <!-- make sure OS has time to catch up -->
  +
  +    <symlink resource="${tdir}/symtest1/symtest2" 
  +             link="${tdir}/symtest1/dirlink3"
  +             failonerror="no"/>
  +
  +    <sleep seconds="${delay}"/>  <!-- make sure OS has time to catch up -->
   
       <available file="${tdir}/symtest1/link1"
                  property="test.recreate.link1.not.removed"
  @@ -265,6 +300,18 @@
   
       <available file="${tdir}/symtest1/dirlink"
                  property="test.recreate.dirlink.recreated"/>
  +
  +    <!-- this should not get set -->
  +    <available file="${tdir}/symtest1/symtest3/symtest3" 
  +               property="test.recreate.dirlink2.recreated.twice"
  +               value="ERROR: dirlink2 was created a second time (bug 
25181)"/>
  +
  +    <touch file="${tdir}/symtest1/dirlink3/WhereAmI"/>
  +
  +    <sleep seconds="${delay}"/>  <!-- make sure OS has time to do the execs 
-->
  +
  +    <available file="${tdir}/symtest1/symtest3/WhereAmI" 
  +               property="test.recreate.dirlink3.was.altered"/>
     </target>
   
   
  
  
  
  1.18      +21 -3     
ant/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java
  
  Index: Symlink.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- Symlink.java      9 Mar 2004 16:48:39 -0000       1.17
  +++ Symlink.java      7 Jun 2004 11:56:01 -0000       1.18
  @@ -160,7 +160,26 @@
                   while (keys.hasMoreElements()) {
                       link = (String) keys.nextElement();
                       resource = listOfLinks.getProperty(link);
  -                    doLink(resource, link);
  +                 // handle the case where the link exists 
  +                 // and points to a directory (bug 25181)
  +                 try {
  +                     FileUtils fu = FileUtils.newFileUtils();
  +                     File test = new File(link);
  +                     File testRes = new File(resource);
  +                     if (!fu.isSymbolicLink(test.getParentFile(), 
  +                                            test.getName())) {
  +                         doLink(resource, link);
  +                     } else {
  +                         if (!test.getCanonicalPath().
  +                             equals(testRes.getCanonicalPath())) {
  +                             Symlink.deleteSymlink(link);
  +                             doLink(resource,link);
  +                         } // else the link exists, do nothing
  +                     }
  +                 } catch (IOException ioe) {
  +                     handleError("IO exception while creating "
  +                                 + "link");
  +                 }
                   }
               } else if (action.equals("record")) {
                   Vector vectOfLinks;
  @@ -735,7 +754,6 @@
                   keys = propTemp.keys();
                   propTemp.list(System.out);
                   // Write the contents to our master list of links
  -
                   // This method assumes that all links are defined in
                   // terms of absolute paths, or paths relative to the
                   // working directory
  
  
  
  1.8       +15 -13    
ant/src/testcases/org/apache/tools/ant/taskdefs/optional/unix/SymlinkTest.java
  
  Index: SymlinkTest.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/optional/unix/SymlinkTest.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SymlinkTest.java  9 Mar 2004 16:49:04 -0000       1.7
  +++ SymlinkTest.java  7 Jun 2004 11:56:01 -0000       1.8
  @@ -47,7 +47,6 @@
   
       private Project p;
       private boolean supportsSymlinks = Os.isFamily("unix");
  -    private boolean testfail = false;
   
       public SymlinkTest(String name) {
           super(name);
  @@ -62,7 +61,6 @@
   
   
       public void testSingle() {
  -        testfail = true;
           if (supportsSymlinks) {
               executeTarget("test-single");
               p = getProject();
  @@ -71,11 +69,9 @@
               assertNotNull("Failed to create link",
                             p.getProperty("test.single.link.created"));
           }
  -        testfail = false;
       }
   
       public void testDelete() {
  -        testfail = true;
           if (supportsSymlinks) {
               executeTarget("test-delete");
               p = getProject();
  @@ -86,11 +82,9 @@
                   fail(linkDeleted);
               }
           }
  -        testfail = false;
       }
   
       public void testRecord() {
  -        testfail = true;
           if (supportsSymlinks) {
               executeTarget("test-record");
               p = getProject();
  @@ -128,6 +122,9 @@
               assertNotNull("Failed to create dirlink",
                             p.getProperty("test.record.dirlink.created"));
   
  +            assertNotNull("Failed to create dirlink2",
  +                          p.getProperty("test.record.dirlink2.created"));
  +
               assertNotNull("Couldn't record links in dir1",
                             p.getProperty("test.record.dir1.recorded"));
   
  @@ -141,11 +138,9 @@
               }
   
           }
  -        testfail = false;
       }
   
       public void testRecreate() {
  -        testfail = true;
           if (supportsSymlinks) {
               executeTarget("test-recreate");
               p = getProject();
  @@ -173,14 +168,21 @@
                             p.getProperty("test.recreate.link3.recreated"));
               assertNotNull("Failed to recreate dirlink",
                             p.getProperty("test.recreate.dirlink.recreated"));
  +            
  +            String doubleRecreate = 
p.getProperty("test.recreate.dirlink2.recreated.twice");
  +
  +            if (doubleRecreate != null) {
  +                fail(doubleRecreate);
  +            }
  +
  +            assertNotNull("Failed to alter dirlink3",
  +                          
p.getProperty("test.recreate.dirlink3.was.altered"));
  +
           }
  -        testfail = false;
       }
   
       public void tearDown() {
  -        if (supportsSymlinks && !testfail) {
  -            executeTarget("teardown");
  -        }
  +        executeTarget("teardown");
       }
   
   }
  
  
  

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

Reply via email to