def test_detectos(self): """Test detectos function""" # Tests are in the format (required_ver, mock, expected_return) tests = (('5.1', '5.1', True), ('5.1', '6.0', False), ('6.0', '5.1', False), # 5.1 is the maximum version ('|5.1', '5.1', True), ('|5.1', '6.0', False), ('|5.1', '10.0', False), # 10.0 is the maximum version ('|10.0', '5.1', True), ('|10.0', '10.0', True), ('|10.0', '10.1', False), # 6.1 is the minimum version ('6.1|', '5.1', False), ('6.1|', '6.0', False), ('6.1|', '6.1', True), ('6.1|', '6.2', True), ('6.1|', '10.0', True), ('6.2|', '5.1', False), ('6.2|', '6.0', False), ('6.2|', '6.1', False), ('6.2|', '6.2', True), # 10.0 is the minimum ('10.0|', '5.1', False), ('10.0|', '10.0', True)) for (s, mock, expected_return) in tests: mock = parse_windows_build(mock) actual_return = detectos(s, mock) self.assertEqual(expected_return, actual_return, 'detectos(%s, %s)==%s instead of %s' % (s, mock, actual_return, expected_return))
def test_detectos(self): """Test detectos function""" # Tests are in the format (required_ver, mock, expected_return) tests = (('5.1', '5.1', True), ('5.1', '6.0', False), ('6.0', '5.1', False), # 5.1 is the maximum version ('|5.1', '5.1', True), ('|5.1', '6.0', False), ('|5.1', '10.0', False), # 10.0 is the maximum version ('|10.0', '5.1', True), ('|10.0', '10.0', True), ('|10.0', '10.1', False), # 6.1 is the minimum version ('6.1|', '5.1', False), ('6.1|', '6.0', False), ('6.1|', '6.1', True), ('6.1|', '6.2', True), ('6.1|', '10.0', True), ('6.2|', '5.1', False), ('6.2|', '6.0', False), ('6.2|', '6.1', False), ('6.2|', '6.2', True), # 10.0 is the minimum ('10.0|', '5.1', False), ('10.0|', '10.0', True)) for (s, mock, expected_return) in tests: mock = parse_windows_build(mock) actual_return = detectos(s, mock) self.assertEqual(expected_return, actual_return, 'detectos(%s, %s)==%s instead of %s' % (s, mock, actual_return, expected_return))
def delete_helper(self, shred): """Called by test_delete() with shred = False and = True""" # test deleting with various kinds of filenames hebrew = u"עִבְרִית" katanana = u"アメリカ" umlauts = u"ÄäǞǟËëḦḧÏïḮḯÖöȪȫṎṏT̈ẗÜüǕǖǗǘǙǚǛǜṲṳṺṻẄẅẌẍŸÿ" tests = ['.prefixandsuffix', # simple "x".zfill(150), # long ' begins_with_space', "''", # quotation mark "~`!@#$%^&()-_+=x", # non-alphanumeric characters "[]{};'.,x", # non-alphanumeric characters u'abcdefgh', # simple Unicode u'J\xf8rgen Scandinavian', u'\u2014em-dash', # LP#1454030 hebrew, katanana, umlauts, 'sigil-should$not-change'] if 'posix' == os.name: # Windows doesn't allow these characters but Unix systems do tests += ['"*', '\t\\', ':?<>|', ' ', '.file.'] # Windows filenames cannot end with space or period for test in tests: # create the file filename = self.write_file(test, "top secret") # delete the file delete(filename, shred) self.assertNotExists(filename) # delete an empty directory dirname = self.mkdtemp(prefix=test) self.assertExists(dirname) delete(dirname, shred) self.assertNotExists(dirname) def symlink_helper(link_fn): if 'nt' == os.name: from win32com.shell import shell if not shell.IsUserAnAdmin(): self.skipTest('skipping symlink test because of insufficient privileges') # make regular file srcname = self.mkstemp(prefix='bleachbit-test-delete-regular') # make symlink self.assertExists(srcname) linkname = tempfile.mktemp('bblink') self.assertNotExists(linkname) link_fn(srcname, linkname) self.assertExists(linkname) self.assertLExists(linkname) # delete symlink delete(linkname, shred) self.assertExists(srcname) self.assertNotLExists(linkname) # delete regular file delete(srcname, shred) self.assertNotExists(srcname) # # test broken symlink # srcname = self.mkstemp(prefix='bleachbit-test-delete-sym') self.assertLExists(srcname) link_fn(srcname, linkname) self.assertLExists(linkname) self.assertExists(linkname) # delete regular file first delete(srcname, shred) self.assertNotExists(srcname) self.assertLExists(linkname) # clean up delete(linkname, shred) self.assertNotExists(linkname) self.assertNotLExists(linkname) windows_vista_or_newer = False if 'nt' == os.name: from bleachbit.Windows import parse_windows_build # Windows Vista = 6.0 windows_vista_or_newer = parse_windows_build() >= 6.0 if windows_vista_or_newer: logger.debug('testing symbolic link') import ctypes kern = ctypes.windll.LoadLibrary("kernel32.dll") def win_symlink(src, linkname): rc = kern.CreateSymbolicLinkA(linkname, src, 0) if rc == 0: print('CreateSymbolicLinkA(%s, %s)' % (linkname, src)) print('CreateSymolicLinkA() failed, error = %s' % ctypes.FormatError()) self.assertNotEqual(rc, 0) symlink_helper(win_symlink) # below this point, only posix if 'nt' == os.name: return # test file with mode 0444/-r--r--r-- filename = self.write_file('bleachbit-test-0444') os.chmod(filename, 0o444) delete(filename, shred) self.assertNotExists(filename) # test symlink symlink_helper(os.symlink) # test FIFO args = ["mkfifo", filename] ret = subprocess.call(args) self.assertEqual(ret, 0) self.assertExists(filename) delete(filename, shred) self.assertNotExists(filename) # test directory path = self.mkdtemp(prefix='bleachbit-test-delete-dir') self.assertExists(path) delete(path, shred) self.assertNotExists(path)
def delete_helper(self, shred): """Called by test_delete() with shred = False and = True""" # test deleting with various kinds of filenames hebrew = "עִבְרִית" katanana = "アメリカ" umlauts = "ÄäǞǟËëḦḧÏïḮḯÖöȪȫṎṏT̈ẗÜüǕǖǗǘǙǚǛǜṲṳṺṻẄẅẌẍŸÿ" tests = [ '.prefixandsuffix', # simple "x".zfill(150), # long ' begins_with_space', "''", # quotation mark "~`!@#$%^&()-_+=x", # non-alphanumeric characters "[]{};'.,x", # non-alphanumeric characters 'abcdefgh', # simple Unicode 'J\xf8rgen Scandinavian', '\u2014em-dash', # LP#1454030 hebrew, katanana, umlauts, 'sigil-should$not-change' ] if 'posix' == os.name: # Windows doesn't allow these characters but Unix systems do tests += ['"*', '\t\\', ':?<>|', ' ', '.file.' ] # Windows filenames cannot end with space or period for test in tests: # create the file filename = self.write_file(test, b"top secret") # delete the file delete(filename, shred) self.assertNotExists(filename) # delete an empty directory dirname = self.mkdtemp(prefix=test) self.assertExists(dirname) delete(dirname, shred) self.assertNotExists(dirname) def symlink_helper(link_fn): if 'nt' == os.name: from win32com.shell import shell if not shell.IsUserAnAdmin(): self.skipTest( 'skipping symlink test because of insufficient privileges' ) # make regular file srcname = self.mkstemp(prefix='bleachbit-test-delete-regular') # make symlink self.assertExists(srcname) linkname = tempfile.mktemp('bblink') self.assertNotExists(linkname) link_fn(srcname, linkname) self.assertExists(linkname) self.assertLExists(linkname) # delete symlink delete(linkname, shred) self.assertExists(srcname) self.assertNotLExists(linkname) # delete regular file delete(srcname, shred) self.assertNotExists(srcname) # # test broken symlink # srcname = self.mkstemp(prefix='bleachbit-test-delete-sym') self.assertLExists(srcname) link_fn(srcname, linkname) self.assertLExists(linkname) self.assertExists(linkname) # delete regular file first delete(srcname, shred) self.assertNotExists(srcname) self.assertLExists(linkname) # clean up delete(linkname, shred) self.assertNotExists(linkname) self.assertNotLExists(linkname) windows_vista_or_newer = False if 'nt' == os.name: from bleachbit.Windows import parse_windows_build # Windows Vista = 6.0 windows_vista_or_newer = parse_windows_build() >= 6.0 if windows_vista_or_newer: logger.debug('testing symbolic link') import ctypes kern = ctypes.windll.LoadLibrary("kernel32.dll") def win_symlink(src, linkname): rc = kern.CreateSymbolicLinkW(linkname, src, 0) if rc == 0: print('CreateSymbolicLinkW(%s, %s)' % (linkname, src)) print('CreateSymolicLinkW() failed, error = %s' % ctypes.FormatError()) self.assertNotEqual(rc, 0) symlink_helper(win_symlink) # below this point, only posix if 'nt' == os.name: return # test file with mode 0444/-r--r--r-- filename = self.write_file('bleachbit-test-0444') os.chmod(filename, 0o444) delete(filename, shred) self.assertNotExists(filename) # test symlink symlink_helper(os.symlink) # test FIFO args = ["mkfifo", filename] ret = subprocess.call(args) self.assertEqual(ret, 0) self.assertExists(filename) delete(filename, shred) self.assertNotExists(filename) # test directory path = self.mkdtemp(prefix='bleachbit-test-delete-dir') self.assertExists(path) delete(path, shred) self.assertNotExists(path)