aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/autodep/tests/test_fusefs.py')
-rw-r--r--src/autodep/tests/test_fusefs.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/autodep/tests/test_fusefs.py b/src/autodep/tests/test_fusefs.py
new file mode 100644
index 0000000..71e2a85
--- /dev/null
+++ b/src/autodep/tests/test_fusefs.py
@@ -0,0 +1,91 @@
+import unittest
+import logfs.fstracer
+import os
+import sys
+
+class null_writer:
+ def __init__(self):
+ pass
+ def write(self,string):
+ pass
+
+
+def simple_getfsevents(prog,args,approach="fusefs"):
+ ret=[]
+ null_out=null_writer()
+ nullfile=open("/dev/null")
+ nullfd=nullfile.fileno()
+ outfd=os.dup(sys.stdout.fileno())
+ errfd=os.dup(sys.stderr.fileno())
+ os.dup2(nullfd,sys.stdout.fileno())
+ os.dup2(nullfd,sys.stderr.fileno())
+
+ events = logfs.fstracer.getfsevents(prog,args,approach)
+ os.dup2(outfd,sys.stdout.fileno())
+ os.dup2(errfd,sys.stderr.fileno())
+
+ #print events
+ for stage in events:
+ for filename in events[stage][0]:
+ ret.append([filename,'success'])
+ for filename in events[stage][1]:
+ ret.append([filename,'fail'])
+
+ return ret
+
+
+
+class fusefs_simple_tests(unittest.TestCase):
+ def test_open_unexists(self):
+ eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/f1','/f2'])
+ self.assertTrue(eventslist.count(['/f1',"fail"])==1)
+ self.assertTrue(eventslist.count(['/f2',"fail"])==1)
+
+ def test_open_exists(self):
+ eventslist=simple_getfsevents('/bin/cat', ['/bin/cat','/etc/passwd'])
+ self.assertTrue(eventslist.count(['/etc/passwd','success'])>=1)
+
+ def test_open_many(self):
+ filesnum=200
+ eventslist=simple_getfsevents('/bin/cat',['/bin/cat']+
+ map(lambda x: '/file'+str(x),range(0,filesnum)))
+ for f in map(lambda x: ['/file'+str(x),'fail'],range(0,filesnum)):
+ self.assertTrue(f in eventslist)
+
+ def test_parralel(self):
+ filesnum=400
+ procnum=8
+
+ # create command
+ command=""
+ for p in xrange(0,procnum):
+ command+="/bin/cat "
+ for f in xrange(0,filesnum):
+ command+="/file_%d_%d " % (p,f)
+ command+="& "
+ command+=" 2>/dev/null"
+ #command+=" "+"A"*65536
+
+ resultarray=simple_getfsevents('/bin/sh', ['/bin/sh','-c',command])
+
+ for p in xrange(0,procnum):
+ for f in xrange(0,filesnum):
+ self.assertTrue(resultarray.count(['/file_%d_%d' % (p,f),"fail"])==1)
+
+ def test_open_very_many(self):
+ resultarray=simple_getfsevents('/bin/sh', ['/bin/sh','-c',
+ "for i in `seq 1 1000`; do cat /testmany$i;done 2> /dev/null"])
+ #print resultarray
+ for i in range(1,1000):
+ self.assertTrue(resultarray.count(['/testmany'+str(i),'fail'])==1)
+
+ def test_exec(self):
+ eventslist=simple_getfsevents('tests/helpers/exec', ['test/helpers/exec'])
+ for i in range(1,14):
+ self.assertTrue(eventslist.count(['/f'+str(i),"fail"])==1)
+
+#if __name__ == '__main__':
+ #unittest.main()
+ #suite = unittest.TestLoader().loadTestsFromTestCase(fusefs_simple_tests)
+# suite = unittest.TestLoader().loadTestsFromTestCase(hooklib_simple_tests)
+# unittest.TextTestRunner(verbosity=2).run(suite) \ No newline at end of file