def test_session_by_servicebus_client_iter_messages_with_retrieve_deferred_client(live_servicebus_config, session_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(session_queue)
    deferred_messages = []
    session_id = str(uuid.uuid4())
    with queue_client.get_sender(session=session_id) as sender:
        for i in range(10):
            message = Message("Deferred message no. {}".format(i))
            sender.send(message)

    session = queue_client.get_receiver(session=session_id, idle_timeout=5)
    count = 0
    for message in session:
        deferred_messages.append(message.sequence_number)
        print_message(message)
        count += 1
        message.defer()

    assert count == 10

    with pytest.raises(ValueError):
        deferred = queue_client.receive_deferred_messages(deferred_messages, session=session_id)

    with pytest.raises(ValueError):
        queue_client.settle_deferred_messages('completed', [message], session=session_id)
def sample_queue_send_receive_batch(sb_config, queue):

    client = ServiceBusClient(
        service_namespace=sb_config['hostname'],
        shared_access_key_name=sb_config['key_name'],
        shared_access_key_value=sb_config['access_key'],
        debug=True)

    queue_client = client.get_queue(queue)
    with queue_client.get_sender() as sender:
        for i in range(100):
            message = Message("Sample message no. {}".format(i))
            sender.send(message)

    with queue_client.get_receiver(idle_timeout=1, mode=ReceiveSettleMode.PeekLock, prefetch=10) as receiver:

        total = 0
        # Receive list of messages as a batch
        batch = receiver.fetch_next(max_batch_size=10)
        for message in batch:
            print("Message: {}".format(message))
            print("Sequence number: {}".format(message.sequence_number))
            message.complete()
            total += 1

        # Receive messages as a continuous generator
        for message in receiver:
            print("Message: {}".format(message))
            print("Sequence number: {}".format(message.sequence_number))
            message.complete()
            total += 1

    print("Received total {} messages".format(total))
def test_pqueue_message_time_to_live(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)
    import uuid
    queue_client = client.get_queue(partitioned_queue)
    
    with queue_client.get_sender() as sender:
        content = str(uuid.uuid4())
        message_id = uuid.uuid4()
        message = Message(content)
        message.time_to_live = timedelta(seconds=30)
        sender.send(message)

    time.sleep(30)
    with queue_client.get_receiver() as receiver:
        messages = receiver.fetch_next(timeout=10)
    assert not messages

    with queue_client.get_deadletter_receiver(idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:
        count = 0
        for message in receiver:
            print_message(message)
            message.complete()
            count += 1
        assert count == 1
def test_session_message_expiry(live_servicebus_config, session_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)
    session_id = str(uuid.uuid4())
    queue_client = client.get_queue(session_queue)
    
    with queue_client.get_sender() as sender:
        message = Message("Testing expired messages")
        message.session_id = session_id
        sender.send(message)

    with queue_client.get_receiver(session=session_id) as receiver:
        messages = receiver.fetch_next(timeout=10)
        assert len(messages) == 1
        print_message(messages[0])
        time.sleep(30)
        with pytest.raises(TypeError):
            messages[0].expired
        with pytest.raises(TypeError):
            messages[0].renew_lock()
        assert receiver.expired
        with pytest.raises(SessionLockExpired):
            messages[0].complete()
        with pytest.raises(SessionLockExpired):
            receiver.renew_lock()

    with queue_client.get_receiver(session=session_id) as receiver:
        messages = receiver.fetch_next(timeout=30)
        assert len(messages) == 1
        print_message(messages[0])
        #assert messages[0].header.delivery_count  # TODO confirm this with service
        messages[0].complete()
def test_session_by_servicebus_client_iter_messages_with_retrieve_deferred_receiver_complete(live_servicebus_config, session_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(session_queue)
    deferred_messages = []
    session_id = str(uuid.uuid4())
    messages = [Message("Deferred message no. {}".format(i)) for i in range(10)]
    results = queue_client.send(messages, session=session_id)
    assert all(result[0] for result in results)

    count = 0
    session = queue_client.get_receiver(session=session_id, idle_timeout=5)
    for message in session:
        deferred_messages.append(message.sequence_number)
        print_message(message)
        count += 1
        message.defer()

    assert count == 10

    with queue_client.get_receiver(session=session_id, idle_timeout=5) as session:
        deferred = session.receive_deferred_messages(deferred_messages)
        assert len(deferred) == 10
        for message in deferred:
            assert isinstance(message, DeferredMessage)
            assert message.lock_token
            assert not message.locked_until
            assert message._receiver
            with pytest.raises(TypeError):
                message.renew_lock()
            message.complete()
def test_pqueue_by_servicebus_client_fail_send_messages(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_queue)
    too_large = "A" * 1024 * 512
    try:
        results = queue_client.send(Message(too_large))
    except MessageSendFailed:
        pytest.skip("Open issue for uAMQP on OSX")

    assert len(results) == 1
    assert not results[0][0]
    assert isinstance(results[0][1], MessageSendFailed)

    with queue_client.get_sender() as sender:
        with pytest.raises(MessageSendFailed):
            sender.send(Message(too_large))

    with queue_client.get_sender() as sender:
        sender.queue_message(Message(too_large))
        results = sender.send_pending_messages()
        assert len(results) == 1
        assert not results[0][0]
        assert isinstance(results[0][1], MessageSendFailed)
def test_pqueue_message_lock_renew(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)
    import uuid
    queue_client = client.get_queue(partitioned_queue)
    
    with queue_client.get_sender() as sender:
        content = str(uuid.uuid4())
        message = Message(content)
        sender.send(message)

    with queue_client.get_receiver() as receiver:
        messages = receiver.fetch_next(timeout=10)
        assert len(messages) == 1
        time.sleep(15)
        messages[0].renew_lock()
        time.sleep(15)
        messages[0].renew_lock()
        time.sleep(15)
        assert not messages[0].expired
        messages[0].complete()

    with queue_client.get_receiver() as receiver:
        messages = receiver.fetch_next(timeout=10)
        assert len(messages) == 0
def test_pqueue_message_expiry(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)
    import uuid
    queue_client = client.get_queue(partitioned_queue)
    
    with queue_client.get_sender() as sender:
        content = str(uuid.uuid4())
        message = Message(content)
        sender.send(message)

    with queue_client.get_receiver() as receiver:
        messages = receiver.fetch_next(timeout=10)
        assert len(messages) == 1
        time.sleep(30)
        assert messages[0].expired
        with pytest.raises(MessageLockExpired):
            messages[0].complete()
        with pytest.raises(MessageLockExpired):
            messages[0].renew_lock()

    with queue_client.get_receiver() as receiver:
        messages = receiver.fetch_next(timeout=30)
        assert len(messages) == 1
        print_message(messages[0])
        assert messages[0].header.delivery_count > 0
        messages[0].complete()
def test_pqueue_by_servicebus_client_iter_messages_simple(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_queue)
    with queue_client.get_receiver(idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:

        with queue_client.get_sender() as sender:
            for i in range(10):
                message = Message("Iter message no. {}".format(i))
                sender.send(message)

        count = 0
        for message in receiver:
            print_message(message)
            message.complete()
            with pytest.raises(MessageAlreadySettled):
                message.complete()
            with pytest.raises(MessageAlreadySettled):
                message.renew_lock()
            count += 1

        with pytest.raises(InvalidHandlerState):
            next(receiver)
    assert count == 10
Esempio n. 10
0
def test_session_schedule_message(live_servicebus_config, session_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)
    import uuid
    session_id = str(uuid.uuid4())
    queue_client = client.get_queue(session_queue)
    enqueue_time = (datetime.now() + timedelta(minutes=2)).replace(microsecond=0)
    with queue_client.get_receiver(session=session_id) as receiver:
        with queue_client.get_sender(session=session_id) as sender:
            content = str(uuid.uuid4())
            message_id = uuid.uuid4()
            message = Message(content)
            message.properties.message_id = message_id
            message.schedule(enqueue_time)
            sender.send(message)

        messages = []
        count = 0
        while not messages and count < 12:
            messages = receiver.fetch_next(timeout=10)
            receiver.renew_lock()
            count += 1

        data = str(messages[0])
        assert data == content
        assert messages[0].properties.message_id == message_id
        assert messages[0].scheduled_enqueue_time == enqueue_time
        assert messages[0].scheduled_enqueue_time == messages[0].enqueued_time.replace(microsecond=0)
        assert len(messages) == 1
Esempio n. 11
0
def test_session_by_servicebus_client_list_sessions_with_client(live_servicebus_config, session_queue):

    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(session_queue)
    sessions = []
    start_time = datetime.now()
    for i in range(5):
        sessions.append(str(uuid.uuid4()))

    for session in sessions:
        with queue_client.get_sender(session=session) as sender:
            for i in range(5):
                message = Message("Test message no. {}".format(i))
                sender.send(message)
    for session in sessions:
        with queue_client.get_receiver(session=session) as receiver:
            receiver.set_session_state("SESSION {}".format(session))

    current_sessions = queue_client.list_sessions(updated_since=start_time)
    assert len(current_sessions) == 5
    assert current_sessions == sessions
def test_pqueue_by_servicebus_client_iter_messages_with_retrieve_deferred_receiver_deletemode(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_queue)
    deferred_messages = []
    messages = [Message("Deferred message no. {}".format(i)) for i in range(10)]
    for m in messages:
        m.partition_key = "MyPartitionKey"
    results = queue_client.send(messages)
    assert all(result[0] for result in results)

    count = 0
    receiver = queue_client.get_receiver(idle_timeout=5)
    for message in receiver:
        deferred_messages.append(message.sequence_number)
        print_message(message)
        count += 1
        message.defer()

    assert count == 10
    with queue_client.get_receiver(idle_timeout=5) as receiver:
        deferred = receiver.receive_deferred_messages(deferred_messages, mode=ReceiveSettleMode.ReceiveAndDelete)
        assert len(deferred) == 10
        for message in deferred:
            assert isinstance(message, DeferredMessage)
            with pytest.raises(MessageAlreadySettled):
                message.complete()
        with pytest.raises(ServiceBusError):
            deferred = receiver.receive_deferred_messages(deferred_messages)
def test_pqueue_schedule_message(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)
    import uuid
    queue_client = client.get_queue(partitioned_queue)
    enqueue_time = (datetime.now() + timedelta(minutes=2)).replace(microsecond=0)
    with queue_client.get_receiver() as receiver:
        with queue_client.get_sender() as sender:
            content = str(uuid.uuid4())
            message_id = uuid.uuid4()
            message = Message(content)
            message.properties.message_id = message_id
            message.schedule(enqueue_time)
            sender.send(message)

        messages = receiver.fetch_next(timeout=120)
        if messages:
            try:
                data = str(messages[0])
                assert data == content
                assert messages[0].properties.message_id == message_id
                assert messages[0].scheduled_enqueue_time == enqueue_time
                assert messages[0].scheduled_enqueue_time == messages[0].enqueued_time.replace(microsecond=0)
                assert len(messages) == 1
            finally:
                for m in messages:
                    m.complete()
        else:
            raise Exception("Failed to receive schdeduled message.")
def test_pqueue_by_servicebus_client_iter_messages_with_defer(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_queue)
    deferred_messages = []
    with queue_client.get_receiver(idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:

        with queue_client.get_sender() as sender:
            for i in range(10):
                message = Message("Deferred message no. {}".format(i))
                sender.send(message)

        count = 0
        for message in receiver:
            deferred_messages.append(message.sequence_number)
            print_message(message)
            count += 1
            message.defer()

    assert count == 10
    with queue_client.get_receiver(idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:
        count = 0
        for message in receiver:
            print_message(message)
            message.complete()
            count += 1
    assert count == 0
def test_pqueue_cancel_scheduled_messages(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_queue)
    enqueue_time = (datetime.now() + timedelta(minutes=2)).replace(microsecond=0)
    with queue_client.get_receiver() as receiver:
        with queue_client.get_sender() as sender:
            message_a = Message("Test scheduled message")
            message_b = Message("Test scheduled message")
            tokens = sender.schedule(enqueue_time, message_a, message_b)
            assert len(tokens) == 2

            sender.cancel_scheduled_messages(*tokens)

        messages = receiver.fetch_next(timeout=120)
        try:
            assert len(messages) == 0
        except AssertionError:
            for m in messages:
                print(str(m))
                m.complete()
            raise
Esempio n. 16
0
def test_queue_by_servicebus_client_renew_message_locks(live_servicebus_config, standard_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(standard_queue)
    messages = []
    locks = 3
    with queue_client.get_receiver(idle_timeout=5, mode=ReceiveSettleMode.PeekLock, prefetch=10) as receiver:
        with queue_client.get_sender() as sender:
            for i in range(locks):
                message = Message("Test message no. {}".format(i))
                sender.send(message)

        messages.extend(receiver.fetch_next())
        recv = True
        while recv:
            recv = receiver.fetch_next()
            messages.extend(recv)

        try:
            assert not message.expired
            for m in messages:
                time.sleep(5)
                initial_expiry = m.locked_until
                m.renew_lock()
                assert (m.locked_until - initial_expiry) >= timedelta(seconds=5)
        finally:
            messages[0].complete()
            messages[1].complete()
            time.sleep(30)
            with pytest.raises(MessageLockExpired):
                messages[2].complete()
Esempio n. 17
0
def test_queue_by_servicebus_client_iter_messages_with_retrieve_deferred_receiver_complete(live_servicebus_config, standard_queue):

    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(standard_queue)
    deferred_messages = []
    messages = [Message("Deferred message no. {}".format(i)) for i in range(10)]
    results = queue_client.send(messages, session="test_session")
    assert all(result[0] for result in results)

    with queue_client.get_receiver(idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:
        count = 0
        for message in receiver:
            deferred_messages.append(message.sequence_number)
            print_message(message)
            count += 1
            message.defer()

    assert count == 10

    with queue_client.get_receiver(idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:
        deferred = receiver.receive_deferred_messages(deferred_messages)
        assert len(deferred) == 10
        for message in deferred:
            assert isinstance(message, DeferredMessage)
            assert message.lock_token
            assert message.locked_until
            assert message._receiver
            message.renew_lock()
            message.complete()
def sample_session_send_receive_with_pool(sb_config, queue):

    concurrent_receivers = 5
    sessions = [str(uuid.uuid4()) for i in range(2 * concurrent_receivers)]
    client = ServiceBusClient(
        service_namespace=sb_config['hostname'],
        shared_access_key_name=sb_config['key_name'],
        shared_access_key_value=sb_config['access_key'],
        debug=True)

    queue_client = client.get_queue(queue)
    for session_id in sessions:
        with queue_client.get_sender(session=session_id) as sender:
            for i in range(20):
                message = Message("Sample message no. {}".format(i))
                sender.send(message)

    all_messages = []
    futures = []
    with concurrent.futures.ThreadPoolExecutor(max_workers=concurrent_receivers) as thread_pool:
        for _ in range(concurrent_receivers):
            futures.append(thread_pool.submit(message_processing, queue_client, all_messages))
        concurrent.futures.wait(futures)

    print("Received total {} messages across {} sessions.".format(len(all_messages), 2*concurrent_receivers))
def test_pqueue_by_servicebus_client_iter_messages_with_retrieve_deferred_not_found(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_queue)
    deferred_messages = []
    with queue_client.get_receiver(idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:

        with queue_client.get_sender() as sender:
            for i in range(3):
                message = Message("Deferred message no. {}".format(i))
                message.partition_key = "MyPartitionKey"
                sender.send(message)

        count = 0
        for message in receiver:
            deferred_messages.append(message.sequence_number)
            print_message(message)
            count += 1
            message.defer()

    assert count == 3

    with pytest.raises(ServiceBusError):
        deferred = queue_client.receive_deferred_messages([3, 4], mode=ReceiveSettleMode.PeekLock)

    with pytest.raises(ServiceBusError):
        deferred = queue_client.receive_deferred_messages([5, 6, 7], mode=ReceiveSettleMode.PeekLock)
def test_pqueue_message_batch(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)
    queue_client = client.get_queue(partitioned_queue)
    
    def message_content():
        for i in range(5):
            yield "Message no. {}".format(i)


    with queue_client.get_sender() as sender:
        message = BatchMessage(message_content())
        sender.send(message)

    with queue_client.get_receiver() as receiver:
        messages =receiver.fetch_next(timeout=10)
        recv = True
        while recv:
            recv = receiver.fetch_next(timeout=10)
            messages.extend(recv)

        assert len(messages) == 5
        for m in messages:
            print_message(m)
            m.complete()
def test_qsession_by_servicebus_client_browse_messages_client(live_servicebus_config, partitioned_session_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_session_queue)
    session_id = str(uuid.uuid4())
    with queue_client.get_sender(session=session_id) as sender:
        for i in range(5):
            message = Message("Test message no. {}".format(i))
            message.partition_key = "MyPartitionKey"
            sender.send(message)

    with pytest.raises(ValueError):
        messages = queue_client.peek(5)

    messages = queue_client.peek(5, session=session_id)
    assert len(messages) == 5
    assert all(isinstance(m, PeekMessage) for m in messages)
    for message in messages:
        print_message(message)
        with pytest.raises(TypeError):
            message.complete()
def test_pqueue_message_receive_and_delete(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)
    queue_client = client.get_queue(partitioned_queue)
    
    with queue_client.get_sender() as sender:
        message = Message("Receive and delete test")
        sender.send(message)

    with queue_client.get_receiver(mode=ReceiveSettleMode.ReceiveAndDelete) as receiver:
        messages = receiver.fetch_next(timeout=10)
        assert len(messages) == 1
        received = messages[0]
        print_message(received)
        with pytest.raises(MessageAlreadySettled):
            received.complete()
        with pytest.raises(MessageAlreadySettled):
            received.abandon()
        with pytest.raises(MessageAlreadySettled):
            received.defer()
        with pytest.raises(MessageAlreadySettled):
            received.dead_letter()
        with pytest.raises(MessageAlreadySettled):
            received.renew_lock()

    time.sleep(30)

    with queue_client.get_receiver() as receiver:
        messages = receiver.fetch_next(timeout=10)
        for m in messages:
            print_message(m)
        assert len(messages) == 0
Esempio n. 23
0
def test_session_cancel_scheduled_messages(live_servicebus_config, session_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    session_id = str(uuid.uuid4())
    queue_client = client.get_queue(session_queue)
    enqueue_time = (datetime.now() + timedelta(minutes=2)).replace(microsecond=0)

    with queue_client.get_sender(session=session_id) as sender:
        message_a = Message("Test scheduled message")
        message_b = Message("Test scheduled message")
        tokens = sender.schedule(enqueue_time, message_a, message_b)
        assert len(tokens) == 2
        sender.cancel_scheduled_messages(*tokens)

    with queue_client.get_receiver(session=session_id) as receiver:
        messages = []
        count = 0
        while not messages and count < 13:
            messages = receiver.fetch_next(timeout=10)
            receiver.renew_lock()
            count += 1
        assert len(messages) == 0
def test_pqueue_by_servicebus_client_fail_send_batch_messages(live_servicebus_config, partitioned_queue):
    pytest.skip("TODO: Pending bugfix in uAMQP")
    def batch_data():
        for i in range(3):
            yield str(i) * 1024 * 256

    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_queue)
    results = queue_client.send(BatchMessage(batch_data()))
    assert len(results) == 4
    assert not results[0][0]
    assert isinstance(results[0][1], MessageSendFailed)

    with queue_client.get_sender() as sender:
        with pytest.raises(MessageSendFailed):
            sender.send(BatchMessage(batch_data()))

    with queue_client.get_sender() as sender:
        sender.queue_message(BatchMessage(batch_data()))
        results = sender.send_pending_messages()
        assert len(results) == 4
        assert not results[0][0]
        assert isinstance(results[0][1], MessageSendFailed)
def test_pqueue_by_servicebus_client_receive_batch_with_deadletter(live_servicebus_config, partitioned_queue):

    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_queue)
    with queue_client.get_receiver(idle_timeout=5, mode=ReceiveSettleMode.PeekLock, prefetch=10) as receiver:

        with queue_client.get_sender() as sender:
            for i in range(10):
                message = Message("Dead lettered message no. {}".format(i))
                sender.send(message)

        count = 0
        messages = receiver.fetch_next()
        while messages:
            for message in messages:
                print_message(message)
                count += 1
                message.dead_letter(description="Testing")
            messages = receiver.fetch_next()

    assert count == 10

    with queue_client.get_receiver(idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:
        count = 0
        for message in receiver:
            print_message(message)
            message.complete()
            count += 1
    assert count == 0
Esempio n. 26
0
def test_sb_client_bad_credentials(live_servicebus_config, standard_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name="invalid",
        shared_access_key_value="invalid",
        debug=True)

    with pytest.raises(AzureHttpError):
        client.get_queue(standard_queue)
def test_pqueue_by_servicebus_client_browse_empty_messages(live_servicebus_config, partitioned_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_queue)
    with queue_client.get_receiver(idle_timeout=5, mode=ReceiveSettleMode.PeekLock, prefetch=10) as receiver:
        messages = receiver.peek(10)
        assert len(messages) == 0
Esempio n. 28
0
def test_topic_by_servicebus_client_list_topics(live_servicebus_config, standard_topic):

    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    topics = client.list_topics()
    assert len(topics) >= 1
    assert all(isinstance(t, TopicClient) for t in topics)
Esempio n. 29
0
def test_sb_client_bad_namespace(live_servicebus_config):
    
    
    client = ServiceBusClient(
        service_namespace="invalid",
        shared_access_key_name="invalid",
        shared_access_key_value="invalid",
        debug=True)

    with pytest.raises(ServiceBusConnectionError):
        client.get_queue("testq")
Esempio n. 30
0
def test_sb_client_entity_conflict(live_servicebus_config, standard_queue):

    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    with pytest.raises(AzureConflictHttpError):
        client.create_queue(standard_queue)

    with pytest.raises(AzureConflictHttpError):
        client.create_queue(standard_queue, lock_duration=300)
Esempio n. 31
0
def send_message_to_queue(payload):
    servicebus_client = ServiceBusClient.from_connection_string(
        conn_str=EQUINIX_INCOMING_QUEUE_CONNECTION_STRING, logging_enable=True)
    with servicebus_client:
        sender = servicebus_client.get_topic_sender(
            topic_name=EQUINIX_INCOMING_QUEUE)
        with sender:
            message = ServiceBusMessage(payload)
            sender.send_messages(message)
Esempio n. 32
0
def create_recieve_queue(auth_uid: str, conn_string: str):
    sbc = ServiceBusClient.from_connection_string(conn_string)
    try:
        sbc.create_queue(auth_uid)
    except AzureConflictHttpError:
        pass
    except Exception:
        logging.error("cannot create queue")
        sys.exit(1)
    def test_subscription_by_servicebus_client_receive_batch_with_deadletter(self, servicebus_namespace_connection_string, servicebus_topic, servicebus_subscription, **kwargs):

        with ServiceBusClient.from_connection_string(
                servicebus_namespace_connection_string,
                logging_enable=False
        ) as sb_client:

            with sb_client.get_subscription_receiver(
                topic_name=servicebus_topic.name,
                subscription_name=servicebus_subscription.name,
                idle_timeout=5,
                mode=ReceiveSettleMode.PeekLock,
                prefetch=10
            ) as receiver:

                with sb_client.get_topic_sender(servicebus_topic.name) as sender:
                    for i in range(10):
                        message = Message("Dead lettered message no. {}".format(i))
                        sender.send(message)

                count = 0
                messages = receiver.receive()
                while messages:
                    for message in messages:
                        print_message(_logger, message)
                        count += 1
                        message.dead_letter(reason="Testing reason", description="Testing description")
                    messages = receiver.receive()

            assert count == 10

            with sb_client.get_subscription_receiver(
                topic_name=servicebus_topic.name,
                subscription_name=servicebus_subscription.name,
                idle_timeout=5,
                mode=ReceiveSettleMode.PeekLock
            ) as receiver:
                count = 0
                for message in receiver:
                    print_message(_logger, message)
                    message.complete()
                    count += 1
            assert count == 0

            with sb_client.get_subscription_deadletter_receiver(
                topic_name=servicebus_topic.name,
                subscription_name=servicebus_subscription.name,
                idle_timeout=5,
                mode=ReceiveSettleMode.PeekLock
            ) as dl_receiver:
                count = 0
                for message in dl_receiver:
                    message.complete()
                    count += 1
                    assert message.user_properties[b'DeadLetterReason'] == b'Testing reason'
                    assert message.user_properties[b'DeadLetterErrorDescription'] == b'Testing description'
                assert count == 10
Esempio n. 34
0
    def test_session_schedule_multiple_messages(
            self, servicebus_namespace, servicebus_namespace_key_name,
            servicebus_namespace_primary_key, servicebus_queue, **kwargs):

        client = ServiceBusClient(
            service_namespace=servicebus_namespace.name,
            shared_access_key_name=servicebus_namespace_key_name,
            shared_access_key_value=servicebus_namespace_primary_key,
            debug=False)
        import uuid
        session_id = str(uuid.uuid4())
        queue_client = client.get_queue(servicebus_queue.name)
        enqueue_time = (datetime.utcnow() +
                        timedelta(minutes=2)).replace(microsecond=0)

        with queue_client.get_receiver(session=session_id,
                                       prefetch=20) as receiver:
            with queue_client.get_sender(session=session_id) as sender:
                content = str(uuid.uuid4())
                message_id_a = uuid.uuid4()
                message_a = Message(content)
                message_a.properties.message_id = message_id_a
                message_id_b = uuid.uuid4()
                message_b = Message(content)
                message_b.properties.message_id = message_id_b
                tokens = sender.schedule(enqueue_time, message_a, message_b)
                assert len(tokens) == 2

            messages = []
            count = 0
            while len(messages) < 2 and count < 12:
                receiver.renew_lock()
                messages = receiver.fetch_next(timeout=15)
                time.sleep(5)
                count += 1

            data = str(messages[0])
            assert data == content
            assert messages[0].properties.message_id in (message_id_a,
                                                         message_id_b)
            assert messages[0].scheduled_enqueue_time == enqueue_time
            assert messages[0].scheduled_enqueue_time == messages[
                0].enqueued_time.replace(microsecond=0)
            assert len(messages) == 2
Esempio n. 35
0
def test_queue_by_servicebus_client_iter_messages_with_retrieve_deferred_receiver_deadletter(
        live_servicebus_config, standard_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=False)

    queue_client = client.get_queue(standard_queue)
    deferred_messages = []
    messages = [
        Message("Deferred message no. {}".format(i)) for i in range(10)
    ]
    results = queue_client.send(messages)
    assert all(result[0] for result in results)

    with queue_client.get_receiver(
            idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:
        count = 0
        for message in receiver:
            deferred_messages.append(message.sequence_number)
            print_message(message)
            count += 1
            message.defer()

    assert count == 10

    with queue_client.get_receiver(idle_timeout=5) as session:
        deferred = session.receive_deferred_messages(deferred_messages)
        assert len(deferred) == 10
        for message in deferred:
            assert isinstance(message, DeferredMessage)
            message.dead_letter("something")

    count = 0
    with queue_client.get_deadletter_receiver(idle_timeout=5) as receiver:
        for message in receiver:
            count += 1
            print_message(message)
            assert message.user_properties[b'DeadLetterReason'] == b'something'
            assert message.user_properties[
                b'DeadLetterErrorDescription'] == b'something'
            message.complete()
    assert count == 10
def test_pqueue_by_servicebus_client_iter_messages_with_retrieve_deferred_client(
        live_servicebus_config, partitioned_queue):

    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=False)

    queue_client = client.get_queue(partitioned_queue)
    deferred_messages = []
    with queue_client.get_receiver(
            idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:

        with queue_client.get_sender() as sender:
            for i in range(10):
                message = Message("Deferred message no. {}".format(i))
                message.partition_key = "MyPartitionKey"
                sender.send(message)

        count = 0
        for message in receiver:
            deferred_messages.append(message.sequence_number)
            print_message(message)
            count += 1
            message.defer()

    assert count == 10

    deferred = queue_client.receive_deferred_messages(
        deferred_messages, mode=ReceiveSettleMode.PeekLock)
    assert len(deferred) == 10

    for message in deferred:
        assert isinstance(message, DeferredMessage)
        with pytest.raises(ValueError):
            message.complete()

    with pytest.raises(ValueError):
        queue_client.settle_deferred_messages('foo', message)
    queue_client.settle_deferred_messages('completed', message)

    with pytest.raises(ServiceBusError):
        queue_client.receive_deferred_messages(deferred_messages)
def example_session_ops_sync():
    servicebus_connection_str = os.environ['SERVICE_BUS_CONNECTION_STR']
    queue_name = os.environ['SERVICE_BUS_SESSION_QUEUE_NAME']
    session_id = "<your session id>"

    with ServiceBusClient.from_connection_string(
            conn_str=servicebus_connection_str) as servicebus_client:

        with servicebus_client.get_queue_sender(
                queue_name=queue_name) as sender:
            sender.send_messages(
                ServiceBusMessage('msg', session_id=session_id))

        # [START get_session_sync]
        with servicebus_client.get_queue_receiver(
                queue_name=queue_name, session_id=session_id) as receiver:
            session = receiver.session
        # [END get_session_sync]

        # [START get_session_state_sync]
        with servicebus_client.get_queue_receiver(
                queue_name=queue_name, session_id=session_id) as receiver:
            session = receiver.session
            session_state = session.get_state()
        # [END get_session_state_sync]

        # [START set_session_state_sync]
        with servicebus_client.get_queue_receiver(
                queue_name=queue_name, session_id=session_id) as receiver:
            session = receiver.session
            session.set_state("START")
        # [END set_session_state_sync]

        # [START session_renew_lock_sync]
        with servicebus_client.get_queue_receiver(
                queue_name=queue_name, session_id=session_id) as receiver:
            session = receiver.session
            session.renew_lock()
        # [END session_renew_lock_sync]

        # [START auto_lock_renew_session_sync]
        from azure.servicebus import AutoLockRenewer

        lock_renewal = AutoLockRenewer(max_workers=4)
        with servicebus_client.get_queue_receiver(
                queue_name=queue_name, session_id=session_id) as receiver:
            session = receiver.session
            # Auto renew session lock for 2 minutes
            lock_renewal.register(receiver,
                                  session,
                                  max_lock_renewal_duration=120)
            for message in receiver:
                process_message(message)
                receiver.complete_message(message)
                # [END auto_lock_renew_session_sync]
                break
    def test_sb_client_readonly_credentials(self, servicebus_authorization_rule_connection_string, servicebus_queue, **kwargs):
        client = ServiceBusClient.from_connection_string(servicebus_authorization_rule_connection_string)

        with client:
            with client.get_queue_receiver(servicebus_queue.name) as receiver:
                messages = receiver.receive_messages(max_batch_size=1, max_wait_time=1)

            with pytest.raises(ServiceBusError): 
                with client.get_queue_sender(servicebus_queue.name) as sender:
                    sender.send_messages(Message("test"))
Esempio n. 39
0
    def test_sb_client_bad_entity(self, servicebus_namespace_connection_string,
                                  **kwargs):

        client = ServiceBusClient.from_connection_string(
            servicebus_namespace_connection_string)

        with client:
            with pytest.raises(ServiceBusConnectionError):
                with client.get_queue_sender("invalid") as sender:
                    sender.send_messages(Message("test"))
Esempio n. 40
0
    def test_sb_client_incorrect_queue_conn_str(
            self, servicebus_queue_authorization_rule_connection_string,
            wrong_queue, **kwargs):

        client = ServiceBusClient.from_connection_string(
            servicebus_queue_authorization_rule_connection_string)
        with client:
            with pytest.raises(ServiceBusError):
                with client.get_queue_sender(wrong_queue.name) as sender:
                    sender.send_messages(Message("test"))
Esempio n. 41
0
def message_send_process(sb_config, queue, endtime):
    def message_batch():
        for i in range(5):
            yield "Stress Test message no. {}".format(i)

    client = ServiceBusClient(service_namespace=sb_config['hostname'],
                              shared_access_key_name=sb_config['key_name'],
                              shared_access_key_value=sb_config['access_key'],
                              debug=True)

    total = 0
    queue_client = client.get_queue(queue)
    with queue_client.get_sender() as sender:
        while endtime > datetime.now():
            message = BatchMessage(message_batch())
            sender.send(message)
            total += 5
            time.sleep(0.01)
    return total
Esempio n. 42
0
    def test_topic_by_servicebus_client_conn_str_send_basic(
            self, servicebus_namespace_connection_string, servicebus_topic,
            **kwargs):

        with ServiceBusClient.from_connection_string(
                servicebus_namespace_connection_string,
                logging_enable=False) as sb_client:
            with sb_client.get_topic_sender(servicebus_topic.name) as sender:
                message = Message(b"Sample topic message")
                sender.send_messages(message)
def test_qsession_by_servicebus_client_iter_messages_with_retrieve_deferred_receiver_deadletter(live_servicebus_config, partitioned_session_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_session_queue)
    deferred_messages = []
    session_id = str(uuid.uuid4())
    messages = [Message("Deferred message no. {}".format(i)) for i in range(10)]
    for m in messages:
        m.partition_key = "MyPartitionKey"
    results = queue_client.send(messages, session=session_id)
    assert all(result[0] for result in results)

    count = 0
    session = queue_client.get_receiver(session=session_id, idle_timeout=5)
    for message in session:
        deferred_messages.append(message.sequence_number)
        print_message(message)
        count += 1
        message.defer()

    assert count == 10

    with queue_client.get_receiver(session=session_id, idle_timeout=5) as session:
        deferred = session.receive_deferred_messages(deferred_messages)
        assert len(deferred) == 10
        for message in deferred:
            assert isinstance(message, DeferredMessage)
            message.dead_letter("something")
    
    count = 0
    with queue_client.get_deadletter_receiver(idle_timeout=5) as receiver:
        for message in receiver:
            count += 1
            print_message(message)
            assert message.user_properties[b'DeadLetterReason'] == b'something'
            assert message.user_properties[b'DeadLetterErrorDescription'] == b'something'
            message.complete()
    assert count == 10
def test_qsession_by_servicebus_client_renew_client_locks(
        live_servicebus_config, partitioned_session_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_session_queue)
    session_id = str(uuid.uuid4())
    messages = []
    locks = 3
    with queue_client.get_receiver(session=session_id,
                                   prefetch=10) as receiver:
        with queue_client.get_sender(session=session_id) as sender:
            for i in range(locks):
                message = Message("Test message no. {}".format(i))
                sender.send(message)

        messages.extend(receiver.fetch_next())
        recv = True
        while recv:
            recv = receiver.fetch_next(timeout=5)
            messages.extend(recv)

        try:
            for m in messages:
                with pytest.raises(TypeError):
                    expired = m.expired
                assert m.locked_until is None
                assert m.lock_token is None
            time.sleep(5)
            initial_expiry = receiver.locked_until
            receiver.renew_lock()
            assert (receiver.locked_until -
                    initial_expiry) >= timedelta(seconds=5)
        finally:
            messages[0].complete()
            messages[1].complete()
            time.sleep(30)
            with pytest.raises(SessionLockExpired):
                messages[2].complete()
def test_qsession_by_servicebus_client_session_pool(live_servicebus_config, partitioned_session_queue):
    messages = []
    errors = []
    concurrent_receivers = 5

    def message_processing(queue_client):
        while True:
            try:
                with queue_client.get_receiver(session=NEXT_AVAILABLE, idle_timeout=5) as session:
                    for message in session:
                        print("Message: {}".format(message))
                        messages.append(message)
                        message.complete()
            except NoActiveSession:
                return
            except Exception as e:
                errors.append(e)
                raise

    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_session_queue)
    sessions = [str(uuid.uuid4()) for i in range(concurrent_receivers)]

    for session in sessions:
        with queue_client.get_sender(session=session) as sender:
            for i in range(20):
                message = Message("Test message no. {}".format(i))
                sender.send(message)

    futures = []
    with concurrent.futures.ThreadPoolExecutor(max_workers=concurrent_receivers) as thread_pool:
        for _ in range(concurrent_receivers):
            futures.append(thread_pool.submit(message_processing, queue_client))
        concurrent.futures.wait(futures)

    assert not errors
    assert len(messages) == 100
def test_sb_client_readonly_credentials(servicebus_conn_str_readonly, standard_queue):
    client = ServiceBusClient.from_connection_string(servicebus_conn_str_readonly, debug=False)
    with pytest.raises(AzureHttpError):
        client.get_queue(standard_queue)

    client = QueueClient.from_connection_string(servicebus_conn_str_readonly, name=standard_queue)
    with client.get_receiver(idle_timeout=5) as receiver:
        messages = receiver.fetch_next()

    with pytest.raises(ServiceBusAuthorizationError):
        client.send(Message("test"))
 def test_session_by_session_client_conn_str_receive_handler_with_no_session(
         self, servicebus_namespace_connection_string, servicebus_queue,
         **kwargs):
     with ServiceBusClient.from_connection_string(
             servicebus_namespace_connection_string,
             logging_enable=False) as sb_client:
         with pytest.raises(NoActiveSession):
             with sb_client.get_queue_receiver(servicebus_queue.name,
                                               session_id=NEXT_AVAILABLE,
                                               idle_timeout=5) as session:
                 session.open()
Esempio n. 48
0
def message_receive_process(sb_config, queue, endtime):
    client = ServiceBusClient(service_namespace=sb_config['hostname'],
                              shared_access_key_name=sb_config['key_name'],
                              shared_access_key_value=sb_config['access_key'],
                              debug=True)

    queue_client = client.get_queue(queue)
    with queue_client.get_receiver(
            mode=ReceiveSettleMode.PeekLock) as receiver:
        total = 0
        batch = receiver.fetch_next()
        while batch:
            for message in batch:
                message.complete()
                total += 1
                if endtime <= datetime.now():
                    break
            batch = receiver.fetch_next()

    return total
def test_sb_client_entity_delete(live_servicebus_config, standard_queue):

    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    with pytest.raises(ServiceBusResourceNotFound):
        client.delete_queue("invalid", fail_not_exist=True)

    client.delete_queue("invalid", fail_not_exist=False)
    client.delete_queue(standard_queue)
Esempio n. 50
0
def message_receive_process(sb_config, queue, endtime):
    client = ServiceBusClient(service_namespace=sb_config['hostname'],
                              shared_access_key_name=sb_config['key_name'],
                              shared_access_key_value=sb_config['access_key'],
                              debug=False)

    queue_client = client.get_queue(queue)
    with queue_client.get_receiver(idle_timeout=10,
                                   mode=ReceiveSettleMode.PeekLock,
                                   prefetch=10) as receiver:
        total = 0
        for message in receiver:
            message.complete()
            total += 1
            if total % 50 == 0:
                print("Received {} messages".format(total))
            if endtime <= datetime.now():
                break

    return total
def example_create_servicebus_client_sync():
    # [START create_sb_client_from_conn_str_sync]
    import os
    from azure.servicebus import ServiceBusClient
    servicebus_connection_str = os.environ['SERVICE_BUS_CONNECTION_STR']
    servicebus_client = ServiceBusClient.from_connection_string(
        conn_str=servicebus_connection_str)
    # [END create_sb_client_from_conn_str_sync]

    # [START create_sb_client_sync]
    import os
    from azure.identity import DefaultAzureCredential
    from azure.servicebus import ServiceBusClient
    fully_qualified_namespace = os.environ[
        'SERVICE_BUS_FULLY_QUALIFIED_NAMESPACE']
    servicebus_client = ServiceBusClient(
        fully_qualified_namespace=fully_qualified_namespace,
        credential=DefaultAzureCredential())
    # [END create_sb_client_sync]
    return servicebus_client
    def test_stress_queue_receive_and_delete(self, servicebus_namespace_connection_string, servicebus_queue):
        sb_client = ServiceBusClient.from_connection_string(
            servicebus_namespace_connection_string, debug=False)

        stress_test = StressTestRunner(senders = [sb_client.get_queue_sender(servicebus_queue.name)],
                                       receivers = [sb_client.get_queue_receiver(servicebus_queue.name, receive_mode=ReceiveMode.ReceiveAndDelete)],
                                       duration=timedelta(seconds=60))

        result = stress_test.Run()
        assert(result.total_sent > 0)
        assert(result.total_received > 0)
Esempio n. 53
0
    def test_stress_queue_send_and_receive(self, servicebus_namespace_connection_string, servicebus_queue):
        sb_client = ServiceBusClient.from_connection_string(
            servicebus_namespace_connection_string, logging_enable=LOGGING_ENABLE)

        stress_test = StressTestRunner(senders = [sb_client.get_queue_sender(servicebus_queue.name)],
                                       receivers = [sb_client.get_queue_receiver(servicebus_queue.name)],
                                       duration=timedelta(seconds=60))

        result = stress_test.Run()
        assert(result.total_sent > 0)
        assert(result.total_received > 0)
Esempio n. 54
0
def message_receive_process(sb_config, queue, endtime):
    client = ServiceBusClient(service_namespace=sb_config['hostname'],
                              shared_access_key_name=sb_config['key_name'],
                              shared_access_key_value=sb_config['access_key'],
                              debug=True)

    queue_client = client.get_queue(queue)
    with queue_client.get_receiver(idle_timeout=10,
                                   mode=ReceiveSettleMode.ReceiveAndDelete,
                                   prefetch=10) as receiver:
        total = 0
        batch = receiver.fetch_next()
        while batch:
            for _ in batch:
                total += 1
                if endtime <= datetime.now():
                    break
            batch = receiver.fetch_next()

    return total
def test_pqueue_by_servicebus_client_iter_messages_with_retrieve_deferred_receiver_complete(
        live_servicebus_config, partitioned_queue):

    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=False)

    queue_client = client.get_queue(partitioned_queue)
    deferred_messages = []
    messages = [
        Message("Deferred message no. {}".format(i)) for i in range(10)
    ]
    for m in messages:
        m.partition_key = "MyPartitionKey"
    results = queue_client.send(messages, session="test_session")
    assert all(result[0] for result in results)

    with queue_client.get_receiver(
            idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:
        count = 0
        for message in receiver:
            deferred_messages.append(message.sequence_number)
            print_message(message)
            count += 1
            message.defer()

    assert count == 10

    with queue_client.get_receiver(
            idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:
        deferred = receiver.receive_deferred_messages(deferred_messages)
        assert len(deferred) == 10
        for message in deferred:
            assert isinstance(message, DeferredMessage)
            assert message.lock_token
            assert message.locked_until
            assert message._receiver
            message.renew_lock()
            message.complete()
def test_qsession_by_servicebus_client_iter_messages_with_retrieve_deferred_receiver_complete(
        live_servicebus_config, partitioned_session_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=True)

    queue_client = client.get_queue(partitioned_session_queue)
    deferred_messages = []
    session_id = str(uuid.uuid4())
    messages = [
        Message("Deferred message no. {}".format(i)) for i in range(10)
    ]
    for m in messages:
        m.partition_key = "MyPartitionKey"
    results = queue_client.send(messages, session=session_id)
    assert all(result[0] for result in results)

    count = 0
    session = queue_client.get_receiver(session=session_id, idle_timeout=5)
    for message in session:
        deferred_messages.append(message.sequence_number)
        print_message(message)
        count += 1
        message.defer()

    assert count == 10

    with queue_client.get_receiver(session=session_id,
                                   idle_timeout=5) as session:
        deferred = session.receive_deferred_messages(deferred_messages)
        assert len(deferred) == 10
        for message in deferred:
            assert isinstance(message, DeferredMessage)
            assert message.lock_token
            assert not message.locked_until
            assert message._receiver
            with pytest.raises(TypeError):
                message.renew_lock()
            message.complete()
Esempio n. 57
0
def test_queue_by_servicebus_client_receive_batch_with_retrieve_deadletter(
        live_servicebus_config, standard_queue):

    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=False)

    queue_client = client.get_queue(standard_queue)
    with queue_client.get_receiver(idle_timeout=5,
                                   mode=ReceiveSettleMode.PeekLock,
                                   prefetch=10) as receiver:

        with queue_client.get_sender() as sender:
            for i in range(10):
                message = Message("Dead lettered message no. {}".format(i))
                sender.send(message)

        count = 0
        messages = receiver.fetch_next()
        while messages:
            for message in messages:
                print_message(message)
                message.dead_letter(description="Testing queue deadletter")
                count += 1
            messages = receiver.fetch_next()

        with pytest.raises(InvalidHandlerState):
            receiver.fetch_next()

    assert count == 10

    with queue_client.get_deadletter_receiver(
            idle_timeout=5, mode=ReceiveSettleMode.PeekLock) as receiver:
        count = 0
        for message in receiver:
            print_message(message)
            message.complete()
            count += 1
    assert count == 10
    def test_stress_queue_receive_large_batch_size(self, servicebus_namespace_connection_string, servicebus_queue):
        sb_client = ServiceBusClient.from_connection_string(
            servicebus_namespace_connection_string, logging_enable=LOGGING_ENABLE)

        stress_test = StressTestRunner(senders = [sb_client.get_queue_sender(servicebus_queue.name)],
                                       receivers = [sb_client.get_queue_receiver(servicebus_queue.name, prefetch_count=50)],
                                       duration = timedelta(seconds=60),
                                       max_message_count = 50)

        result = stress_test.run()
        assert(result.total_sent > 0)
        assert(result.total_received > 0)
Esempio n. 59
0
def test_queue_message_connection_closed(live_servicebus_config,
                                         standard_queue):
    client = ServiceBusClient(
        service_namespace=live_servicebus_config['hostname'],
        shared_access_key_name=live_servicebus_config['key_name'],
        shared_access_key_value=live_servicebus_config['access_key'],
        debug=False)
    import uuid
    queue_client = client.get_queue(standard_queue)

    with queue_client.get_sender() as sender:
        content = str(uuid.uuid4())
        message = Message(content)
        sender.send(message)

    with queue_client.get_receiver() as receiver:
        messages = receiver.fetch_next(timeout=10)
        assert len(messages) == 1

    with pytest.raises(MessageSettleFailed):
        messages[0].complete()
Esempio n. 60
0
def example_create_servicebus_client_sync():
    # [START create_sb_client_from_conn_str_sync]
    import os
    from azure.servicebus import ServiceBusClient
    servicebus_connection_str = os.environ['SERVICE_BUS_CONNECTION_STR']
    servicebus_client = ServiceBusClient.from_connection_string(
        conn_str=servicebus_connection_str)
    # [END create_sb_client_from_conn_str_sync]

    # [START create_sb_client_sync]
    import os
    from azure.servicebus import ServiceBusClient, ServiceBusSharedKeyCredential
    fully_qualified_namespace = os.environ['SERVICE_BUS_CONNECTION_STR']
    shared_access_policy = os.environ['SERVICE_BUS_SAS_POLICY']
    shared_access_key = os.environ['SERVICE_BUS_SAS_KEY']
    servicebus_client = ServiceBusClient(
        fully_qualified_namespace=fully_qualified_namespace,
        credential=ServiceBusSharedKeyCredential(shared_access_policy,
                                                 shared_access_key))
    # [END create_sb_client_sync]
    return servicebus_client