예제 #1
0
        public Task SubscribeTwoConsumer_SendOneMessage_BothConsumerReceivesMessage()
        {
            return(TestHelper.TryTest(async() =>
            {
                // arrange
                var cts = new CancellationTokenSource(30000);
                var eventDescription = new EventDescription(
                    Guid.NewGuid().ToString());

                // act
                IEventStream consumerOne =
                    await _registry.SubscribeAsync(eventDescription);
                IAsyncEnumerator <IEventMessage> enumeratorOne =
                    consumerOne.GetAsyncEnumerator(cts.Token);
                IEventStream consumerTwo =
                    await _registry.SubscribeAsync(eventDescription);
                IAsyncEnumerator <IEventMessage> enumeratorTwo =
                    consumerTwo.GetAsyncEnumerator(cts.Token);
                var outgoing = new EventMessage(eventDescription, "bar");
                await _sender.SendAsync(outgoing);

                // assert
                Assert.True(await enumeratorOne.MoveNextAsync());
                Assert.True(await enumeratorTwo.MoveNextAsync());
                Assert.Equal(outgoing.Payload, enumeratorOne.Current.Payload);
                Assert.Equal(outgoing.Payload, enumeratorTwo.Current.Payload);
            }));
        }
        public async Task Subscribe_ObjectValueArgument_Send_MessageReceived()
        {
            // arrange
            using var cts = new CancellationTokenSource(30000);
            var eventRegistry = new InMemoryEventRegistry();

            var a = new EventDescription("event",
                                         new ArgumentNode("foo", new ObjectValueNode(
                                                              new ObjectFieldNode("a", 123),
                                                              new ObjectFieldNode("b", true),
                                                              new ObjectFieldNode("c", "abc"))));

            var b = new EventDescription("event",
                                         new ArgumentNode("foo", new ObjectValueNode(
                                                              new ObjectFieldNode("b", true),
                                                              new ObjectFieldNode("a", 123),
                                                              new ObjectFieldNode("c", "abc"))));

            // act
            IEventStream stream = await eventRegistry.SubscribeAsync(a);

            IAsyncEnumerator <IEventMessage> enumerator = stream.GetAsyncEnumerator(cts.Token);

            // assert
            var incoming = new EventMessage(b, "foo");
            await eventRegistry.SendAsync(incoming);

            Assert.True(await enumerator.MoveNextAsync());
            Assert.Equal(incoming, enumerator.Current);
        }
예제 #3
0
        public Task SubscribeTwoConsumer_SendTwoMessage_BothConsumerReceivesIndependentMessage()
        {
            return(TestHelper.TryTest(async() =>
            {
                // arrange
                var cts = new CancellationTokenSource(30000);
                string name = Guid.NewGuid().ToString();
                var eventDescriptionOne = new EventDescription(
                    name, new ArgumentNode("b", "x"));
                var eventDescriptionTwo = new EventDescription(
                    name, new ArgumentNode("b", "y"));

                // act
                IEventStream consumerOne =
                    await _registry.SubscribeAsync(eventDescriptionOne);
                IAsyncEnumerator <IEventMessage> enumeratorOne =
                    consumerOne.GetAsyncEnumerator(cts.Token);
                var outgoingOne = new EventMessage(eventDescriptionOne, "foo");
                await _sender.SendAsync(outgoingOne);

                IEventStream consumerTwo =
                    await _registry.SubscribeAsync(eventDescriptionTwo);
                IAsyncEnumerator <IEventMessage> enumeratorTwo =
                    consumerTwo.GetAsyncEnumerator(cts.Token);
                var outgoingTwo = new EventMessage(eventDescriptionTwo, "bar");
                await _sender.SendAsync(outgoingTwo);

                // assert
                Assert.True(await enumeratorOne.MoveNextAsync());
                Assert.True(await enumeratorTwo.MoveNextAsync());
                Assert.Equal(outgoingOne.Payload, enumeratorOne.Current.Payload);
                Assert.Equal(outgoingTwo.Payload, enumeratorTwo.Current.Payload);
                Assert.NotEqual(enumeratorOne.Current.Event, enumeratorTwo.Current.Event);
            }));
        }
예제 #4
0
        public Task SubscribeOneConsumer_Complete_StreamIsCompleted()
        {
            return(TestHelper.TryTest(async() =>
            {
                // arrange
                var cts = new CancellationTokenSource(30000);
                var eventDescription = new EventDescription(
                    Guid.NewGuid().ToString());

                // act
                IEventStream consumer = await _registry.SubscribeAsync(eventDescription);
                IAsyncEnumerator <IEventMessage> enumerator = consumer.GetAsyncEnumerator(cts.Token);
                await consumer.CompleteAsync();

                // assert
                Assert.False(await enumerator.MoveNextAsync());
            }));
        }
        public async Task Subscribe_Send_MessageReceived()
        {
            // arrange
            using var cts = new CancellationTokenSource(30000);
            var eventDescription = new EventDescription("foo");
            var eventRegistry    = new InMemoryEventRegistry();

            // act
            IEventStream stream = await eventRegistry.SubscribeAsync(eventDescription);

            IAsyncEnumerator <IEventMessage> enumerator = stream.GetAsyncEnumerator(cts.Token);

            // assert
            var incoming = new EventMessage("foo");
            await eventRegistry.SendAsync(incoming);

            Assert.True(await enumerator.MoveNextAsync());
            Assert.Equal(incoming, enumerator.Current);
        }