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>