def test_remaining(self):
        dg = Datagram()
        dg.add_uint16(25)
        dg.add_int64(-354843598374)

        dgi = dg.iterator()
        self.assertEqual(dgi.remaining(), 10)

        s = 'remaining unit test'
        dg.add_string32(s.encode('utf-8'))
        self.assertEqual(dgi.remaining(), 10 + 4 + len(s))

        self.assertEqual(dgi.get_uint16(), 25)
        self.assertEqual(dgi.remaining(), 8 + 4 + len(s))

        dgi.seek(dg.get_length())
        self.assertEqual(dgi.remaining(), 0)

        dgi.seek(0)
        self.assertEqual(dgi.remaining(), 10 + 4 + len(s))

        dgi.seek(14)
        self.assertEqual(dgi.remaining(), len(s))

        dgi.seek(999)
        self.assertEqual(dgi.remaining(), 0)
    def test_get(self):
        dg = Datagram()
        dg.add_uint16(25)
        dg.add_int64(-354843598374)
        dg.add_string32('datagram iterator test'.encode('utf-8'))

        dgi = dg.iterator()
        self.assertEqual(dgi.get_uint16(), 25)
        self.assertEqual(dgi.get_int64(), -354843598374)
        self.assertEqual(dgi.get_string32(), 'datagram iterator test')
Exemple #3
0
    def test_copy_datagram(self):
        dg = Datagram()
        dg.add_string32('testing copy'.encode('utf-8'))

        dg2 = dg.copy()

        self.assertEqual(dg.bytes(), dg2.bytes())

        dg.add_uint16(65200)

        self.assertNotEqual(dg.bytes(), dg2.bytes())

        data = dg2.bytes()
        del dg
        self.assertEqual(dg2.bytes(), data)
Exemple #4
0
    def test_overwrite(self):
        dg = Datagram()
        dg.add_uint32(2828)

        pos = dg.tell()
        self.assertEqual(pos, 4)

        dg.add_uint16(24)
        dg.add_int64(-352793)
        dg.seek(pos)
        dg.add_uint16(5000)
        dg.seek(len(dg))
        dg.add_string32(b'overwrite')

        dgi = dg.iterator()
        self.assertEqual(dgi.get_uint32(), 2828)
        self.assertEqual(dgi.get_uint16(), 5000)
        self.assertEqual(dgi.get_int64(), -352793)
        self.assertEqual(dgi.get_string32(), 'overwrite')
Exemple #5
0
    def test_add_data(self):
        s = 'hello_world'.encode('utf-8')

        dg = Datagram()
        dg.add_string16(s)
        other = struct.pack(f'<H{len(s)}b', len(s), *s)
        self.assertEqual(dg.bytes(), other)

        s = 'abcdefghijklmnop'.encode('utf-8')
        dg = Datagram()
        dg.add_string32(s)
        other = struct.pack(f'<I{len(s)}b', len(s), *s)
        self.assertEqual(dg.bytes(), other)

        dg.add_bytes(b'')
        self.assertEqual(dg.bytes(), other)

        dg = Datagram()
        dg.add_string16(b'')
        self.assertEqual(dg.bytes(), b'\x00\x00')

        dg = Datagram()

        random.seed('pydc')

        s = bytes(random.randint(0, 255) for _ in range((1 << 16)))

        with self.assertRaises(OverflowError):
            dg.add_string16(s)

        dg = Datagram()
        s = bytes(random.randint(0, 255) for _ in range((1 << 16)))
        dg.add_string32(s)
        s = b''.join((struct.pack('<I', len(s)), s))
        self.assertEqual(dg.bytes(), s)

        dg = Datagram()
        dg.add_string32(b'')
        self.assertEqual(dg.bytes(), struct.pack('<I', 0))

        dg = Datagram()
        c = chr(0x1F600).encode('utf-8')
        dg.add_bytes(c)
        self.assertEqual(dg.bytes(), c)