Пример #1
0
 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))
Пример #2
0
 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))
Пример #3
0
    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)
Пример #4
0
    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)