async def get_partitions(iot_connection_str):
    try:
        client = EventHubClientAsync.from_iothub_connection_string(iot_connection_str, debug=True)
        client.add_async_receiver("$default", "0", prefetch=1000, operation='/messages/events')
        await client.run_async()
        partitions = await client.get_eventhub_info_async()
        return partitions["partition_ids"]
    finally:
        await client.stop_async()
async def get_partitions(iot_connection_str):
    try:
        client = EventHubClientAsync.from_iothub_connection_string(
            iot_connection_str, debug=True)
        client.add_async_receiver("$default",
                                  "0",
                                  prefetch=1000,
                                  operation='/messages/events')
        await client.run_async()
        partitions = await client.get_eventhub_info_async()
        return partitions["partition_ids"]
    finally:
        await client.stop_async()
async def test_iothub_receive_multiple_async(iot_connection_str):
    partitions = await get_partitions(iot_connection_str)
    client = EventHubClientAsync.from_iothub_connection_string(iot_connection_str, debug=True)
    try:
        receivers = []
        for p in partitions:
            receivers.append(client.add_async_receiver("$default", p, prefetch=10, operation='/messages/events'))
        await client.run_async()
        outputs = await asyncio.gather(*[pump(r) for r in receivers])

        assert isinstance(outputs[0], int) and outputs[0] <= 10
        assert isinstance(outputs[1], int) and outputs[1] <= 10
    finally:
        await client.stop_async()
async def test_iothub_receive_detach_async(iot_connection_str):
    client = EventHubClientAsync.from_iothub_connection_string(iot_connection_str, debug=True)
    receivers = []
    for i in range(2):
        receivers.append(client.add_async_receiver("$default", str(i), prefetch=1000, operation='/messages/events'))
    await client.run_async()
    try:
        outputs = await asyncio.gather(
            pump(receivers[0]),
            pump(receivers[1]),
            return_exceptions=True)

        assert isinstance(outputs[0], int) and outputs[0] == 0
        assert isinstance(outputs[1], EventHubError)
    except:
        raise
    finally:
        await client.stop_async()
async def test_iothub_receive_multiple_async(iot_connection_str):
    partitions = await get_partitions(iot_connection_str)
    client = EventHubClientAsync.from_iothub_connection_string(
        iot_connection_str, debug=True)
    try:
        receivers = []
        for p in partitions:
            receivers.append(
                client.add_async_receiver("$default",
                                          p,
                                          prefetch=10,
                                          operation='/messages/events'))
        await client.run_async()
        outputs = await asyncio.gather(*[pump(r) for r in receivers])

        assert isinstance(outputs[0], int) and outputs[0] <= 10
        assert isinstance(outputs[1], int) and outputs[1] <= 10
    finally:
        await client.stop_async()