def test_missing_schema_test(client): topic = "dummy-topic" faust_serializer = FaustAvroSerializer(client, topic) dummy_model = DummyModel(foo="foo", bar="bar") with pytest.raises(MissingSchemaException) as e: faust_serializer.dumps(dummy_model.to_representation()) assert str( e.value ) == "Record does not have schema defined in '_schema' field", "_schema class variable should have schema"
def test_missing_metadata(client): topic = "dummy-topic" faust_serializer = FaustAvroSerializer(client, topic) dummy_model = DummyModel(foo="foo", bar="bar") with pytest.raises(ValueError) as e: dummy_dict = dummy_model.to_representation() del dummy_dict["__faust"] faust_serializer.dumps(dummy_dict) assert str( e.value ) == "Record does not have namespace metadata", "Namespace for serialization should be there"
def test_class_registry_not_exist(client): topic = "dummy-topic" faust_serializer = FaustAvroSerializer(client, topic) dummy_dict = { "first_name": "foo", "last_name": "bar", "__faust": { "ns": "DummyNoExistClass" } } with pytest.raises(ValueError) as e: faust_serializer.dumps(dummy_dict) assert str( e.value ) == "The class you are trying to deserialize doesn't exist inside the faust registry", "Faust registry should contain class"
def test_map_of_records(): result = { "__faust": { "ns": "tests.clean_payload_test.DummyRecord" }, "item": { "key1": { "__faust": { "ns": "tests.clean_payload_test.DummyRecord" }, "item": "test", }, "key2": { "__faust": { "ns": "tests.clean_payload_test.DummyRecord" }, "item": "test", }, }, } dummy = DummyRecord({ "key1": DummyRecord("test"), "key2": DummyRecord("test") }) assert result == FaustAvroSerializer.clean_payload(dummy)
def test_dumps_load_message(client): topic = "dummy-topic" faust_serializer = FaustAvroSerializer(client, topic) dummy_user = UserModel(first_name="foo", last_name="bar") dict_repr = dummy_user.to_representation() message_encoded = faust_serializer.dumps(dict_repr) assert message_encoded assert len(message_encoded) > 5 assert isinstance(message_encoded, bytes) message_decoded = faust_serializer.loads(message_encoded) assert message_decoded["first_name"] == dummy_user.first_name assert message_decoded["last_name"] == dummy_user.last_name
def test_simple_record(): result = { "__faust": { "ns": "tests.clean_payload_test.DummyRecord" }, "item": "test" } dummy = DummyRecord("test") assert result == FaustAvroSerializer.clean_payload(dummy)
def test_list_of_records(): result = { "__faust": { "ns": "tests.clean_payload_test.DummyRecord" }, "item": [ { "__faust": { "ns": "tests.clean_payload_test.DummyRecord" }, "item": "test" }, { "__faust": { "ns": "tests.clean_payload_test.DummyRecord" }, "item": "test" }, ], } dummy = DummyRecord([DummyRecord("test"), DummyRecord("test")]) assert result == FaustAvroSerializer.clean_payload(dummy)
def build_avro_serializer(output_topic: str, client: SchemaRegistryClient, is_key: bool = False): faust_avro_serializer = FaustAvroSerializer(client, output_topic, is_key) return faust_avro_serializer
def test_valid_schema(client): topic = "dummy-topic" faust_serializer = FaustAvroSerializer(client, topic) bad_schema_model = BadSchemaModel(first_name="foo", last_name="bar") with pytest.raises(Exception): faust_serializer.dumps(bad_schema_model.to_representation())
def create_avro_serde(self, topic: str, is_key: bool = False) -> CodecT: conf_streams = self._generate_streams_config() client = build_schema_registry_client(self.schema_registry_url, conf_streams) return FaustAvroSerializer(client, topic, is_key)