Example #1
0
def test_deferred_batch_production():
    """
    Deferred production waits until the end of a block and publishes all
    messages in one MessageBatchSchema

    """
    def loader(metadata):
        return dict(sns_topic_arns=dict(
            default="topic",
            mappings={
                MessageBatchSchema.MEDIA_TYPE: "batch-topic",
            },
        ))

    graph = create_object_graph("example", testing=True, loader=loader)
    graph.use("opaque")

    # set up response
    graph.sns_producer.sns_client.publish.return_value = dict(
        MessageId=MESSAGE_ID)

    with DeferredBatchProducer(graph.sns_producer) as producer:
        assert_that(producer.produce(DerivedSchema.MEDIA_TYPE, data="data"),
                    is_(none()))
        assert_that(producer.produce(DerivedSchema.MEDIA_TYPE, data="data2"),
                    is_(none()))
        assert_that(graph.sns_producer.sns_client.publish.call_count,
                    is_(equal_to(0)))

    assert_that(graph.sns_producer.sns_client.publish.call_count,
                is_(equal_to(1)))
Example #2
0
def test_increased_deferred_batch_production():
    """
    Deferred production caps the size of each batch of messages during the publish call

    """
    graph = create_object_graph("example", testing=True, loader=batch_loader)
    graph.use("opaque")

    # set up response
    graph.sns_producer.sns_client.publish.return_value = dict(
        MessageId=MESSAGE_ID)

    with DeferredBatchProducer(graph.sns_producer) as producer:
        for i in range(202):
            assert_that(
                producer.produce(DerivedSchema.MEDIA_TYPE, data=f"{i}"),
                is_(none()))
        assert_that(graph.sns_producer.sns_client.publish.call_count,
                    is_(equal_to(0)))

    assert_that(graph.sns_producer.sns_client.publish.call_count,
                is_(equal_to(3)))
    assert_that(
        loads(graph.sns_producer.sns_client.publish.call_args[1]["Message"])
        ["mediaType"],
        is_(
            equal_to(
                "application/vnd.globality.pubsub._.created.batch_message")),
    )
Example #3
0
def test_deferred_batch_production():
    """
    Deferred production waits until the end of a block and publishes all
    messages in one MessageBatchSchema

    """
    graph = create_object_graph("example", testing=True, loader=batch_loader)
    graph.use("opaque")

    # set up response
    graph.sns_producer.sns_client.publish.return_value = dict(
        MessageId=MESSAGE_ID)

    with DeferredBatchProducer(graph.sns_producer) as producer:
        assert_that(producer.produce(DerivedSchema.MEDIA_TYPE, data="data"),
                    is_(none()))
        assert_that(producer.produce(DerivedSchema.MEDIA_TYPE, data="data2"),
                    is_(none()))
        assert_that(graph.sns_producer.sns_client.publish.call_count,
                    is_(equal_to(0)))

    assert_that(graph.sns_producer.sns_client.publish.call_count,
                is_(equal_to(1)))
    assert_that(
        loads(graph.sns_producer.sns_client.publish.call_args[1]["Message"])
        ["mediaType"],
        is_(
            equal_to(
                "application/vnd.globality.pubsub._.created.batch_message")),
    )
def test_deferred_batch_with_no_message():
    graph = create_object_graph("example", testing=True, loader=batch_loader)
    graph.use("opaque")

    with DeferredBatchProducer(graph.sns_producer):
        pass

    assert_that(graph.sns_producer.sns_client.publish.call_count, is_(equal_to(0)))
def test_deferred_batch_with_single_message():
    graph = create_object_graph("example", testing=True, loader=batch_loader)
    graph.use("opaque")

    with DeferredBatchProducer(graph.sns_producer) as producer:
        assert_that(producer.produce(DerivedSchema.MEDIA_TYPE, data="data"), is_(none()))
        assert_that(graph.sns_producer.sns_client.publish.call_count, is_(equal_to(0)))

    assert_that(graph.sns_producer.sns_client.publish.call_count, is_(equal_to(1)))
    assert_that(
        loads(graph.sns_producer.sns_client.publish.call_args[1]["Message"])["mediaType"],
        is_(equal_to("application/vnd.microcosm.derived")),
    )