예제 #1
0
        public async Task successfully_subscribes_to_a_single_stream_by_id_from_start(int eventCount)
        {
            var streamId = "test-" + Guid.NewGuid().ToString("N");
            await _eventStoreRunningInDocker.AppendRandomEvents(streamId, eventCount);

            var anotherStreamId = "test-" + Guid.NewGuid().ToString("N");
            await _eventStoreRunningInDocker.AppendRandomEvents(anotherStreamId, eventCount);

            var tcs   = new TaskCompletionSource <bool>();
            var count = 0;

            var subscription = new Subscriber(_eventStoreRunningInDocker.Connection,
                                              LoggingAdaptor.Empty,
                                              RetryPolicy.None);

            subscription.Subscribe(new StreamId(streamId),
                                   () => Checkpoint.Start,
                                   CatchUpSubscriptionSettings.Default,
                                   (s, e) =>
            {
                count++;
                _output.WriteLine($"Processing Event {e.Event.EventNumber}");

                if (count >= eventCount)
                {
                    tcs.SetResult(true);
                }

                return(Task.CompletedTask);
            });

            await Task.WhenAny(tcs.Task, Task.Delay(5000));

            Assert.Equal(eventCount, count);
        }
        public async Task successfully_resubscribes_to_a_single_stream_by_id(int retryCount)
        {
            var streamId = "test-" + Guid.NewGuid().ToString("N");
            await _eventStoreRunningInDocker.AppendRandomEvents(streamId, 1);

            var tcs           = new TaskCompletionSource <bool>();
            var count         = -1;
            var calledDropped = false;

            var subscriber = new Subscriber(_eventStoreRunningInDocker.Connection,
                                            LoggingAdaptor.Empty,
                                            new RetryPolicy(a => TimeSpan.Zero, retryCount));

            subscriber.Subscribe(new StreamId(streamId),
                                 () => Checkpoint.Start,
                                 CatchUpSubscriptionSettings.Default,
                                 (s, e) =>
            {
                _output.WriteLine($"Processing Event {e.Event.EventNumber}");

                count++;
                throw new Exception();
            },
                                 subscriptionDropped: (r, e) =>
            {
                calledDropped = true;
                tcs.SetResult(true);
            });

            await Task.WhenAny(tcs.Task, Task.Delay(5000));

            Assert.Equal(retryCount, count);
            Assert.True(calledDropped);
        }