commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bernd Eckenfels" <e...@zusammenkunft.net>
Subject [VFS] Rename write-open file?
Date Sun, 11 Aug 2013 02:59:33 GMT
Hello,

I am currently implementing a database Blob provider, and while writing  
some unit tests I noticed that VFS is not catching the case that a file is  
(still) open. It will happily call doRename(). Afterwards both source and  
target file objects are isContentOpen==false.

Is this the intended behaviour? For some providers a opened file might not  
exist and they will fail (ram provider). Currently the DB Blob behaves the  
same.

This is my unit test for the ram provider and the failure to rename (the  
not existing object):

     @Test
     public void testRenameOpen() throws IOException
     {
         final long now = System.currentTimeMillis();

         final FileObject testFile = manager.resolveFile("ram:/fo5-old",  
smallSizedFso);
         final FileObject targetFile = manager.resolveFile("ram:/fo5-new",  
smallSizedFso);
         assertEquals(false, testFile.exists());
         assertEquals(FileType.IMAGINARY, testFile.getType());

         OutputStream os = testFile.getContent().getOutputStream();
         assertEquals(false, testFile.exists());
         os.write(255);
         //not closed -> not exist
         assertEquals(false, testFile.exists());
         assertEquals(true,  testFile.isContentOpen());

         try{
         testFile.moveTo(targetFile); // Throws:
         } catch (FileSystemException ignored) { }

         assertEquals(false,  testFile.isContentOpen()); // if fails -> true
         assertEquals(false,  targetFile.isContentOpen());
     }

If I dont catch it, this stacktrace is visible:

org.apache.commons.vfs2.FileSystemException: Could not rename  
"ram:///fo5-old" to "ram:///fo5-new".
	at  
org.apache.commons.vfs2.provider.AbstractFileObject.moveTo(AbstractFileObject.java:1353)
	at  
org.apache.commons.vfs2.provider.ram.test.CustomRamProviderTest.testRenameOpen(CustomRamProviderTest.java:289)
...
	at  
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.apache.commons.vfs2.FileSystemException: Unknown message  
with code "File does not exist: ram:///fo5-old".
	at  
org.apache.commons.vfs2.provider.ram.RamFileSystem.rename(RamFileSystem.java:195)
	at  
org.apache.commons.vfs2.provider.ram.RamFileObject.doRename(RamFileObject.java:188)
	at  
org.apache.commons.vfs2.provider.AbstractFileObject.moveTo(AbstractFileObject.java:1339)
	... 26 more

-- 
http://bernd.eckenfels.net

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message