예제 #1
0
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"
예제 #2
0
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"
예제 #3
0
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"
예제 #4
0
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)
예제 #5
0
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
예제 #6
0
def test_simple_record():
    result = {
        "__faust": {
            "ns": "tests.clean_payload_test.DummyRecord"
        },
        "item": "test"
    }

    dummy = DummyRecord("test")
    assert result == FaustAvroSerializer.clean_payload(dummy)
예제 #7
0
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)
예제 #8
0
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
예제 #9
0
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())
예제 #10
0
 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)