def test_validate_enum(caplog): caplog.set_level(logging.INFO) # round-trip of a valid value msg = EnumMessageMoreValues(enum=0) buf = BytesIO() protobuf.dump_message(buf, msg) buf.seek(0) retr = protobuf.load_message(buf, EnumMessageLessValues) assert retr.enum == msg.enum assert not caplog.records # dumping an invalid enum value fails msg.enum = 19 buf.seek(0) protobuf.dump_message(buf, msg) assert len(caplog.records) == 1 record = caplog.records.pop(0) assert record.levelname == "INFO" assert record.getMessage() == "Value 19 unknown for type t" msg.enum = 3 buf.seek(0) protobuf.dump_message(buf, msg) buf.seek(0) protobuf.load_message(buf, EnumMessageLessValues) assert len(caplog.records) == 1 record = caplog.records.pop(0) assert record.levelname == "INFO" assert record.getMessage() == "Value 3 unknown for type t"
def test_repeated(): msg = RepeatedFields(uintlist=[1, 2, 3], enumlist=[0, 1, 0, 1], strlist=["hello", "world"]) buf = BytesIO() protobuf.dump_message(buf, msg) buf.seek(0) retr = protobuf.load_message(buf, RepeatedFields) assert retr == msg
def test_packed_enum(): values = [0, 0, 0, 0] packed_values = b"".join(dump_uvarint(v) for v in values) field_id = 2 << 3 | 2 # field number 2, wire type 2 field_len = len(packed_values) message_bytes = dump_uvarint(field_id) + dump_uvarint(field_len) + packed_values buf = BytesIO(message_bytes) msg = protobuf.load_message(buf, RepeatedFields) assert msg assert msg.enumlist == values assert not msg.uintlist assert not msg.strlist
def test_simple_message(): msg = PrimitiveMessage( uvarint=12345678910, svarint=-12345678910, bool=True, bytes=b"\xDE\xAD\xCA\xFE", unicode="Příliš žluťoučký kůň úpěl ďábelské ódy 😊", ) buf = BytesIO() protobuf.dump_message(buf, msg) buf.seek(0) retr = protobuf.load_message(buf, PrimitiveMessage) assert msg == retr assert retr.uvarint == 12345678910 assert retr.svarint == -12345678910 assert retr.bool is True assert retr.bytes == b"\xDE\xAD\xCA\xFE" assert retr.unicode == "Příliš žluťoučký kůň úpěl ďábelské ódy 😊"
def load_message(buffer, msg_type): reader = BytesIO(buffer) return protobuf.load_message(reader, msg_type)