Author: bodewig
Date: Thu Sep  4 05:08:20 2008
New Revision: 691988

URL: http://svn.apache.org/viewvc?rev=691988&view=rev
Log:
Test for symlink loops

Modified:
    ant/core/trunk/src/tests/antunit/core/dirscanner-symlinks-test.xml

Modified: ant/core/trunk/src/tests/antunit/core/dirscanner-symlinks-test.xml
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/core/dirscanner-symlinks-test.xml?rev=691988&r1=691987&r2=691988&view=diff
==============================================================================
--- ant/core/trunk/src/tests/antunit/core/dirscanner-symlinks-test.xml 
(original)
+++ ant/core/trunk/src/tests/antunit/core/dirscanner-symlinks-test.xml Thu Sep  
4 05:08:20 2008
@@ -28,6 +28,17 @@
     <condition property="unix"><os family="unix"/></condition>
   </target>
 
+  <macrodef name="assertDirIsEmpty">
+    <attribute name="dir" default="${output}"/>
+    <sequential>
+      <local name="resources"/>
+      <resourcecount property="resources">
+        <fileset dir="@{dir}"/>
+      </resourcecount>
+      <au:assertEquals expected="0" actual="${resources}"/>
+    </sequential>
+  </macrodef>
+
   <target name="testSymlinkToSiblingFollow"
           depends="checkOs, setUp, -sibling"
           if="unix">
@@ -64,6 +75,82 @@
     <au:assertFileDoesntExist file="${output}/file.txt"/>
   </target>
 
+  <target name="INFINITEtestLinkToParentFollow"
+          depends="checkOs, setUp, -link-to-parent"
+          if="unix">
+    <copy todir="${output}">
+      <fileset dir="${base}" followsymlinks="true"/>
+    </copy>
+    <exec executable="rm">
+      <arg file="${base}/A"/>
+    </exec>
+    <au:assertFileExists file="${output}/A/B/file.txt"/>
+  </target>
+
+  <target name="testLinkToParentFollowWithInclude"
+          depends="checkOs, setUp, -link-to-parent"
+          if="unix">
+    <copy todir="${output}">
+      <fileset dir="${base}" followsymlinks="true">
+        <include name="A/B/*"/>
+      </fileset>
+    </copy>
+    <exec executable="rm">
+      <arg file="${base}/A"/>
+    </exec>
+    <au:assertFileExists file="${output}/A/B/file.txt"/>
+  </target>
+
+  <target name="Supposed to fail? testLinkToParentFollowWithIncludeMultiFollow"
+          depends="checkOs, setUp, -link-to-parent"
+          if="unix">
+    <copy todir="${output}">
+      <fileset dir="${base}" followsymlinks="true">
+        <include name="A/B/B/B/*"/>
+      </fileset>
+    </copy>
+    <exec executable="rm">
+      <arg file="${base}/A"/>
+    </exec>
+    <au:assertFileExists file="${output}/A/B/B/B/file.txt"/>
+  </target>
+
+  <target name="testLinkToParentNoFollow"
+          depends="checkOs, setUp, -link-to-parent"
+          if="unix">
+    <copy todir="${output}">
+      <fileset dir="${base}" followsymlinks="false"/>
+    </copy>
+    <exec executable="rm">
+      <arg file="${base}/A"/>
+    </exec>
+    <au:assertFileDoesntExist file="${output}/A/B/file.txt"/>
+  </target>
+
+  <target name="INFINITE testSillyLoopFollow"
+          depends="checkOs, setUp, -silly-loop"
+          if="unix">
+    <copy todir="${output}">
+      <fileset dir="${base}" followsymlinks="true"/>
+    </copy>
+    <exec executable="rm">
+      <arg file="${base}"/>
+    </exec>
+    <assertDirIsEmpty/>
+  </target>
+
+  <target name="testSillyLoopNoFollow"
+          depends="checkOs, setUp, -silly-loop"
+          if="unix">
+    <copy todir="${output}">
+      <fileset dir="${base}" followsymlinks="false"/>
+    </copy>
+    <exec executable="rm">
+      <arg file="${base}"/>
+    </exec>
+    <assertDirIsEmpty/>
+  </target>
+
   <target name="-sibling" if="unix">
     <mkdir dir="${base}/A"/>
     <touch file="${base}/A/file.txt"/>
@@ -76,4 +163,15 @@
     <touch file="${input}/realdir/file.txt"/>
     <symlink link="${base}" resource="${input}/realdir"/>
   </target>    
+
+  <target name="-link-to-parent" if="unix">
+    <mkdir dir="${input}/B"/>
+    <touch file="${input}/B/file.txt"/>
+    <symlink link="${base}/A" resource="${input}"/>
+  </target>
+
+  <target name="-silly-loop" if="unix">
+    <delete dir="${base}"/>
+    <symlink link="${base}" resource="${input}"/>
+  </target>
 </project>


Reply via email to