def test_safety_wrapper(self): rawfs = MemoryFS() safefs = dokan.Win32SafetyFS(rawfs) rawfs.setcontents("autoRun.inf", b("evilcodeevilcode")) self.assertTrue(safefs.exists("_autoRun.inf")) self.assertTrue("autoRun.inf" not in safefs.listdir("/")) safefs.setcontents("file:stream",b("test")) self.assertFalse(rawfs.exists("file:stream")) self.assertTrue(rawfs.exists("file__colon__stream")) self.assertTrue("file:stream" in safefs.listdir("/"))
def test_safety_wrapper(self): rawfs = MemoryFS() safefs = dokan.Win32SafetyFS(rawfs) rawfs.setcontents("autoRun.inf", b("evilcodeevilcode")) self.assertTrue(safefs.exists("_autoRun.inf")) self.assertTrue("autoRun.inf" not in safefs.listdir("/")) safefs.setcontents("file:stream", "test") self.assertFalse(rawfs.exists("file:stream")) self.assertTrue(rawfs.exists("file__colon__stream")) self.assertTrue("file:stream" in safefs.listdir("/"))
def test_mountfile(self): """Test mounting a file""" quote = b"""If you wish to make an apple pie from scratch, you must first invent the universe.""" mem_fs = MemoryFS() mem_fs.makedir('foo') mem_fs.setcontents('foo/bar.txt', quote) foo_dir = mem_fs.opendir('foo') mount_fs = MountFS() mount_fs.mountfile('bar.txt', foo_dir.open, foo_dir.getinfo) self.assert_(mount_fs.isdir('/')) self.assert_(mount_fs.isdir('./')) self.assert_(mount_fs.isdir('')) # Check we can see the mounted file in the dir list self.assertEqual(mount_fs.listdir(), ["bar.txt"]) self.assert_(not mount_fs.exists('nobodyhere.txt')) self.assert_(mount_fs.exists('bar.txt')) self.assert_(mount_fs.isfile('bar.txt')) self.assert_(not mount_fs.isdir('bar.txt')) # Check open and getinfo callables self.assertEqual(mount_fs.getcontents('bar.txt'), quote) self.assertEqual(mount_fs.getsize('bar.txt'), len(quote)) # Check changes are written back mem_fs.setcontents('foo/bar.txt', 'baz') self.assertEqual(mount_fs.getcontents('bar.txt'), b'baz') self.assertEqual(mount_fs.getsize('bar.txt'), len('baz')) # Check changes are written to the original fs self.assertEqual(mem_fs.getcontents('foo/bar.txt'), b'baz') self.assertEqual(mem_fs.getsize('foo/bar.txt'), len('baz')) # Check unmount self.assert_(mount_fs.unmount("bar.txt")) self.assertEqual(mount_fs.listdir(), []) self.assert_(not mount_fs.exists('bar.txt')) # Check unount a second time is a null op, and returns False self.assertFalse(mount_fs.unmount("bar.txt"))
class TestWalk(unittest.TestCase): def setUp(self): self.fs = MemoryFS() self.fs.setcontents('a.txt', 'hello') self.fs.setcontents('b.txt', 'world') self.fs.makeopendir('foo').setcontents('c', '123') self.fs.makeopendir('.svn').setcontents('ignored', '') def test_wildcard(self): for dir_path, paths in self.fs.walk(wildcard='*.txt'): for path in paths: self.assert_(path.endswith('.txt')) for dir_path, paths in self.fs.walk(wildcard=lambda fn:fn.endswith('.txt')): for path in paths: self.assert_(path.endswith('.txt')) def test_dir_wildcard(self): for dir_path, paths in self.fs.walk(dir_wildcard=lambda fn:not fn.endswith('.svn')): for path in paths: self.assert_('.svn' not in path)
def test_priority(self): """Test priority order is working""" m1 = MemoryFS() m2 = MemoryFS() m3 = MemoryFS() m1.setcontents("name", "m1") m2.setcontents("name", "m2") m3.setcontents("name", "m3") multi_fs = MultiFS(auto_close=False) multi_fs.addfs("m1", m1) multi_fs.addfs("m2", m2) multi_fs.addfs("m3", m3) self.assert_(multi_fs.getcontents("name") == "m3") m1 = MemoryFS() m2 = MemoryFS() m3 = MemoryFS() m1.setcontents("name", "m1") m2.setcontents("name", "m2") m3.setcontents("name", "m3") multi_fs = MultiFS(auto_close=False) multi_fs.addfs("m1", m1) multi_fs.addfs("m2", m2, priority=10) multi_fs.addfs("m3", m3) self.assert_(multi_fs.getcontents("name") == "m2") m1 = MemoryFS() m2 = MemoryFS() m3 = MemoryFS() m1.setcontents("name", "m1") m2.setcontents("name", "m2") m3.setcontents("name", "m3") multi_fs = MultiFS(auto_close=False) multi_fs.addfs("m1", m1) multi_fs.addfs("m2", m2, priority=10) multi_fs.addfs("m3", m3, priority=10) self.assert_(multi_fs.getcontents("name") == "m3") m1 = MemoryFS() m2 = MemoryFS() m3 = MemoryFS() m1.setcontents("name", "m1") m2.setcontents("name", "m2") m3.setcontents("name", "m3") multi_fs = MultiFS(auto_close=False) multi_fs.addfs("m1", m1, priority=11) multi_fs.addfs("m2", m2, priority=10) multi_fs.addfs("m3", m3, priority=10) self.assert_(multi_fs.getcontents("name") == "m1")
def test_priority(self): """Test priority order is working""" m1 = MemoryFS() m2 = MemoryFS() m3 = MemoryFS() m1.setcontents("name", b("m1")) m2.setcontents("name", b("m2")) m3.setcontents("name", b("m3")) multi_fs = MultiFS(auto_close=False) multi_fs.addfs("m1", m1) multi_fs.addfs("m2", m2) multi_fs.addfs("m3", m3) self.assert_(multi_fs.getcontents("name") == b("m3")) m1 = MemoryFS() m2 = MemoryFS() m3 = MemoryFS() m1.setcontents("name", b("m1")) m2.setcontents("name", b("m2")) m3.setcontents("name", b("m3")) multi_fs = MultiFS(auto_close=False) multi_fs.addfs("m1", m1) multi_fs.addfs("m2", m2, priority=10) multi_fs.addfs("m3", m3) self.assert_(multi_fs.getcontents("name") == b("m2")) m1 = MemoryFS() m2 = MemoryFS() m3 = MemoryFS() m1.setcontents("name", b("m1")) m2.setcontents("name", b("m2")) m3.setcontents("name", b("m3")) multi_fs = MultiFS(auto_close=False) multi_fs.addfs("m1", m1) multi_fs.addfs("m2", m2, priority=10) multi_fs.addfs("m3", m3, priority=10) self.assert_(multi_fs.getcontents("name") == b("m3")) m1 = MemoryFS() m2 = MemoryFS() m3 = MemoryFS() m1.setcontents("name", b("m1")) m2.setcontents("name", b("m2")) m3.setcontents("name", b("m3")) multi_fs = MultiFS(auto_close=False) multi_fs.addfs("m1", m1, priority=11) multi_fs.addfs("m2", m2, priority=10) multi_fs.addfs("m3", m3, priority=10) self.assert_(multi_fs.getcontents("name") == b("m1"))
from fs.memoryfs import MemoryFS from fs.expose import fuse fs = MemoryFS() # create an in memory file system fs.createfile('filename.txt') # creating an empty file fs.setcontents('filename.txt', 'contents of file') # putting content into the file. from fs.osfs import OSFS home_fs = OSFS('/') # home_fs.makedir( '/home/dave/scratch/ramdrive', allow_recreate=True ) # have to make a directory for us to mount our memory file system on. mp = fuse.mount( fs, '/home/dave/scratch/ramdrive' ) # exposes fs to everything else on machine. (ie: other system calls can see these files) mp.path # in case you need the path to the files created. mp.unmount() # files are no longer being exposed via fuse home_fs.removedir('/home/dave/scratch/ramdrive/' ) #remove the real file system directory when done. fs.remove('filename.txt') home_fs.close() fs.close() # creating a ramdrive like this wont work for my desired task, as other external applications cannot write to the directory. They only have read access.