Lines 50-55
Link Here
|
50 |
import java.beans.*; |
50 |
import java.beans.*; |
51 |
import java.io.File; |
51 |
import java.io.File; |
52 |
import java.io.IOException; |
52 |
import java.io.IOException; |
|
|
53 |
import java.nio.file.Files; |
53 |
import java.util.ArrayList; |
54 |
import java.util.ArrayList; |
54 |
import java.util.Arrays; |
55 |
import java.util.Arrays; |
55 |
import java.util.logging.Handler; |
56 |
import java.util.logging.Handler; |
Lines 79-84
Link Here
|
79 |
|
80 |
|
80 |
@Override |
81 |
@Override |
81 |
protected void setUp () throws Exception { |
82 |
protected void setUp () throws Exception { |
|
|
83 |
clearSymlinks(getWorkDir()); |
82 |
clearWorkDir (); |
84 |
clearWorkDir (); |
83 |
} |
85 |
} |
84 |
|
86 |
|
Lines 912-915
Link Here
|
912 |
log.removeHandler(handler); |
914 |
log.removeHandler(handler); |
913 |
} |
915 |
} |
914 |
} |
916 |
} |
|
|
917 |
|
918 |
/** |
919 |
* Test that copy operations skips recursive symbolic links. See bug 225991. |
920 |
* |
921 |
* Use this directory tree for testing. |
922 |
* <pre> |
923 |
* - source |
924 |
* - a |
925 |
* - b (symbolic link to a) |
926 |
* - c |
927 |
* - data.txt |
928 |
* - target |
929 |
* </pre> |
930 |
* @throws java.io.IOException |
931 |
*/ |
932 |
public void testCopySkipsRecursiveSymlinks() throws IOException { |
933 |
File dir = getWorkDir(); |
934 |
FileObject dirFO = FileUtil.toFileObject(dir); |
935 |
File source, target, a, b = null, c, dataTxt; |
936 |
try { |
937 |
source = new File(dir, "source"); |
938 |
a = new File(source, "a"); |
939 |
b = new File(a, "b"); |
940 |
c = new File(source, "c"); |
941 |
dataTxt = new File(c, "data.txt"); |
942 |
target = new File(dir, "target"); |
943 |
a.mkdirs(); |
944 |
c.mkdir(); |
945 |
target.mkdir(); |
946 |
dataTxt.createNewFile(); |
947 |
try { |
948 |
Files.createSymbolicLink(b.toPath(), a.toPath()); |
949 |
} catch (IOException e) { |
950 |
System.out.println("Skipping test " + getName() |
951 |
+ ", symlinks are not supported."); |
952 |
return; |
953 |
} |
954 |
dirFO.refresh(); |
955 |
DataObject sourceDOB = DataObject.find(dirFO.getFileObject("source")); |
956 |
DataObject targetDOB = DataObject.find(dirFO.getFileObject("target")); |
957 |
sourceDOB.copy((DataFolder) targetDOB); |
958 |
assertNotNull(dirFO.getFileObject("target/source/a")); |
959 |
assertNotNull(dirFO.getFileObject("target/source/c/data.txt")); |
960 |
assertNull(dirFO.getFileObject("target/source/a/b")); |
961 |
} finally { |
962 |
if (b != null) { |
963 |
b.delete(); |
964 |
} |
965 |
} |
966 |
} |
967 |
|
968 |
/** |
969 |
* Recursively delete all symbolic links in a directory. It's safer to call |
970 |
* this method before {@link #clearWorkDir()} if there is risk that some |
971 |
* tests can leave (recursive) symbolic links in workdir. |
972 |
*/ |
973 |
private void clearSymlinks(File root) { |
974 |
for (File f : root.listFiles()) { |
975 |
if (Files.isSymbolicLink(f.toPath())) { |
976 |
f.delete(); |
977 |
} else if (f.isDirectory()) { |
978 |
clearSymlinks(f); |
979 |
} |
980 |
} |
981 |
} |
915 |
} |
982 |
} |