コード例 #1
0
def test_publish_after_batch_error():
    client = create_client()
    message = create_message()

    batch = client._batch_class(client, "topic_name",
                                types.BatchSettings(max_latency=float("inf")))
    batch._messages.append(
        mock.Mock(name="message"))  # Make batch truthy (non-empty).

    sequencer = unordered_sequencer.UnorderedSequencer(client, "topic_name")
    sequencer._set_batch(batch)

    with mock.patch.object(batch, "commit") as fake_batch_commit:
        sequencer.commit()

    fake_batch_commit.assert_called_once()

    # Simulate publish RPC failing.
    batch._set_status(base.BatchStatus.ERROR)

    # Will create a new batch since the old one has been committed. The fact
    # that the old batch errored should not matter in the publish of the next
    # message.
    future = sequencer.publish(message)
    assert future is not None
コード例 #2
0
def test_commit():
    client = create_client()
    batch = mock.Mock(spec=client._batch_class)

    sequencer = unordered_sequencer.UnorderedSequencer(client, "topic_name")
    sequencer._set_batch(batch)

    sequencer.commit()
    batch.commit.assert_called_once()
コード例 #3
0
def test_publish_custom_retry():
    client = create_client()
    message = create_message()
    sequencer = unordered_sequencer.UnorderedSequencer(client, "topic_name")

    sequencer.publish(message, retry=mock.sentinel.custom_retry)

    assert sequencer._current_batch is not None
    assert sequencer._current_batch._commit_retry is mock.sentinel.custom_retry
コード例 #4
0
def test_basic_publish():
    client = create_client()
    message = create_message()
    batch = mock.Mock(spec=client._batch_class)

    sequencer = unordered_sequencer.UnorderedSequencer(client, "topic_name")
    sequencer._set_batch(batch)

    sequencer.publish(message)
    batch.publish.assert_called_once_with(message)
コード例 #5
0
def test_publish_batch_full():
    client = create_client()
    message = create_message()
    batch = mock.Mock(spec=client._batch_class)
    # Make batch full.
    batch.publish.return_value = None

    sequencer = unordered_sequencer.UnorderedSequencer(client, "topic_name")
    sequencer._set_batch(batch)

    # Will create a new batch since the old one is full, and return a future.
    future = sequencer.publish(message)
    batch.publish.assert_called_once_with(message)
    assert future is not None
コード例 #6
0
    def _get_or_create_sequencer(self, topic, ordering_key):
        """ Get an existing sequencer or create a new one given the (topic,
            ordering_key) pair.
        """
        sequencer_key = (topic, ordering_key)
        sequencer = self._sequencers.get(sequencer_key)
        if sequencer is None:
            if ordering_key == "":
                sequencer = unordered_sequencer.UnorderedSequencer(self, topic)
            else:
                sequencer = ordered_sequencer.OrderedSequencer(
                    self, topic, ordering_key)
            self._sequencers[sequencer_key] = sequencer

        return sequencer
コード例 #7
0
def test_publish_after_batch_error():
    client = create_client()
    message = create_message()
    batch = mock.Mock(spec=client._batch_class)

    sequencer = unordered_sequencer.UnorderedSequencer(client, "topic_name")
    sequencer._set_batch(batch)

    sequencer.commit()
    batch.commit.assert_called_once()

    # Simulate publish RPC failing.
    batch._set_status(base.BatchStatus.ERROR)

    # Will create a new batch since the old one has been committed. The fact
    # that the old batch errored should not matter in the publish of the next
    # message.
    future = sequencer.publish(message)
    assert future is not None
コード例 #8
0
def test_stop():
    client = create_client()
    message = create_message()

    sequencer = unordered_sequencer.UnorderedSequencer(client, "topic_name")

    sequencer.publish(message)
    sequencer.stop()

    # Publish after stop() throws
    with pytest.raises(RuntimeError):
        sequencer.publish(message)

    # Commit after stop() throws
    with pytest.raises(RuntimeError):
        sequencer.commit()

    # Stop after stop() throws
    with pytest.raises(RuntimeError):
        sequencer.stop()
コード例 #9
0
def test_unpause():
    client = create_client()
    sequencer = unordered_sequencer.UnorderedSequencer(client, "topic_name")
    with pytest.raises(NotImplementedError):
        sequencer.unpause()
コード例 #10
0
def test_commit_no_batch():
    client = create_client()
    sequencer = unordered_sequencer.UnorderedSequencer(client, "topic_name")
    sequencer.commit()