def read(btctxstore, msg): # not a valid message if base.read(btctxstore, msg) is None: return None # check token if msg[2] != "info": return None # check info given info = msg[3] if not isinstance(info, list): return None if len(info) != 3: return None version, storage, network = info # check version if not isinstance(version, str): return None if not re.match("^\d+\.\d+.\d+$", version): return None if not _validate_storage(storage): return None if not _validate_network(network): # TODO test it return None msg[3] = Info(version, Storage(*storage), Network(*network)) return base.Message(*msg)
def test_read_invalid_version_value(self): created = base.create(self.btctxstore, self.wif, None, None) # repack to eliminate namedtuples and simulate io repacked = umsgpack.unpackb(umsgpack.packb(created)) repacked[1] = -1 self.assertIsNone(base.read(self.btctxstore, repacked))
def test_read_invalid_signature(self): created = base.create(self.btctxstore, self.wif, None, None) # repack to eliminate namedtuples and simulate io repacked = umsgpack.unpackb(umsgpack.packb(created)) repacked[4] = "x" * 65 self.assertIsNone(base.read(self.btctxstore, repacked))
def test_read_invalid_nodeid_len(self): created = base.create(self.btctxstore, self.wif, None, None) # repack to eliminate namedtuples and simulate io repacked = umsgpack.unpackb(umsgpack.packb(created)) repacked[0] = "invalidnodeidlen" self.assertIsNone(base.read(self.btctxstore, repacked))
def test_create_read(self): # test create created = base.create(self.btctxstore, self.wif, "token", "body") # repack to eliminate namedtuples and simulate io repacked = umsgpack.unpackb(umsgpack.packb(created)) # test read read = base.read(self.btctxstore, repacked) self.assertIsNotNone(read) self.assertEqual(created, read)
def read(btctxstore, msg, name): # FIXME raise exception if > max package size # not a valid message msg = base.read(btctxstore, msg) if msg is None: return None # check token if msg.token != "signal": return None # check signal name if msg.body != name: return None return msg
def read(btctxstore, msg): # not a valid message if base.read(btctxstore, msg) is None: return None # check token if msg[2] != "info": return None # check info given info = msg[3] if not isinstance(info, list): return None if len(info) != 4: return None version, storage, network, plat = info # check version if not isinstance(version, six.string_types): return None if not re.match("^\d+\.\d+.\d+$", version): return None if not _validate_storage(storage): return None if not _validate_network(network): return None # validate platform if not isinstance(plat, list): return None if len(plat) != 4: return None if not all([isinstance(prop, six.string_types) for prop in plat]): return None msg[3] = Info(version, Storage(*storage), Network(*network), Platform(*plat)) return base.Message(*msg)
def read(btctxstore, msg): # not a valid message msg = base.read(btctxstore, msg) if msg is None: return None # correct token if msg.token != "peers": return None peers = msg.body # must be a byte array of concatenated peer ids if not isinstance(peers, bytes): return None # one peer every 20 bytes if len(peers) % 20 != 0: return None return msg
def test_read_invalid_message_len(self): self.assertIsNone(base.read(self.btctxstore, []))
def test_read_invalid_message_type(self): self.assertIsNone(base.read(self.btctxstore, None))