コード例 #1
0
def test_poll_eos__no_data(aeron_directory, ipc_publication, stream_id):
    context = Context(aeron_dir=aeron_directory)
    subscription = context.add_subscription('aeron:ipc', stream_id)
    result = subscription.poll_eos()
    assert_that(result, is_(0))


# def test_poll_eos__single_image(aeron_directory):
#     context = Context(aeron_dir=aeron_directory)
#     subscription = context.add_subscription('aeron:udp?endpoint=localhost:40456|ttl=0', 199)
#     publication = context.add_publication('aeron:udp?endpoint=localhost:40456|ttl=0', 199)
#     sleep(0.5)
#
#     publication.offer(b'abc')
#     sleep(0.5)
#
#     result = subscription.poll(lambda _: None)
#     assert_that(result, is_(1))
#
#     publication.close()
#     del publication
#     sleep(1)
#
#     finished = list()
#
#     result = subscription.poll_eos(lambda image: finished.append(image.session_id))
#     assert_that(result, is_(1))


# def test_poll_eos__multiple_images(ipc_publication):
#     pass
コード例 #2
0
ファイル: context_test.py プロジェクト: fairtide/aeron-python
def test_image_available_unavailable_callbacks(aeron_directory):
    class Handler(object):
        def __init__(self):
            self.available_images = list()
            self.unavailable_images = list()

        def on_image_available(self, *args):
            self.available_images.append(args)

        def on_image_unavailable(self, *args):
            self.unavailable_images.append(args)

    handler = Handler()
    context = Context(aeron_dir=aeron_directory,
                      available_image_handler=handler.on_image_available,
                      unavailable_image_handler=handler.on_image_unavailable)
    subscription = context.add_subscription('aeron:ipc', 6000)

    publication_context = Context(aeron_dir=aeron_directory)
    publication = publication_context.add_publication('aeron:ipc', 6000)
    sleep(1)

    publication.close()
    del publication
    sleep(1)

    assert_that(handler.available_images, is_not(empty()))
    assert_that(handler.unavailable_images, is_not(empty()))
コード例 #3
0
def subscriber(args):
    context = Context(
        aeron_dir=args.prefix,
        resource_linger_timeout=timedelta(milliseconds=args.linger),
        # new_publication_handler=lambda *args: print(f'new publication - {args}'),
        # new_subscription_handler=lambda *args: print(f'new subscription {args}'),
        # available_image_handler=lambda *args: print(f'available image {args}'),
        # unavailable_image_handler = lambda *args: print(f'unavailable image {args}')
    )
    subscriptions = []

    for id in range(0, args.processes):
        subscriptions.append(context.add_subscription(args.channel, id+1))

    while True:
        for sub in subscriptions:

            # fragments_read = sub.poll(lambda data: print(bytes(data)))
            fragments_read = sub.poll(processData)

            if fragments_read == 0:
                # eos_count = sub.poll_eos(lambda *args: print(f'end of stream: {args}'))
                eos_count = sub.poll_eos(endOfStream)
                if eos_count > 0:
                    return 0
コード例 #4
0
def test_poll__not_connected(aeron_directory, stream_id):
    # always connected
    context = Context(aeron_dir=aeron_directory)
    subscription = context.add_subscription('aeron:ipc', stream_id)

    received = list()
    result = subscription.poll(lambda data: received.append(data))
    assert_that(result, is_(0))
コード例 #5
0
def test_create__no_publisher(aeron_directory, stream_id):
    # always connected
    context = Context(aeron_dir=aeron_directory)
    subscription = context.add_subscription('aeron:ipc', stream_id)
    sleep(0.5)

    assert_that(subscription.is_connected, is_(True))
    assert_that(subscription.images, is_(empty()))
コード例 #6
0
def test_create__with_publisher(aeron_directory, ipc_publication, stream_id):
    # always connected
    context = Context(aeron_dir=aeron_directory)
    subscription = context.add_subscription('aeron:ipc', stream_id)
    sleep(0.5)

    assert_that(subscription.images, is_not(empty()))
    assert_that(subscription.images, has_length(1))
    assert_that(subscription.images[0].session_id, ipc_publication.session_id)
