From 1d8e05152237a8a3b27c67b130b7de035628c805 Mon Sep 17 00:00:00 2001 From: Mark Mossberg Date: Mon, 14 Aug 2017 14:44:53 -0400 Subject: [PATCH] Fix state.generate_testcase (#451) * Use correct event name * Add test for state.generate_testcase Test merely tests that this function publishes the 'will_generate_testcase' event * Properly test; make sure the callback executes and error if not This is the most convoluted unit test I've ever written. * "better" --- manticore/core/state.py | 2 +- tests/test_state.py | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/manticore/core/state.py b/manticore/core/state.py index 5b163ff..97251c3 100644 --- a/manticore/core/state.py +++ b/manticore/core/state.py @@ -372,4 +372,4 @@ class State(Eventful): :param str name: Short string identifying this testcase used to prefix workspace entries. :param str message: Longer description """ - self.publish('will_generate_inputs', name, message) + self.publish('will_generate_testcase', name, message) diff --git a/tests/test_state.py b/tests/test_state.py index e976e0a..7b8eff3 100644 --- a/tests/test_state.py +++ b/tests/test_state.py @@ -4,6 +4,10 @@ from manticore.platforms import linux from manticore.core.state import State from manticore.core.smtlib import BitVecVariable, ConstraintSet +class _CallbackExecuted(Exception): + pass + + class FakeMemory(object): def __init__(self): self._constraints = None @@ -196,4 +200,14 @@ class StateTest(unittest.TestCase): self.assertEqual( new_state.context['step'], 20) new_new_state = pickle.loads(new_new_file) self.assertEqual( new_new_state.context['step'], 30) - + + + def _test_state_gen_helper(self, name, msg): + self.assertEqual(name, 'statename') + self.assertEqual(msg, 'statemsg') + raise _CallbackExecuted + + def test_state_gen(self): + self.state.subscribe('will_generate_testcase', self._test_state_gen_helper) + with self.assertRaises(_CallbackExecuted): + self.state.generate_testcase('statename', 'statemsg')