def test_endianness(self): """ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | h.version | h.type | h.flags | <reserved> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ """ one = 1 one_little_endian = one.to_bytes(4, 'little') one_big_endian = one.to_bytes(4, 'big') # flag unset pdu_little_endian = PDUHeader.from_bytes(b'\x00\x00\x00\x00' + one_little_endian * 4) self.assertEqual(pdu_little_endian.session_id, 1) self.assertEqual(pdu_little_endian.transaction_id, 1) self.assertEqual(pdu_little_endian.packet_id, 1) self.assertEqual(pdu_little_endian.payload_length, 1) print(pdu_little_endian) nbo_set = struct.pack('!BBBB', 0, 0, 0 | PDUHeaderTags.MASK_NEWORK_BYTE_ORDER, 0) # network byte flag set pdu_big_endian = PDUHeader.from_bytes(nbo_set + one_big_endian * 4) self.assertEqual(pdu_big_endian.session_id, 1) self.assertEqual(pdu_big_endian.transaction_id, 1) self.assertEqual(pdu_big_endian.packet_id, 1) self.assertEqual(pdu_big_endian.payload_length, 1) print(pdu_big_endian)
def test_bad_unpack(self): with self.assertRaises(exceptions.PDUUnpackError): # missing IDs PDUHeader.from_bytes(b'\x00\x00\x00\x00') with self.assertRaises(exceptions.PDUUnpackError): # missing payload length PDUHeader.from_bytes(b'\x00\x00\x00\x00' * 3)