def test_bytes_to_human(self): """Unit test for class bytes_to_human""" if 'posix' == os.name: old_locale = locale.getlocale(locale.LC_NUMERIC) locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8') # test one-way conversion for predefined values # each test is a tuple in the format: (bytes, SI, EIC) tests = ((-1, '-1B', '-1B'), (0, '0', '0'), (1, '1B', '1B'), (1000, '1kB', '1000B'), (1024, '1kB', '1KiB'), (1110, '1.1kB', '1.1KiB'), (1000**2, '1MB', '976.6KiB'), (1024**2, '1MB', '1MiB'), (1289748, '1.3MB', '1.2MiB'), (1000**3, '1GB', '953.7MiB'), (1024**3, '1.07GB', '1GiB'), (1320702444, '1.32GB', '1.23GiB'), (1000**4, '1TB', '931.32GiB'), (1024**4, '1.1TB', '1TiB'), (1000**5, '1PB', '909.49TiB'), (1024**5, '1.13PB', '1PiB')) options.set('units_iec', True) for test in tests: iec = bytes_to_human(test[0]) self.assertEqual(test[2], iec, 'bytes_to_human(%d) IEC = %s but expected %s' % (test[0], iec, test[2])) options.set('units_iec', False) for test in tests: si = bytes_to_human(test[0]) self.assertEqual(test[1], si, 'bytes_to_human(%d) SI = %s but expected %s' % (test[0], si, test[1])) # test roundtrip conversion for random values import random for n in range(0, 1000): bytes1 = random.randrange(0, 1000 ** 4) human = bytes_to_human(bytes1) bytes2 = human_to_bytes(human) error = abs(float(bytes2 - bytes1) / bytes1) self.assertLess(abs(error), 0.01, "%d (%s) is %.2f%% different than %d" % (bytes1, human, error * 100, bytes2)) # test localization if hasattr(locale, 'format_string'): try: locale.setlocale(locale.LC_NUMERIC, 'de_DE.utf8') except: logger.warning('exception when setlocale to de_DE.utf8') else: self.assertEqual("1,01GB", bytes_to_human(1000 ** 3 + 5812389)) # clean up if 'posix' == os.name: locale.setlocale(locale.LC_NUMERIC, old_locale)
def test_file_wipe(self): """Unit test for file_wipe There are more tests in testwipe.py """ from bleachbit.WindowsWipe import file_wipe dirname = tempfile.mkdtemp(prefix='bleachbit-file-wipe') filenames = ('short', 'long' + 'x' * 250, u'utf8-ɡælɪk') for filename in filenames: longname = os.path.join(dirname, filename) logger.debug('file_wipe(%s)', longname) def _write_file(longname, contents): self.write_file(longname, contents) return longname import win32api shortname = extended_path_undo( win32api.GetShortPathName(extended_path(longname))) self.assertExists(shortname) return shortname def _test_wipe(contents): shortname = _write_file(longname, contents) logger.debug( 'test_file_wipe(): filename length={}, shortname length ={}, contents length={}' .format(len(longname), len(shortname), len(contents))) if shell.IsUserAnAdmin(): # wiping requires admin privileges file_wipe(shortname) file_wipe(longname) else: with self.assertRaises(pywintypes.error): file_wipe(shortname) file_wipe(longname) self.assertExists(shortname) os.remove(extended_path(shortname)) self.assertNotExists(shortname) # A small file that fits in MFT _test_wipe('') # requires wiping of extents _test_wipe('secret' * 100000) import shutil shutil.rmtree(dirname, True) if shell.IsUserAnAdmin(): logger.warning( 'You should also run test_file_wipe() without admin privileges.' ) else: logger.warning( 'You should also run test_file_wipe() with admin privileges.')
def test_file_wipe(self): """Unit test for file_wipe There are more tests in testwipe.py """ from bleachbit.WindowsWipe import file_wipe dirname = tempfile.mkdtemp(prefix='bleachbit-file-wipe') filenames = ('short', 'long' + 'x' * 250, u'utf8-ɡælɪk') for filename in filenames: longname = os.path.join(dirname, filename) logger.debug('file_wipe(%s)', longname) def _write_file(longname, contents): self.write_file(longname, contents) return longname import win32api shortname = extended_path_undo( win32api.GetShortPathName(extended_path(longname))) self.assertExists(shortname) return shortname def _test_wipe(contents): shortname = _write_file(longname, contents) logger.debug('test_file_wipe(): filename length={}, shortname length ={}, contents length={}'.format( len(longname), len(shortname), len(contents))) if shell.IsUserAnAdmin(): # wiping requires admin privileges file_wipe(shortname) file_wipe(longname) else: with self.assertRaises(pywintypes.error): file_wipe(shortname) file_wipe(longname) self.assertExists(shortname) os.remove(extended_path(shortname)) self.assertNotExists(shortname) # A small file that fits in MFT _test_wipe('') # requires wiping of extents _test_wipe('secret' * 100000) import shutil shutil.rmtree(dirname, True) if shell.IsUserAnAdmin(): logger.warning('You should also run test_file_wipe() without admin privileges.') else: logger.warning('You should also run test_file_wipe() with admin privileges.')
def test_file_wipe(self): """Unit test for file_wipe There are more tests in testwipe.py """ from bleachbit.WindowsWipe import file_wipe, open_file, close_file, file_make_sparse from bleachbit.Windows import elevate_privileges from win32con import GENERIC_WRITE, WRITE_DAC dirname = tempfile.mkdtemp(prefix='bleachbit-file-wipe') filenames = ('short', 'long' + 'x' * 250, 'utf8-ɡælɪk') for filename in filenames: longname = os.path.join(dirname, filename) logger.debug('file_wipe(%s)', longname) def _write_file(longname, contents): self.write_file(longname, contents) import win32api shortname = extended_path_undo( win32api.GetShortPathName(extended_path(longname))) self.assertExists(shortname) return shortname def _deny_access(fh): import win32security import ntsecuritycon as con user, _, _ = win32security.LookupAccountName("", win32api.GetUserName()) dacl = win32security.ACL() dacl.AddAccessDeniedAce(win32security.ACL_REVISION, con.FILE_GENERIC_READ | con.FILE_GENERIC_WRITE, user) win32security.SetSecurityInfo(fh, win32security.SE_FILE_OBJECT, win32security.DACL_SECURITY_INFORMATION, None, None, dacl, None) def _test_wipe(contents, deny_access = False, is_sparse=False): shortname = _write_file(longname, contents) if deny_access or is_sparse: fh = open_file(extended_path(longname), mode=GENERIC_WRITE | WRITE_DAC) if is_sparse: file_make_sparse(fh) if deny_access: _deny_access(fh) close_file(fh) logger.debug('test_file_wipe(): filename length={}, shortname length ={}, contents length={}, is_sparse={}'.format( len(longname), len(shortname), len(contents), is_sparse)) if shell.IsUserAnAdmin(): # wiping requires admin privileges file_wipe(shortname) file_wipe(longname) else: with self.assertRaises(pywintypes.error): file_wipe(shortname) file_wipe(longname) self.assertExists(shortname) os.remove(extended_path(shortname)) self.assertNotExists(shortname) # A small file that fits in MFT _test_wipe(b'') # requires wiping of extents _test_wipe(b'secret' * 100000) # requires wiping of extents: special file case elevate_privileges(False) _test_wipe(b'secret' * 100000, deny_access = True, is_sparse=True) shutil.rmtree(dirname, True) if shell.IsUserAnAdmin(): logger.warning( 'You should also run test_file_wipe() without admin privileges.') else: logger.warning( 'You should also run test_file_wipe() with admin privileges.')