6950237: Test java/nio/file/Path/CopyAndMove.java does not work correctly when test dir in on VFAT

Reviewed-by: alanb
This commit is contained in:
Dan Xu 2012-09-28 11:14:20 +01:00
parent 7ffcd7343f
commit f41a30cb5c
2 changed files with 25 additions and 6 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -145,6 +145,9 @@ class LinuxFileStore
} }
return xattrEnabled; return xattrEnabled;
} }
// POSIX attributes not supported on FAT
if (type == PosixFileAttributeView.class && entry().fstype().equals("vfat"))
return false;
return super.supportsFileAttributeView(type); return super.supportsFileAttributeView(type);
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -22,7 +22,7 @@
*/ */
/* @test /* @test
* @bug 4313887 6838333 6917021 7006126 * @bug 4313887 6838333 6917021 7006126 6950237
* @summary Unit test for java.nio.file.Files copy and move methods * @summary Unit test for java.nio.file.Files copy and move methods
* @library .. * @library ..
* @build CopyAndMove PassThroughFileSystem * @build CopyAndMove PassThroughFileSystem
@ -41,12 +41,14 @@ import java.util.*;
public class CopyAndMove { public class CopyAndMove {
static final Random rand = new Random(); static final Random rand = new Random();
static boolean heads() { return rand.nextBoolean(); } static boolean heads() { return rand.nextBoolean(); }
private static boolean testPosixAttributes = false;
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
Path dir1 = TestUtil.createTemporaryDirectory(); Path dir1 = TestUtil.createTemporaryDirectory();
try { try {
// Same directory // Same directory
testPosixAttributes = getFileStore(dir1).supportsFileAttributeView("posix");
testCopyFileToFile(dir1, dir1, TestUtil.supportsLinks(dir1)); testCopyFileToFile(dir1, dir1, TestUtil.supportsLinks(dir1));
testMove(dir1, dir1, TestUtil.supportsLinks(dir1)); testMove(dir1, dir1, TestUtil.supportsLinks(dir1));
@ -57,6 +59,8 @@ public class CopyAndMove {
try { try {
boolean testSymbolicLinks = boolean testSymbolicLinks =
TestUtil.supportsLinks(dir1) && TestUtil.supportsLinks(dir2); TestUtil.supportsLinks(dir1) && TestUtil.supportsLinks(dir2);
testPosixAttributes = getFileStore(dir1).supportsFileAttributeView("posix") &&
getFileStore(dir2).supportsFileAttributeView("posix");
testCopyFileToFile(dir1, dir2, testSymbolicLinks); testCopyFileToFile(dir1, dir2, testSymbolicLinks);
testMove(dir1, dir2, testSymbolicLinks); testMove(dir1, dir2, testSymbolicLinks);
} finally { } finally {
@ -65,6 +69,8 @@ public class CopyAndMove {
// Target is location associated with custom provider // Target is location associated with custom provider
Path dir3 = PassThroughFileSystem.create().getPath(dir1.toString()); Path dir3 = PassThroughFileSystem.create().getPath(dir1.toString());
testPosixAttributes = getFileStore(dir1).supportsFileAttributeView("posix") &&
getFileStore(dir3).supportsFileAttributeView("posix");
testCopyFileToFile(dir1, dir3, false); testCopyFileToFile(dir1, dir3, false);
testMove(dir1, dir3, false); testMove(dir1, dir3, false);
@ -90,7 +96,12 @@ public class CopyAndMove {
if (!attrs1.isSymbolicLink()) { if (!attrs1.isSymbolicLink()) {
long time1 = attrs1.lastModifiedTime().toMillis(); long time1 = attrs1.lastModifiedTime().toMillis();
long time2 = attrs2.lastModifiedTime().toMillis(); long time2 = attrs2.lastModifiedTime().toMillis();
assertTrue(time1 == time2);
if (time1 != time2) {
System.err.format("File time for %s is %s\n", attrs1.fileKey(), attrs1.lastModifiedTime());
System.err.format("File time for %s is %s\n", attrs2.fileKey(), attrs2.lastModifiedTime());
assertTrue(false);
}
} }
// check size // check size
@ -207,7 +218,10 @@ public class CopyAndMove {
if (source.getFileSystem().provider() == target.getFileSystem().provider()) { if (source.getFileSystem().provider() == target.getFileSystem().provider()) {
// verify POSIX attributes // verify POSIX attributes
if (posixAttributes != null && !basicAttributes.isSymbolicLink()) { if (posixAttributes != null &&
!basicAttributes.isSymbolicLink() &&
testPosixAttributes)
{
checkPosixAttributes(posixAttributes, checkPosixAttributes(posixAttributes,
readAttributes(target, PosixFileAttributes.class, NOFOLLOW_LINKS)); readAttributes(target, PosixFileAttributes.class, NOFOLLOW_LINKS));
} }
@ -636,7 +650,9 @@ public class CopyAndMove {
// check POSIX attributes are copied // check POSIX attributes are copied
String os = System.getProperty("os.name"); String os = System.getProperty("os.name");
if (os.equals("SunOS") || os.equals("Linux")) { if ((os.equals("SunOS") || os.equals("Linux")) &&
testPosixAttributes)
{
checkPosixAttributes( checkPosixAttributes(
readAttributes(source, PosixFileAttributes.class, linkOptions), readAttributes(source, PosixFileAttributes.class, linkOptions),
readAttributes(target, PosixFileAttributes.class, linkOptions)); readAttributes(target, PosixFileAttributes.class, linkOptions));