def testCorrectCallbackIsCalledForAllEdgesInPath(self): template1 = Template(name='template1', fields=String('str1')) template2 = Template(name='template2', fields=String('str2')) template3 = Template(name='template3', fields=String('str3')) self.cb2_call_count = 0 self.cb3_call_count = 0 def t1_t2_cb(fuzzer, edge, response): self.assertEqual(fuzzer, self.fuzzer) self.assertEqual(edge.src, template1) self.assertEqual(edge.dst, template2) self.cb2_call_count += 1 def t2_t3_cb(fuzzer, edge, response): self.assertEqual(fuzzer, self.fuzzer) self.assertEqual(edge.src, template2) self.assertEqual(edge.dst, template3) self.cb3_call_count += 1 model = GraphModel() model.logger = self.logger model.connect(template1) model.connect(template1, template2, t1_t2_cb) model.connect(template2, template3, t2_t3_cb) self.model = model self.fuzzer.set_model(model) self.fuzzer.set_range() self.fuzzer.start() self.assertEqual(template2.num_mutations() + template3.num_mutations(), self.cb2_call_count) self.assertEqual(template3.num_mutations(), self.cb3_call_count)
def test_fuzzable_same_as_string_field_null(self): ''' Verify that the number of mutations is the same as for a StringField with value 'null' ''' t = warp_with_template(kjson.JsonNull(name='null', fuzzable=True)) st = Template(name='reference template', fields=String('null', name='snull')) self.assertEqual(t.num_mutations(), st.num_mutations()) while t.mutate(): st.mutate() self.assertEqual(t.render().bytes, st.render().bytes)
def test_fuzzable_same_as_quoted_string_field(self): ''' Verify that the number of mutations is the same as for a quoted StringField with the same default value ''' value = 'kitty' t = warp_with_template(kjson.JsonString(name='test', value=value, fuzzable=True)) st = Template(name='reference template', fields=String(name='reference', value=value)) self.assertEqual(t.num_mutations(), st.num_mutations()) while t.mutate(): st.mutate() self.assertEqual(t.render().bytes, '"%s"' % st.render().bytes)
def testCallbackIsCalledBetweenTwoNodes(self): template1 = Template(name='template1', fields=String('str1')) template2 = Template(name='template2', fields=String('str2')) self.cb_call_count = 0 def t1_t2_cb(fuzzer, edge, response): self.assertEqual(fuzzer, self.fuzzer) self.assertEqual(edge.src, template1) self.assertEqual(edge.dst, template2) self.cb_call_count += 1 model = GraphModel() model.logger = self.logger model.connect(template1) model.connect(template1, template2, t1_t2_cb) self.model = model self.fuzzer.set_model(model) self.fuzzer.set_range() self.fuzzer.start() self.assertEqual(template2.num_mutations(), self.cb_call_count)