def test_no_valid_crash(self): """No valid crash.""" for c in self.crashes: c.is_valid.return_value = False self.reproducible_crashes = [] self.assertEqual((None, None), fuzz_task.find_main_crash(self.crashes, 99)) for c in self.crashes: c.archive_testcase_in_blobstore.assert_called_once_with() self.assertEqual(0, self.mock.test_for_reproducibility.call_count)
def test_unreproducible_crash(self): """No reproducible crash. Find the first valid one.""" for c in self.crashes: c.is_valid.return_value = True self.crashes[0].is_valid.return_value = False self.reproducible_crashes = [] self.assertEqual((self.crashes[1], True), fuzz_task.find_main_crash(self.crashes, 99)) for c in self.crashes: c.archive_testcase_in_blobstore.assert_called_once_with() # Calls for every crash except self.crashes[0] because it's invalid. self.assertEqual( len(self.crashes) - 1, self.mock.test_for_reproducibility.call_count)
def test_reproducible_crash(self): """Find that the 2nd crash is reproducible.""" for c in self.crashes: c.is_valid.return_value = True self.crashes[0].is_valid.return_value = False self.reproducible_crashes = [self.crashes[2]] self.assertEqual((self.crashes[2], False), fuzz_task.find_main_crash(self.crashes, 99)) self.crashes[0].archive_testcase_in_blobstore.assert_called_once_with() self.crashes[1].archive_testcase_in_blobstore.assert_called_once_with() self.crashes[2].archive_testcase_in_blobstore.assert_called_once_with() self.crashes[3].archive_testcase_in_blobstore.assert_not_called() # Calls for self.crashes[1] and self.crashes[2]. self.assertEqual(2, self.mock.test_for_reproducibility.call_count)