Esempio n. 1
0
    def test_exception(self, mock_remove):
        # bypass pyfakefs's os.remove.
        os.remove = mock_remove
        mock_remove.side_effect = OSError()

        self.fs.CreateFile('/test/aa/cc.txt', contents='')
        shell.remove_empty_files('/test')
        self.assertTrue(os.path.exists('/test/aa/cc.txt'))
Esempio n. 2
0
    def test_remove(self):
        """Test remove."""
        self.fs.CreateFile('/test/aa/bb.txt', contents='s')
        self.fs.CreateFile('/test/aa/cc.txt', contents='')
        self.fs.CreateFile('/test/aa/aa/dd.txt', contents='s')
        self.fs.CreateFile('/test/aa/aa/aa.txt', contents='')

        shell.remove_empty_files('/test')

        self.assertTrue(os.path.exists('/test/aa/bb.txt'))
        self.assertTrue(os.path.exists('/test/aa/aa/dd.txt'))
        self.assertFalse(os.path.exists('/test/aa/cc.txt'))
        self.assertFalse(os.path.exists('/test/aa/aa/aa.txt'))
Esempio n. 3
0
def unpack_crash_testcases(crash_testcases_directory):
    """Unpacks the old crash testcases in the provided directory."""
    for testcase in ndb_utils.get_all_from_model(data_types.Testcase):
        testcase_id = testcase.key.id()

        # 1. If we have already stored the testcase, then just skip.
        if testcase_id in STORED_TESTCASES_LIST:
            continue

        # 2. Make sure that it is a unique crash testcase. Ignore duplicates,
        # uploaded repros.
        if testcase.status != 'Processed':
            continue

        # 3. Check if the testcase is fixed. If not, skip.
        if testcase.open:
            continue

        # 4. Check if the testcase has a minimized repro. If not, skip.
        if not testcase.minimized_keys or testcase.minimized_keys == 'NA':
            continue

        # 5. Only use testcases that have bugs associated with them.
        if not testcase.bug_information:
            continue

        # 6. Existing IPC testcases are un-interesting and unused in furthur
        # mutations. Due to size bloat, ignoring these for now.
        if testcase.absolute_path.endswith(testcase_manager.IPCDUMP_EXTENSION):
            continue

        # 7. Ignore testcases that are archives (e.g. Langfuzz fuzzer tests).
        if archive.get_archive_type(testcase.absolute_path):
            continue

        # 8. Skip in-process fuzzer testcases, since these are only applicable to
        # fuzz targets and don't run with blackbox binaries.
        if testcase.fuzzer_name and testcase.fuzzer_name in [
                'afl', 'libFuzzer'
        ]:
            continue

        # Un-pack testcase.
        try:
            _, input_directory, _ = setup.unpack_testcase(testcase)
        except Exception:
            logs.log_error('Failed to unpack testcase %d.' % testcase.key.id())
            continue

        # Move this to our crash testcases directory.
        crash_testcase_directory = os.path.join(crash_testcases_directory,
                                                str(testcase_id))
        shell.move(input_directory, crash_testcase_directory)

        # Re-create input directory for unpacking testcase in next iteration.
        shell.create_directory(input_directory)

        STORED_TESTCASES_LIST.append(testcase_id)

    # Remove testcase directories that exceed the max size limit.
    for directory_name in os.listdir(crash_testcases_directory):
        directory_path = os.path.join(crash_testcases_directory,
                                      directory_name)
        if not os.path.isdir(directory_path):
            continue

        if shell.get_directory_size(
                directory_path) <= MAX_TESTCASE_DIRECTORY_SIZE:
            continue

        shell.remove_directory(directory_path)

    # Rename all fuzzed testcase files as regular files.
    for root, _, files in os.walk(crash_testcases_directory):
        for filename in files:
            if not filename.startswith(testcase_manager.FUZZ_PREFIX):
                continue

            file_path = os.path.join(root, filename)
            stripped_file_name = os.path.basename(
                file_path)[len(testcase_manager.FUZZ_PREFIX):]
            stripped_file_path = os.path.join(os.path.dirname(file_path),
                                              stripped_file_name)
            try:
                os.rename(file_path, stripped_file_path)
            except:
                raise Exception('Failed to rename testcase %s.' % file_path)

    # Remove empty files and dirs to avoid the case where a fuzzer randomly
    # chooses an empty dir/file and generates zero testcases.
    shell.remove_empty_files(crash_testcases_directory)
    shell.remove_empty_directories(crash_testcases_directory)
Esempio n. 4
0
 def test_ignore_file(self):
     self.fs.CreateFile('/test/aa/cc.txt', contents='')
     shell.remove_empty_files('/test/aa/cc.txt')
     self.assertTrue(os.path.exists('/test/aa/cc.txt'))