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]