def test_prune(self): """Basic pruning test.""" # TODO(flowerhack): Actually test this. corpus_pruning_task.execute_task( "libFuzzer_fuchsia_example_fuzzers-overflow_fuzzer", "libfuzzer_asan_fuchsia", )
def test_prune(self): """Basic pruning test.""" corpus_pruning_task.execute_task('libFuzzer_test_fuzzer', 'libfuzzer_asan_job') quarantined = os.listdir(self.quarantine_dir) self.assertEqual(1, len(quarantined)) self.assertEqual(quarantined[0], 'crash-7acd6a2b3fe3c5ec97fa37e5a980c106367491fa') corpus = os.listdir(self.corpus_dir) self.assertEqual(4, len(corpus)) six.assertCountEqual(self, [ '39e0574a4abfd646565a3e436c548eeb1684fb57', '7d157d7c000ae27db146575c08ce30df893d3a64', '31836aeaab22dc49555a97edb4c753881432e01d', '6fa8c57336628a7d733f684dc9404fbd09020543', ], corpus) testcases = list(data_types.Testcase.query()) self.assertEqual(1, len(testcases)) self.assertEqual('Null-dereference WRITE', testcases[0].crash_type) self.assertEqual('Foo\ntest_fuzzer.cc\n', testcases[0].crash_state) self.assertEqual(1337, testcases[0].crash_revision) self.assertEqual('test_fuzzer', testcases[0].get_metadata('fuzzer_binary_name')) self.assertEqual('label1,label2', testcases[0].get_metadata('issue_labels')) today = datetime.datetime.utcnow().date() # get_coverage_information on test_fuzzer rather than libFuzzer_test_fuzzer # since the libfuzzer_ prefix is removed when saving coverage info. coverage_info = data_handler.get_coverage_information( 'test_fuzzer', today) self.assertDictEqual( { 'corpus_backup_location': u'backup_link', 'corpus_location': u'gs://bucket/libFuzzer/test_fuzzer/', 'corpus_size_bytes': 8, 'corpus_size_units': 4, 'date': today, # Coverage numbers are expected to be None as they come from fuzzer # coverage cron task (see src/go/server/cron/coverage.go). 'edges_covered': None, 'edges_total': None, 'functions_covered': None, 'functions_total': None, 'fuzzer': u'test_fuzzer', 'html_report_url': None, 'quarantine_location': u'gs://bucket-quarantine/libFuzzer/test_fuzzer/', 'quarantine_size_bytes': 2, 'quarantine_size_units': 1, }, coverage_info.to_dict()) self.assertEqual(self.mock.unpack_seed_corpus_if_needed.call_count, 1)
def test_prune(self): """Basic pruning test.""" self.corpus_dir = self.fuchsia_corpus_dir corpus_pruning_task.execute_task( 'libFuzzer_fuchsia_example_fuzzers-trap_fuzzer', 'libfuzzer_asan_fuchsia') corpus = os.listdir(self.corpus_dir) self.assertEqual(2, len(corpus)) six.assertCountEqual(self, [ '31836aeaab22dc49555a97edb4c753881432e01d', '7cf184f4c67ad58283ecb19349720b0cae756829' ], corpus) quarantine = os.listdir(self.quarantine_dir) self.assertEqual(1, len(quarantine)) six.assertCountEqual( self, ['crash-7a8dc3985d2a90fb6e62e94910fc11d31949c348'], quarantine)
def test_prune(self): """Basic pruning test.""" self.corpus_dir = self.fuchsia_corpus_dir corpus_pruning_task.execute_task( 'libFuzzer_fuchsia_example-fuzzers-trap_fuzzer', 'libfuzzer_asan_fuchsia') corpus = os.listdir(self.corpus_dir) self.assertEqual(2, len(corpus)) six.assertCountEqual(self, [ '801c34269f74ed383fc97de33604b8a905adb635', '7cf184f4c67ad58283ecb19349720b0cae756829' ], corpus) quarantine = os.listdir(self.quarantine_dir) self.assertEqual(1, len(quarantine)) six.assertCountEqual( self, ['crash-7a8dc3985d2a90fb6e62e94910fc11d31949c348'], quarantine)
def test_prune(self): """Test pruning.""" self._setup_env(job_type='libfuzzer_asan_job') self.mock._record_cross_pollination_stats.side_effect = ( self.get_mock_record_compare(project_qualified_name='test_fuzzer', method='random', sources='test2_fuzzer', tags='', initial_corpus_size=5, corpus_size=3, initial_edge_coverage=0, edge_coverage=0, initial_feature_coverage=0, feature_coverage=0)) corpus_pruning_task.execute_task('libFuzzer_test_fuzzer', 'libfuzzer_asan_job') corpus_dir = os.path.join(self.temp_dir, 'corpus') os.mkdir(corpus_dir) self.corpus.rsync_to_disk(corpus_dir) six.assertCountEqual(self, [ '39e0574a4abfd646565a3e436c548eeb1684fb57', '7d157d7c000ae27db146575c08ce30df893d3a64', '31836aeaab22dc49555a97edb4c753881432e01d', '6fa8c57336628a7d733f684dc9404fbd09020543', ], os.listdir(corpus_dir)) quarantine_dir = os.path.join(self.temp_dir, 'quarantine') os.mkdir(quarantine_dir) self.quarantine_corpus.rsync_to_disk(quarantine_dir) six.assertCountEqual( self, ['crash-7acd6a2b3fe3c5ec97fa37e5a980c106367491fa'], os.listdir(quarantine_dir)) testcases = list(data_types.Testcase.query()) self.assertEqual(1, len(testcases)) self.assertEqual('Null-dereference WRITE', testcases[0].crash_type) self.assertEqual('Foo\ntest_fuzzer.cc\n', testcases[0].crash_state) self.assertEqual(1337, testcases[0].crash_revision) self.assertEqual('test_fuzzer', testcases[0].get_metadata('fuzzer_binary_name')) self.mock.add_task.assert_has_calls([ mock.call('minimize', testcases[0].key.id(), u'libfuzzer_asan_job'), ]) today = datetime.datetime.utcnow().date() coverage_info = data_handler.get_coverage_information( 'test_fuzzer', today) coverage_info_without_backup = coverage_info.to_dict() del coverage_info_without_backup['corpus_backup_location'] self.assertDictEqual( { 'corpus_location': u'gs://{}/libFuzzer/test_fuzzer/'.format(self.corpus_bucket), 'corpus_size_bytes': 8, 'corpus_size_units': 4, 'date': today, # Coverage numbers are expected to be None as they come from fuzzer # coverage cron task (see src/go/server/cron/coverage.go). 'edges_covered': None, 'edges_total': None, 'functions_covered': None, 'functions_total': None, 'fuzzer': u'test_fuzzer', 'html_report_url': None, 'quarantine_location': u'gs://{}/libFuzzer/test_fuzzer/'.format( self.quarantine_bucket), 'quarantine_size_bytes': 2, 'quarantine_size_units': 1, }, coverage_info_without_backup) self.assertEqual( coverage_info.corpus_backup_location, 'gs://{}/corpus/libFuzzer/test_fuzzer/'.format( self.backup_bucket) + '%s.zip' % today)
def test_prune(self): """Test pruning.""" self._setup_env(job_type="libfuzzer_asan_job") corpus_pruning_task.execute_task("libFuzzer_test_fuzzer", "libfuzzer_asan_job") corpus_dir = os.path.join(self.temp_dir, "corpus") os.mkdir(corpus_dir) self.corpus.rsync_to_disk(corpus_dir) self.assertItemsEqual( [ "39e0574a4abfd646565a3e436c548eeb1684fb57", "7d157d7c000ae27db146575c08ce30df893d3a64", "31836aeaab22dc49555a97edb4c753881432e01d", "6fa8c57336628a7d733f684dc9404fbd09020543", ], os.listdir(corpus_dir), ) quarantine_dir = os.path.join(self.temp_dir, "quarantine") os.mkdir(quarantine_dir) self.quarantine_corpus.rsync_to_disk(quarantine_dir) self.assertItemsEqual( ["crash-7acd6a2b3fe3c5ec97fa37e5a980c106367491fa"], os.listdir(quarantine_dir), ) testcases = list(data_types.Testcase.query()) self.assertEqual(1, len(testcases)) self.assertEqual("Null-dereference WRITE", testcases[0].crash_type) self.assertEqual("Foo\ntest_fuzzer.cc\n", testcases[0].crash_state) self.assertEqual(1337, testcases[0].crash_revision) self.assertEqual("test_fuzzer", testcases[0].get_metadata("fuzzer_binary_name")) self.mock.add_task.assert_has_calls( [mock.call("minimize", testcases[0].key.id(), u"libfuzzer_asan_job")]) today = datetime.datetime.utcnow().date() coverage_info = data_handler.get_coverage_information("test_fuzzer", today) coverage_info_without_backup = coverage_info.to_dict() del coverage_info_without_backup["corpus_backup_location"] self.assertDictEqual( { "corpus_location": u"gs://{}/libFuzzer/test_fuzzer/".format(self.corpus_bucket), "corpus_size_bytes": 8, "corpus_size_units": 4, "date": today, # Coverage numbers are expected to be None as they come from fuzzer # coverage cron task (see src/go/server/cron/coverage.go). "edges_covered": None, "edges_total": None, "functions_covered": None, "functions_total": None, "fuzzer": u"test_fuzzer", "html_report_url": None, "quarantine_location": u"gs://{}/libFuzzer/test_fuzzer/".format(self.quarantine_bucket ), "quarantine_size_bytes": 2, "quarantine_size_units": 1, }, coverage_info_without_backup, ) self.assertEqual( coverage_info.corpus_backup_location, "gs://{}/corpus/libFuzzer/test_fuzzer/".format(self.backup_bucket) + "%s.zip" % today, )
def test_prune(self): """Basic pruning test.""" corpus_pruning_task.execute_task("libFuzzer_test_fuzzer", "libfuzzer_asan_job") quarantined = os.listdir(self.quarantine_dir) self.assertEqual(1, len(quarantined)) self.assertEqual(quarantined[0], "crash-7acd6a2b3fe3c5ec97fa37e5a980c106367491fa") corpus = os.listdir(self.corpus_dir) self.assertEqual(4, len(corpus)) self.assertItemsEqual( [ "39e0574a4abfd646565a3e436c548eeb1684fb57", "7d157d7c000ae27db146575c08ce30df893d3a64", "31836aeaab22dc49555a97edb4c753881432e01d", "6fa8c57336628a7d733f684dc9404fbd09020543", ], corpus, ) testcases = list(data_types.Testcase.query()) self.assertEqual(1, len(testcases)) self.assertEqual("Null-dereference WRITE", testcases[0].crash_type) self.assertEqual("Foo\ntest_fuzzer.cc\n", testcases[0].crash_state) self.assertEqual(1337, testcases[0].crash_revision) self.assertEqual("test_fuzzer", testcases[0].get_metadata("fuzzer_binary_name")) self.assertEqual("label1,label2", testcases[0].get_metadata("issue_labels")) today = datetime.datetime.utcnow().date() # get_coverage_information on test_fuzzer rather than libFuzzer_test_fuzzer # since the libfuzzer_ prefix is removed when saving coverage info. coverage_info = data_handler.get_coverage_information("test_fuzzer", today) self.assertDictEqual( { "corpus_backup_location": u"backup_link", "corpus_location": u"gs://bucket/libFuzzer/test_fuzzer/", "corpus_size_bytes": 8, "corpus_size_units": 4, "date": today, # Coverage numbers are expected to be None as they come from fuzzer # coverage cron task (see src/go/server/cron/coverage.go). "edges_covered": None, "edges_total": None, "functions_covered": None, "functions_total": None, "fuzzer": u"test_fuzzer", "html_report_url": None, "quarantine_location": u"gs://bucket-quarantine/libFuzzer/test_fuzzer/", "quarantine_size_bytes": 2, "quarantine_size_units": 1, }, coverage_info.to_dict(), ) self.assertEqual(self.mock.unpack_seed_corpus_if_needed.call_count, 1)