示例#1
0
    def test_sanity(self) -> None:
        with self.assertRaises(TypeError):
            serialize(1, Protocol.COMPACT)  # type: ignore

        with self.assertRaises(TypeError):
            serialize(easy(), None)  # type: ignore

        with self.assertRaises(TypeError):
            deserialize(Protocol, b"")  # type: ignore

        with self.assertRaises(TypeError):
            deserialize(easy, Protocol)  # type: ignore
示例#2
0
    def test_field_level_terse_write(self) -> None:
        obj = FieldLevelTerseStruct(
            bool_field=True,
            byte_field=1,
            short_field=2,
            int_field=3,
            long_field=4,
            float_field=5,
            double_field=6,
            string_field="7",
            binary_field=b"8",
            enum_field=MyEnum.ME1,
            list_field=[1],
            set_field={1},
            map_field={1: 1},
            struct_field=MyStruct(field1=1),
        )
        empty = EmptyStruct()
        for proto in Protocol:
            encoded = serialize(obj, protocol=proto)
            decoded, length = deserialize_with_length(type(obj),
                                                      encoded,
                                                      protocol=proto)
            self.assertIsInstance(decoded, type(obj))
            self.assertEqual(decoded, obj)
            self.assertEqual(length, len(encoded))

        # Set fields to their intrinsic default.
        obj = FieldLevelTerseStruct(
            bool_field=False,
            byte_field=0,
            short_field=0,
            int_field=0,
            long_field=0,
            float_field=0,
            double_field=0,
            string_field="",
            binary_field=b"",
            enum_field=MyEnum.ME0,
            list_field=[],
            set_field=set(),
            map_field={},
            struct_field=MyStruct(field1=0),
        )
        for proto in Protocol:
            encoded = serialize(obj, protocol=proto)
            encoded_empty = serialize(empty, protocol=proto)
            self.assertEqual(encoded, encoded_empty)
示例#3
0
    def test_flag_enum_serialization_roundtrip(self) -> None:
        x = File(name="/dev/null", type=Kind.CHAR, permissions=Perm.read | Perm.write)

        y = deserialize(File, serialize(x))
        self.assertEqual(x, y)
        self.assertEqual(x.permissions, Perm.read | Perm.write)
        self.assertIsInstance(x.permissions, Perm)
示例#4
0
 def thrift_serialization_round_robin(
         self, control: Struct, fixtures: Mapping[Protocol, bytes]) -> None:
     for proto in Protocol:
         encoded = serialize(control, protocol=proto)
         self.assertIsInstance(encoded, bytes)
         decoded = deserialize(type(control), encoded, protocol=proto)
         self.assertIsInstance(decoded, type(control))
         self.assertEqual(control, decoded)
         self.assertEqual((proto, encoded), (proto, fixtures.get(proto)))
示例#5
0
    def test_sanity(self) -> None:
        with self.assertRaises(TypeError):
            # pyre-fixme[6]: Expected `sT` for 1st param but got `int`.
            serialize(1, Protocol.COMPACT)

        with self.assertRaises(TypeError):
            # pyre-fixme[6]: Expected `Protocol` for 2nd param but got `None`.
            serialize(easy(), None)

        with self.assertRaises(TypeError):
            # pyre-fixme[6]: Expected `Type[Variable[thrift.py3.serializer.sT (bound
            #  to Struct)]]` for 1st param but got `Type[Protocol]`.
            deserialize(Protocol, b"")

        with self.assertRaises(TypeError):
            # pyre-fixme[6]: Expected `Union[bytearray, bytes, folly.iobuf.IOBuf,
            #  memoryview]` for 2nd param but got `Type[Protocol]`.
            deserialize(easy, Protocol)
示例#6
0
 def test_deserialize_with_length(self) -> None:
     control = easy(val=5, val_list=[1, 2, 3, 4, 5])
     for proto in Protocol:
         encoded = serialize(control, protocol=proto)
         decoded, length = deserialize_with_length(type(control),
                                                   encoded,
                                                   protocol=proto)
         self.assertIsInstance(decoded, type(control))
         self.assertEqual(decoded, control)
         self.assertEqual(length, len(encoded))
示例#7
0
 def test_terse_struct_with_custom_default(self) -> None:
     empty = EmptyStruct()
     for proto in Protocol:
         encoded_empty = serialize(empty, protocol=proto)
         decoded, length = deserialize_with_length(
             TerseStructWithCustomDefault, encoded_empty, protocol=proto)
         self.assertIsInstance(decoded, TerseStructWithCustomDefault)
         self.assertEqual(decoded.bool_field, False)
         self.assertEqual(decoded.byte_field, 0)
         self.assertEqual(decoded.short_field, 0)
         self.assertEqual(decoded.int_field, 0)
         self.assertEqual(decoded.long_field, 0)
         self.assertEqual(decoded.float_field, 0.0)
         self.assertEqual(decoded.double_field, 0.0)
         self.assertEqual(decoded.string_field, "")
         self.assertEqual(decoded.binary_field, b"")
         self.assertEqual(decoded.enum_field, MyEnum.ME0)
         self.assertEqual(decoded.list_field, [])
         self.assertEqual(decoded.set_field, set())
         self.assertEqual(decoded.map_field, {})
         self.assertEqual(decoded.struct_field,
                          MyStructWithCustomDefault(field1=0))
示例#8
0
 def test_None(self) -> None:
     with self.assertRaises(TypeError):
         serialize(None, Protocol.JSON)  # type: ignore
示例#9
0
 def test_None(self) -> None:
     with self.assertRaises(TypeError):
         # pyre-fixme[6]: Expected `sT` for 1st param but got `None`.
         serialize(None, Protocol.JSON)