Skip to content

Commit 9510adf

Browse files
committed
simplifying test
Signed-off-by: Javan Lacerda <[email protected]>
1 parent 6d4189b commit 9510adf

File tree

1 file changed

+21
-72
lines changed

1 file changed

+21
-72
lines changed

src/clusterfuzz/_internal/tests/core/bot/tasks/utasks/corpus_pruning_task_test.py

Lines changed: 21 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
from clusterfuzz._internal.tests.test_libs import helpers
4242
from clusterfuzz._internal.tests.test_libs import test_utils
4343
from clusterfuzz._internal.tests.test_libs import untrusted_runner_helpers
44+
from clusterfuzz.fuzz import engine
4445

4546
TEST_DIR = os.path.join(
4647
os.path.dirname(os.path.realpath(__file__)), 'corpus_pruning_task_data')
@@ -389,7 +390,7 @@ def test_prune(self):
389390
@test_utils.with_cloud_emulators('datastore')
390391
class CorpusPruningTestCentipede(unittest.TestCase, BaseTest):
391392
"""Tests for centipede corpus pruning."""
392-
393+
393394
def setUp(self):
394395
"""Set up."""
395396
BaseTest.setUp(self)
@@ -398,10 +399,15 @@ def setUp(self):
398399
'clusterfuzz._internal.base.utils.get_application_id',
399400
'clusterfuzz._internal.datastore.data_handler.update_task_status',
400401
'clusterfuzz._internal.datastore.data_handler.get_task_status',
402+
'clusterfuzz._internal.bot.fuzzers.centipede.engine.Engine.minimize_corpus',
401403
])
404+
405+
self.engine = centipede_engine.Engine()
402406
self.mock.setup_build.side_effect = self._mock_setup_build
403407
self.mock.get_application_id.return_value = 'project'
404-
self.mock.get.return_value = centipede_engine.Engine()
408+
self.mock.minimize_corpus.return_value = engine.FuzzResult(
409+
"", "", [], None, "", "")
410+
self.mock.get.return_value = self.engine
405411
self.maxDiff = None
406412
self.backup_bucket = os.environ['BACKUP_BUCKET'] or ''
407413

@@ -418,80 +424,23 @@ def test_prune(self):
418424
job_type='centipede_asan_job',
419425
fuzzer_name='centipede_clusterfuzz_format_target',
420426
uworker_env={})
421-
# src/clusterfuzz/_internal/tests/core/bot/fuzzers/centipede/test_data/clusterfuzz_format_target
422427
output = corpus_pruning_task.utask_main(uworker_input)
423-
self.assertFalse(output.HasField('error_type'))
424428
output.uworker_input.CopyFrom(uworker_input)
425429
corpus_pruning_task.utask_postprocess(output)
426430

427-
corpus = os.listdir(self.corpus_dir)
428-
self.assertCountEqual([
429-
'7acd6a2b3fe3c5ec97fa37e5a980c106367491fa',
430-
], corpus)
431-
432-
testcases = list(data_types.Testcase.query())
433-
self.assertEqual(1, len(testcases))
434-
self.assertEqual('Null-dereference WRITE', testcases[0].crash_type)
435-
self.assertEqual('Foo\ntest_fuzzer.cc\n', testcases[0].crash_state)
436-
self.assertEqual(1337, testcases[0].crash_revision)
437-
self.assertEqual('test_fuzzer',
438-
testcases[0].get_metadata('fuzzer_binary_name'))
439-
self.assertEqual('label1,label2', testcases[0].get_metadata('issue_labels'))
440-
441-
today = datetime.datetime.utcnow().date()
442-
# get_coverage_information on test_fuzzer rather than centipede_test_fuzzer
443-
# since the centipede_ prefix is removed when saving coverage info.
444-
coverage_info = data_handler.get_coverage_information('test_fuzzer', today)
445-
446-
self.assertDictEqual(
447-
{
448-
'corpus_backup_location':
449-
uworker_input.corpus_pruning_task_input.dated_backup_gcs_url,
450-
'corpus_location':
451-
'gs://bucket/centipede/test_fuzzer/',
452-
'corpus_size_bytes':
453-
4,
454-
'corpus_size_units':
455-
2,
456-
'date':
457-
today,
458-
# Coverage numbers are expected to be None as they come from fuzzer
459-
# coverage cron task (see src/go/server/cron/coverage.go).
460-
'edges_covered':
461-
None,
462-
'edges_total':
463-
None,
464-
'functions_covered':
465-
None,
466-
'functions_total':
467-
None,
468-
'fuzzer':
469-
'test_fuzzer',
470-
},
471-
coverage_info.to_dict())
472-
473-
self.assertEqual(self.mock.unpack_seed_corpus_if_needed.call_count, 1)
474-
475-
def get_mock_record_compare(self, project_qualified_name, sources,
476-
initial_corpus_size, corpus_size,
477-
initial_edge_coverage, edge_coverage,
478-
initial_feature_coverage, feature_coverage):
479-
"""Given all of the expected stats, returns a function
480-
that will compare them to an instance of CorpusPruningStats."""
481-
482-
def compare(stats):
483-
"""Mock record_cross_pollination_stats. Make sure function was called
484-
with the correct arguments."""
485-
self.assertEqual(project_qualified_name, stats.project_qualified_name)
486-
self.assertEqual(sources, stats.sources)
487-
self.assertEqual(initial_corpus_size, stats.initial_corpus_size)
488-
self.assertEqual(corpus_size, stats.corpus_size)
489-
self.assertEqual(initial_edge_coverage, stats.initial_edge_coverage)
490-
self.assertEqual(edge_coverage, stats.edge_coverage)
491-
self.assertEqual(initial_feature_coverage, stats.initial_feature_coverage)
492-
self.assertEqual(stats.feature_coverage, feature_coverage)
493-
494-
return compare
431+
# Mocking some inputs to simplify
432+
# We should recover the random directory name for
433+
# asserting here
434+
self.mock.minimize_corpus.assert_called_once_with(
435+
self.engine,
436+
os.path.join(TEST_DIR,
437+
'build/clusterfuzz_format_target'),
438+
[],
439+
[unittest.mock.ANY],
440+
unittest.mock.ANY,
441+
unittest.mock.ANY,
442+
79200
443+
)
495444

496445

497446
class GetProtoTimestampTest(unittest.TestCase):

0 commit comments

Comments
 (0)