On 9/18/06, Richard Liang <[EMAIL PROTECTED]> wrote:
Hello,
One Apache Derby test[1] fails on Harmony. It seems that RI always
sync the FileOutputStream and FileChannel after each "write", which is
different from Harmony. But there is no explicit description in Java
Spec. Shall we follow RI? Thanks a lot.
The following test cases could demonstrate this issue.
public void testFile() {
File derbyLog = new File("d:\\", "derby1.log");
try {
FileOutputStream fos = new FileOutputStream(derbyLog);
fos.write(0x41);
assertEquals(1, derbyLog.length());
} catch (Exception e) {
e.printStackTrace();
}
}
public void testFileChannel() {
File derbyLog = new File("d:\\", "derby2.log");
try {
FileOutputStream fos = new FileOutputStream(derbyLog);
FileChannel fc = fos.getChannel();
fc.write(ByteBuffer.wrap(new byte[]{0x41, 0x42}));
assertEquals(2, derbyLog.length());
} catch (Exception e) {
e.printStackTrace();
}
}
Richard, we're fooled by "derbyLog.length()". :-) That's the root of evil!
Harmony uses "FindFirstFile" to get file attribute, which may not be latest
information of file. MSND points out "In rare cases, file attribute
information on NTFS file systems may not be current at the time you call
this function." That's why the test failed against Harmony. If using
"GetFileAttributeEx" instead, the test passes against Harmony. :-) But I
don't think the test is theoretically stable, since the file is not opened
with "sync" flag. :-) We could use RandomAccessFile("file","rwd(s)") for
test. Let's file a JIRA and fix it!
[1]
http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/logStream.java?view=co
--
Richard Liang
China Development Lab, IBM
---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
Andrew Zhang
China Software Development Lab, IBM