Exemple #1
0
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 == ""
Exemple #2
0
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 == ''
Exemple #3
0
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 == ''