コード例 #7
0
def test_poll__no_data(aeron_directory, ipc_publication, stream_id):
    context = Context(aeron_dir=aeron_directory)
    subscription = context.add_subscription('aeron:ipc', stream_id)
    sleep(0.5)

    assert_that(subscription.images, is_not(empty()))
    assert_that(subscription.images, has_length(1))
    assert_that(subscription.images[0].session_id, ipc_publication.session_id)

    received = list()
    result = subscription.poll(lambda data: received.append(data))
    assert_that(result, is_(0))
コード例 #8
0
def test_poll__multiple_sessions(aeron_directory, ipc_publication_1, ipc_publication_2, stream_id):
    context = Context(aeron_dir=aeron_directory)
    subscription = context.add_subscription('aeron:ipc', stream_id)
    sleep(0.5)

    assert_that(subscription.images, has_length(2))
    ipc_publication_1.offer(b'abc')
    ipc_publication_2.offer(b'cde')

    received = list()
    result = subscription.poll(lambda data, header: received.append((header.session_id, bytes(data))))
    assert_that(result, is_(equal_to(2)))
    assert_that(received, has_length(2))
コード例 #9
0
def test_poll__multiple_fragments(aeron_directory, ipc_publication, stream_id):
    context = Context(aeron_dir=aeron_directory)
    subscription = context.add_subscription('aeron:ipc', stream_id)
    sleep(0.5)

    ipc_publication.offer(b'abc')
    ipc_publication.offer(b'cde')
    ipc_publication.offer(b'efg')

    received = list()
    result = subscription.poll(lambda data: received.append(bytes(data)), fragment_limit=3)
    assert_that(result, is_(equal_to(3)))
    assert_that(received, has_length(3))
    assert_that(received[0], is_(equal_to(b'abc')))
    assert_that(received[1], is_(equal_to(b'cde')))
    assert_that(received[2], is_(equal_to(b'efg')))
コード例 #10
0
ファイル: context_test.py プロジェクト: fairtide/aeron-python
def test_add_subscription__with_handlers(aeron_directory):
    class Handler:
        def __init__(self):
            self.subscriptions = list()

        def on_new_subscription(self, *args):
            self.subscriptions.append(args)

    handler = Handler()
    context = Context(aeron_dir=aeron_directory,
                      new_subscription_handler=handler.on_new_subscription)
    subscription = context.add_subscription('aeron:ipc', 546)

    assert_that(handler.subscriptions, is_not(empty()))
    assert_that(handler.subscriptions, has_length(equal_to(1)))
    assert_that(handler.subscriptions[0][0], is_('aeron:ipc'))
    assert_that(handler.subscriptions[0][1], is_(546))
コード例 #11
0
def main():
    try:
        parser = ArgumentParser()
        parser.add_argument('-p', '--prefix', default=None)
        parser.add_argument('-c',
                            '--channel',
                            default='aeron:udp?endpoint=localhost:40123')
        parser.add_argument('-s', '--stream_id', type=int, default=1)

        args = parser.parse_args()
        context = Context(aeron_dir=args.prefix,
                          new_subscription_handler=lambda *args: print(
                              f'new subscription {args}'),
                          available_image_handler=lambda *args: print(
                              f'available image {args}'),
                          unavailable_image_handler=lambda *args: print(
                              f'unavailable image {args}'))

        subscription = context.add_subscription(args.channel, args.stream_id)
        while True:
            fragments_read = subscription.poll(lambda data: print(bytes(data)))
            if fragments_read == 0:
                eos_count = subscription.poll_eos(
                    lambda *args: print(f'end of stream: {args}'))
                if eos_count > 0:
                    break

            sleep(0.1)

        return 0

    except ArgumentError as e:
        print(e, file=sys.stderr)
        return -1
    except Exception as e:
        print(e, file=sys.stderr)
        return -2
コード例 #12
0
ファイル: context_test.py プロジェクト: fairtide/aeron-python
def test_add_subscription(aeron_directory):
    context = Context(aeron_dir=aeron_directory)
    subscription = context.add_subscription('aeron:ipc', 1000)
    assert_that(subscription, is_not(None))
    assert_that(subscription.channel, is_('aeron:ipc'))
    assert_that(subscription.stream_id, is_(1000))