summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjvoisin2011-12-11 17:12:23 +0100
committerjvoisin2011-12-11 17:12:23 +0100
commit1bb8abef14af4690385aeb1185a52d5456ec11d8 (patch)
tree508f59b22b274178760b14e9d0c7f0c38938f8c5
parent52fef0b1682057f6c34ecf373bdf545e3e3c0217 (diff)
Handle files with stupid rights
Now, files that are not readable, or writatble, or non-existent are correctly handled.
-rwxr-xr-xmat-cli4
-rw-r--r--mat/mat.py16
-rw-r--r--test/clitest.py21
-rw-r--r--test/libtest.py13
4 files changed, 50 insertions, 4 deletions
diff --git a/mat-cli b/mat-cli
index 00c5c11..253ea96 100755
--- a/mat-cli
+++ b/mat-cli
@@ -152,8 +152,10 @@ def main():
152 for filename in filenames: 152 for filename in filenames:
153 class_file = mat.create_class_file(filename, args.backup, 153 class_file = mat.create_class_file(filename, args.backup,
154 args.add2archive) 154 args.add2archive)
155 if class_file is not None: 155 if class_file is not False:
156 func(class_file, filename, args.force) 156 func(class_file, filename, args.force)
157 else:
158 print('Unable to process %s' % filename)
157 159
158if __name__ == '__main__': 160if __name__ == '__main__':
159 main() 161 main()
diff --git a/mat/mat.py b/mat/mat.py
index dfd4c12..0c3f050 100644
--- a/mat/mat.py
+++ b/mat/mat.py
@@ -108,7 +108,17 @@ def create_class_file(name, backup, add2archive):
108 if not os.path.isfile(name): 108 if not os.path.isfile(name):
109 # check if the file exists 109 # check if the file exists
110 logging.error('%s is not a valid file' % name) 110 logging.error('%s is not a valid file' % name)
111 return 111 return False
112
113 if not os.access(name, os.R_OK):
114 #check read permissions
115 logging.error('%s is is not readable' % name)
116 return False
117
118 if not os.access(name, os.W_OK):
119 #check write permission
120 logging.error('%s is not writtable' % name)
121 return False
112 122
113 filename = '' 123 filename = ''
114 try: 124 try:
@@ -119,7 +129,7 @@ def create_class_file(name, backup, add2archive):
119 parser = hachoir_parser.createParser(filename) 129 parser = hachoir_parser.createParser(filename)
120 if not parser: 130 if not parser:
121 logging.info('Unable to parse %s' % filename) 131 logging.info('Unable to parse %s' % filename)
122 return 132 return False
123 133
124 mime = parser.mime_type 134 mime = parser.mime_type
125 135
@@ -135,6 +145,6 @@ def create_class_file(name, backup, add2archive):
135 stripper_class = strippers.STRIPPERS[mime] 145 stripper_class = strippers.STRIPPERS[mime]
136 except KeyError: 146 except KeyError:
137 logging.info('Don\'t have stripper for %s format' % mime) 147 logging.info('Don\'t have stripper for %s format' % mime)
138 return 148 return False
139 149
140 return stripper_class(filename, parser, mime, backup, add2archive) 150 return stripper_class(filename, parser, mime, backup, add2archive)
diff --git a/test/clitest.py b/test/clitest.py
index cb615ce..db54843 100644
--- a/test/clitest.py
+++ b/test/clitest.py
@@ -72,6 +72,27 @@ class TestisCleancli(test.MATTest):
72 stdout, _ = proc.communicate() 72 stdout, _ = proc.communicate()
73 self.assertEqual(stdout.strip('\n'), '[+] %s is not clean' % dirty) 73 self.assertEqual(stdout.strip('\n'), '[+] %s is not clean' % dirty)
74 74
75class TestFileAttributes(unittest.TestCase):
76 '''
77 test various stuffs about files (readable, writable, exist, ...)
78 '''
79 def test_not_readable(self):
80 proc = subprocess.Popen(['../mat-cli', 'not_readable'],
81 stdout=subprocess.PIPE)
82 stdout, _ = proc.communicate()
83 self.assertEqual(stdout.strip('\n'), 'Unable to pocess %s' % 'not_readable')
84
85 def test_not_writtable(self):
86 proc = subprocess.Popen(['../mat-cli', 'not_writtable'],
87 stdout=subprocess.PIPE)
88 stdout, _ = proc.communicate()
89 self.assertEqual(stdout.strip('\n'), 'Unable to pocess %s' % 'not_writtable')
90
91 def test_not_exist(self):
92 proc = subprocess.Popen(['../mat-cli', 'ilikecookies'],
93 stdout=subprocess.PIPE)
94 stdout, _ = proc.communicate()
95 self.assertEqual(stdout.strip('\n'), 'Unable to pocess %s' % 'ilikecookies')
75 96
76if __name__ == '__main__': 97if __name__ == '__main__':
77 suite = unittest.TestSuite() 98 suite = unittest.TestSuite()
diff --git a/test/libtest.py b/test/libtest.py
index ecbc03e..0df584f 100644
--- a/test/libtest.py
+++ b/test/libtest.py
@@ -64,11 +64,24 @@ class TestisCleanlib(test.MATTest):
64 current_file = mat.create_class_file(clean, False, True) 64 current_file = mat.create_class_file(clean, False, True)
65 self.assertTrue(current_file.is_clean()) 65 self.assertTrue(current_file.is_clean())
66 66
67class TestFileAttributes(unittest.TestCase):
68 '''
69 test various stuffs about files (readable, writable, exist, ...)
70 '''
71 def test_not_readable(self):
72 self.assertFalse(mat.create_class_file('not_readable', False, True))
73
74 def test_not_writtable(self):
75 self.assertFalse(mat.create_class_file('not_writtable', False, True))
76
77 def test_not_exist(self):
78 self.assertFalse(mat.create_class_file('ilikecookies', False, True))
67 79
68if __name__ == '__main__': 80if __name__ == '__main__':
69 Suite = unittest.TestSuite() 81 Suite = unittest.TestSuite()
70 Suite.addTest(unittest.makeSuite(TestRemovelib)) 82 Suite.addTest(unittest.makeSuite(TestRemovelib))
71 Suite.addTest(unittest.makeSuite(TestListlib)) 83 Suite.addTest(unittest.makeSuite(TestListlib))
72 Suite.addTest(unittest.makeSuite(TestisCleanlib)) 84 Suite.addTest(unittest.makeSuite(TestisCleanlib))
85 Suite.addTest(unittest.makeSuite(TestFileAttributes))
73 unittest.TextTestRunner(verbosity=test.VERBOSITY).run(Suite) 86 unittest.TextTestRunner(verbosity=test.VERBOSITY).run(Suite)
74 87