def load_obj(cls, code, data): if code == EXT_NODE_ID: return nodeid.NodeID(data) elif code == EXT_BINDATA: width = int_from_bytes(data[:4], 'little') return BinData.from_raw_data(width, data[4:]) elif code == EXT_BIGINT: return bigint_decode(data) return msgpack.ExtType(code, data)
def test_from_raw_8(self): a = BinData.from_raw_data(8, b'\x01\x02\x03\x05\x08') self.assertEqual(a.width, 8) self.assertEqual(a.raw_data, b'\x01\x02\x03\x05\x08') self.assertEqual(a.octets_per_element(), 1) self.assertEqual(a.octets(), 5) self.assertEqual(len(a), 5) self.assertEqual(a[0], 1) self.assertEqual(a[4], 8) self.assertEqual(a[-1], 8) self.assertEqual(list(a), [1, 2, 3, 5, 8]) self.assertEqual(a, a[:]) self.assertEqual(str(a), '01 02 03 05 08') self.assertEqual(repr(a), 'BinData.from_spaced_hex(8, \'01 02 03 05 08\')')
def test_from_raw_crap(self): with self.assertRaises(TypeError): BinData.from_raw_data(9.0, b'\x12') with self.assertRaises(TypeError): BinData.from_raw_data(9, u'meh') with self.assertRaises(ValueError): BinData.from_raw_data(-8, b'\x12') with self.assertRaises(ValueError): BinData.from_raw_data(0, b'\x12') with self.assertRaises(ValueError): BinData.from_raw_data(9, b'\x12') BinData.from_raw_data(9, b'\x12\x01') with self.assertRaises(ValueError): BinData.from_raw_data(9, b'\x12\x02') BinData.from_raw_data(9, b'\xff\x01\xff\x01') with self.assertRaises(ValueError): BinData.from_raw_data(9, b'\xff\x02\xff\x01') with self.assertRaises(ValueError): BinData.from_raw_data(9, b'\xff\x01\xff\x02') with self.assertRaises(ValueError): BinData.from_raw_data(9, b'\xff\x01\xff\x80') BinData.from_raw_data(15, b'\xff\x7f\xff\x7f') with self.assertRaises(ValueError): BinData.from_raw_data(15, b'\xff\xff\xff\x7f') with self.assertRaises(ValueError): BinData.from_raw_data(15, b'\xff\x7f\xff\xff')