def test_not_fuzzable_num_mutations_zero(self): ''' Verify that the number of mutations is zero when the field is not fuzzable ''' t = warp_with_template(kjson.JsonString(name='test', value='kitty', fuzzable=False)) self.assertEqual(t.num_mutations(), 0) self.assertEqual(t.mutate(), False)
def test_not_fuzzable_num_mutations_zero(self): ''' Verify that the number of mutations is zero when the field is not fuzzable ''' t = warp_with_template(kjson.JsonNull(name='null')) self.assertEqual(t.num_mutations(), 0) self.assertEqual(t.mutate(), False)
def test_multiple_types_in_object(self): ''' Verify that multiple types are encoded properly in a JsonObject ''' t = warp_with_template( kjson.JsonObject( name='obj1', member_dict={ 'obj2a': kjson.JsonObject( name='obj2a', member_dict={ } ), 'an_int': UInt32(value=1, encoder=ENC_INT_DEC), 'a_string': kjson.JsonString(name='some_name', value='some string') } ) ) reference = { 'obj2a': { }, 'an_int': 1, 'a_string': 'some string', } rendered = t.render().bytes self.logger.debug(rendered) result = json.loads(rendered) reference = json.loads(json.dumps(reference)) self.assertEqual(reference, result)
def test_no_value_2_mutations(self): ''' Verify that when no value is set, only two mutations may happen - true and false ''' t = warp_with_template(kjson.JsonBoolean(name='bool')) self.assertEqual(t.num_mutations(), 2) mutations = get_mutation_set(t) self.assertEqual(mutations, set(['true', 'false']))
def test_valid_string_format(self): ''' Test that a JsonString lego results in a quoted string ''' value = 'kitty' t = warp_with_template(kjson.JsonString(name='test', value=value, fuzzable=True)) res = t.render().bytes self.assertEqual(res, '"%s"' % value)
def test_value_no_fuzzable_false(self): ''' Verify that the number of mutations is zero when value is set and the field is not fuzzable value: False ''' t = warp_with_template(kjson.JsonBoolean(name='bool', value=False, fuzzable=False)) self.assertEqual(t.num_mutations(), 0) self.assertEqual(t.mutate(), False) self.assertEqual(t.render().bytes, 'false')
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_string_in_object(self): ''' Verify that a JsonString is encoded properly in a JsonObject ''' member_value, member_key = ('test string', 'the_string') member_field = kjson.JsonString(name='field', value=member_value) member_dict = {member_key: member_field} t = warp_with_template(kjson.JsonObject(name='test', member_dict=member_dict, fuzz_keys=False)) rendered = t.render().bytes d = json.loads(rendered) self.assertEqual(d[member_key], member_value)
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 test_int_in_object(self): ''' Verify that an int is encoded properly in a JsonObject ''' member_value, member_key = (123, 'the_int') member_field = UInt32(member_value, encoder=ENC_INT_DEC, name='field') member_dict = {member_key: member_field} t = warp_with_template(kjson.JsonObject(name='test', member_dict=member_dict, fuzz_keys=False)) rendered = t.render().bytes d = json.loads(rendered) self.assertEqual(d[member_key], member_value)
def test_null_in_object(self): ''' Verify that a null is encoded properly in a JsonObject ''' member_value, member_key = (None, 'the_bool') member_field = kjson.JsonNull(name='field') member_dict = {member_key: member_field} t = warp_with_template(kjson.JsonObject(name='test', member_dict=member_dict, fuzz_keys=False)) rendered = t.render().bytes d = json.loads(rendered) self.assertEqual(d[member_key], member_value)
def test_empty_array(self): ''' Verify that an empty list is encoded properly in a JsonArray ''' the_list = [] t = warp_with_template(kjson.JsonArray(name='test', values=the_list)) rendered = t.render().bytes self.logger.debug('rendered: %s', rendered) self.logger.debug('rendered (hex): %s', rendered.encode('hex')) res = json.loads(rendered) for i, j in zip(the_list, res): self.assertEqual(i, j)
def test_strings_in_array(self): ''' Verify that a list of JsonStrings is encoded properly in a JsonArray ''' the_list = ['1', 'broom', 'link', 'overflow', 'doritos'] field_list = [kjson.JsonString(name=x, value=x) for x in the_list] t = warp_with_template(kjson.JsonArray(name='test', values=field_list)) rendered = t.render().bytes self.logger.debug('rendered: %s', rendered) self.logger.debug('rendered (hex): %s', rendered.encode('hex')) res = json.loads(rendered) for i, j in zip(the_list, res): self.assertEqual(i, j)
def test_nulls_in_array(self): ''' Verify that a list of JsonNulls is encoded properly in a JsonArray ''' the_list = [None, None, None] field_list = [kjson.JsonNull(name='%s' % x) for x in range(len(the_list))] t = warp_with_template(kjson.JsonArray(name='test', values=field_list)) rendered = t.render().bytes self.logger.debug('rendered: %s', rendered) self.logger.debug('rendered (hex): %s', rendered.encode('hex')) res = json.loads(rendered) for i, j in zip(the_list, res): self.assertEqual(i, j)
def test_bools_in_array(self): ''' Verify that a list of JsonBoolean is encoded properly in a JsonArray ''' the_list = [True, False, True, True, False, False, True] field_list = [kjson.JsonBoolean(name='%s_%s' % (x, i), value=x) for i, x in enumerate(the_list)] t = warp_with_template(kjson.JsonArray(name='test', values=field_list)) rendered = t.render().bytes self.logger.debug('rendered: %s', rendered) self.logger.debug('rendered (hex): %s', rendered.encode('hex')) res = json.loads(rendered) for i, j in zip(the_list, res): self.assertEqual(i, j)
def test_ints_in_array(self): ''' Verify that a list of ints is encoded properly in a JsonArray ''' the_list = [1, 5, 2, 1000] field_list = [UInt32(x, encoder=ENC_INT_DEC, name='%s' % x) for x in the_list] t = warp_with_template(kjson.JsonArray(name='test', values=field_list)) rendered = t.render().bytes self.logger.debug('rendered: %s', rendered) self.logger.debug('rendered (hex): %s', rendered.encode('hex')) res = json.loads(rendered) for i, j in zip(the_list, res): self.assertEqual(i, j)
def test_objects_in_array(self): ''' Verify that a list of JsonObjects is encoded properly in a JsonArray ''' the_list = [] for i in range(10): the_list.append(kjson.JsonObject(name='obj_%d' % i, member_dict={'internal': UInt32(value=i, encoder=ENC_INT_DEC)}, fuzz_keys=False)) t = warp_with_template(kjson.JsonArray(name='test', values=the_list)) rendered = t.render().bytes self.logger.debug('rendered: %s', rendered) self.logger.debug('rendered (hex): %s', rendered.encode('hex')) res = json.loads(rendered) self.assertEqual(len(res), 10) for i in range(10): self.assertEqual(res[i]['internal'], i)
def test_empty_object(self): ''' Verify that an empty object is encoded properly json ''' t = warp_with_template( kjson.JsonObject( name='obj1', member_dict={} ) ) reference = {} rendered = t.render().bytes self.logger.debug(rendered) result = json.loads(rendered) reference = json.loads(json.dumps(reference)) self.assertEqual(reference, result)
def test_arrays_in_array(self): ''' Verify that a list of JsonArrays is encoded properly in a JsonArray ''' the_list = [] for i in range(10): the_list.append( kjson.JsonArray( name='arr_%d' % i, values=[ UInt32(value=x, encoder=ENC_INT_DEC) for x in range(i, i + 5) ])) t = warp_with_template(kjson.JsonArray(name='test', values=the_list)) rendered = t.render().bytes self.logger.debug('rendered: %s', rendered) self.logger.debug('rendered (hex): %s', rendered.encode('hex')) res = json.loads(rendered) self.assertEqual(len(res), 10) for i in range(10): self.assertEqual(res[i], list(range(i, i + 5)))
def test_array_in_object(self): ''' Verify that a JsonArray is encoded properly in a JsonObject ''' t = warp_with_template( kjson.JsonObject( name='obj1', member_dict={ 'arr': kjson.JsonArray( name='arr', values=[UInt32(value=x, encoder=ENC_INT_DEC) for x in range(0, 10)] ) } ) ) reference = {'arr': list(range(0, 10))} rendered = t.render().bytes self.logger.debug(rendered) result = json.loads(rendered) reference = json.loads(json.dumps(reference)) self.assertEqual(reference, result)
def test_value_fuzzable_multiple_mutations(self): ''' Verify that when a value is specified and fuzzable is True, there are multiple mutations ''' t = warp_with_template(kjson.JsonBoolean(name='bool', value=False, fuzzable=True)) self.assertGreater(t.num_mutations(), 10)