def test_string(): for endian in ['<', '>', '@', '=', '!']: for reverse in [True, False]: for i in range(100): print "endian = %s, reverse = %s, i = %d" % (endian, reverse, i) slen = random.getrandbits(8) coder_token = Struct().append( uint8('foo_len'), Dynamic('foo_len', String('foo', endian, reverse)), Static(slen, String('bar', endian, reverse)), Consumer(String('moo', endian, reverse)) ) foo_len = random.getrandbits(7) + 10 bar_len = random.getrandbits(7) + 10 moo_len = random.getrandbits(7) + 10 foo = "".join(random.sample(string.printable * foo_len, foo_len)) bar = "".join(random.sample(string.printable * bar_len, bar_len)) moo = "".join(random.sample(string.printable * moo_len, moo_len)) in_dikt = { 'foo' : foo, 'bar' : bar, 'moo' : moo } tmp_dikt, payload = coder_token.encode(in_dikt) in_dikt['bar'] = bar[:slen] tmp_dikt['bar'] = bar[:slen] assert in_dikt == tmp_dikt payload, out_dikt = coder_token.decode(payload, dict()) assert in_dikt == out_dikt, "\n%s == \n%s" % (in_dikt, out_dikt) assert payload == ""
def test_struct(): coder_token = Struct().append( uint8('foo'), Padding('asdf'), uint16('bar'), Struct('baz').append( uint32('moo'), single('meh') ) ) for i in range(100): foo = random.getrandbits(8) bar = random.getrandbits(16) moo = random.getrandbits(32) meh = random.getrandbits(8) meh = float.fromhex(hex(meh).strip('L')) in_dikt = { 'foo' : foo, 'bar' : bar, 'baz' : { 'moo' : moo, 'meh' : meh, } } tmp_dikt, payload = coder_token.encode(in_dikt) assert payload assert payload[1:5] == 'asdf', "%s != %s" % (payload[1:6], 'asdf') assert tmp_dikt == in_dikt payload, out_dikt = coder_token.decode(payload, dict()) assert out_dikt == in_dikt, "\n%s != \n%s" % (out_dikt, in_dikt) assert out_dikt['bar'] == bar, "%d != %d" % (out_dikt['bar'], bar) assert payload == ''
def test_dynamic_int_array(): for length in [1,2,4,8]: for endian in ['<', '>', '@', '=', '!']: for reverse in [True, False]: for sign in [True, False]: for lenlen in [1,2,4,8]: coder_token = Struct().append( Integer('foo_len', False, lenlen, endian), Dynamic('foo_len', Array('foo', reverse).of( Integer('', sign, length))) ) foo_len = random.randrange(10, 255, 8) data = [random.getrandbits((8 * length) - 1) for i in range(foo_len)] if sign: signed = [True, False] data = [i * (-1 if random.choice(signed) else 1) for i in data] in_dikt = {'foo_len' : lenlen, 'foo' : data} temp_dikt, payload = coder_token.encode(in_dikt) assert temp_dikt == in_dikt assert payload payload, out_dikt = coder_token.decode(payload, temp_dikt) assert out_dikt == in_dikt assert payload == ''