public void SubscriptionWithExistingCursor()
        {
            var dr = new DefaultDependencyResolver();
            var bus = new TestScaleoutBus(dr, topicCount: 2);
            var subscriber = new TestSubscriber(new[] { "key" });
            var cd = new CountDownRange<int>(Enumerable.Range(2, 4));
            IDisposable subscription = null;

            // test, test2 = 1
            // test1, test3 = 0
            //

            // Cursor 1, 1
            bus.SendMany(new[] {
                 new Message("test", "key", "1"),
                 new Message("test", "key", "50")
            });

            // Cursor 0,1|1,1
            bus.SendMany(new[] {
                new Message("test1", "key", "51")
            });

            bus.SendMany(new[]{
                 new Message("test2", "key", "2"),
                 new Message("test3", "key", "3"),
                 new Message("test2", "key", "4"),
            });

            try
            {
                subscription = bus.Subscribe(subscriber, "0,00000001|1,00000001", result =>
                {
                    foreach (var m in result.GetMessages())
                    {
                        int n = Int32.Parse(m.Value);
                        Assert.True(cd.Mark(n));
                    }

                    return TaskAsyncHelper.True;

                }, 10);

                bus.SendMany(new[] { new Message("test", "key", "5") });

                Assert.True(cd.Wait(TimeSpan.FromSeconds(10)));
            }
            finally
            {
                if (subscription != null)
                {
                    subscription.Dispose();
                }
            }
        }
        public void NewSubscriptionGetsAllMessages()
        {
            var dr = new DefaultDependencyResolver();
            var bus = new TestScaleoutBus(dr, topicCount: 5);
            var subscriber = new TestSubscriber(new[] { "key" });
            var wh = new ManualResetEventSlim(initialState: false);
            IDisposable subscription = null;

            try
            {
                var firstMessages = new[] { new Message("test1", "key", "1"),
                                            new Message("test2", "key", "2") };

                bus.SendMany(firstMessages);

                subscription = bus.Subscribe(subscriber, null, result =>
                {
                    if (!result.Terminal)
                    {
                        var ms = result.GetMessages().ToList();

                        Assert.Equal(2, ms.Count);
                        Assert.Equal("key", ms[0].Key);
                        Assert.Equal("x", ms[0].Value);
                        Assert.Equal("key", ms[1].Key);
                        Assert.Equal("y", ms[1].Value);

                        wh.Set();

                        return TaskAsyncHelper.True;
                    }

                    return TaskAsyncHelper.False;

                }, 10);

                bus.SendMany(new[] { new Message("test1", "key", "x"),
                                     new Message("test1", "key", "y") });

                Assert.True(wh.Wait(TimeSpan.FromSeconds(10)));
            }
            finally
            {
                if (subscription != null)
                {
                    subscription.Dispose();
                }
            }
        }
Exemple #3
0
        public void NewSubscriptionGetsAllMessages()
        {
            var dr = new DefaultDependencyResolver();
            var bus = new MessageBus(dr);
            var subscriber = new TestSubscriber(new[] { "key" });
            var wh = new ManualResetEventSlim(initialState: false);
            IDisposable subscription = null;

            try
            {
                bus.Publish("test", "key", "1").Wait();

                subscription = bus.Subscribe(subscriber, null, result =>
                {
                    if (!result.Terminal)
                    {
                        var m = result.GetMessages().Single();

                        Assert.Equal("key", m.Key);
                        Assert.Equal("value", m.Value);

                        wh.Set();

                        return TaskAsyncHelper.True;
                    }

                    return TaskAsyncHelper.False;

                }, 10);

                bus.Publish("test", "key", "value").Wait();

                Assert.True(wh.Wait(TimeSpan.FromSeconds(5)));
            }
            finally
            {
                if (subscription != null)
                {
                    subscription.Dispose();
                }
            }
        }
Exemple #4
0
        public void AddingEventAndSendingMessages()
        {
            var dr = new DefaultDependencyResolver();
            var bus = new MessageBus(dr);
            var subscriber = new TestSubscriber(new[] { "a" });
            int max = 100;
            var cd = new CountDownRange<int>(Enumerable.Range(0, max));
            int prev = -1;
            IDisposable subscription = null;

            try
            {
                subscription = bus.Subscribe(subscriber, null, result =>
                {
                    foreach (var m in result.GetMessages())
                    {
                        int n = Int32.Parse(m.Value);
                        Assert.True(prev < n, "out of order");
                        prev = n;
                        Assert.True(cd.Mark(n));
                    }

                    return TaskAsyncHelper.True;
                }, 10);

                for (int i = 0; i < max; i++)
                {
                    subscriber.AddEvent("b");
                    bus.Publish("test", "b", i.ToString()).Wait();
                }

                Assert.True(cd.Wait(TimeSpan.FromSeconds(10)));
            }
            finally
            {
                if (subscription != null)
                {
                    subscription.Dispose();
                }
            }
        }
Exemple #5
0
        public void SubscriptionWithMultipleExistingCursors()
        {
            var dr = new DefaultDependencyResolver();
            var bus = new MessageBus(dr);
            var subscriber = new TestSubscriber(new[] { "key", "key2" });
            var cdKey = new CountDownRange<int>(Enumerable.Range(2, 4));
            var cdKey2 = new CountDownRange<int>(new[] { 1, 2, 10 });
            IDisposable subscription = null;

            bus.Publish("test", "key", "1").Wait();
            bus.Publish("test", "key", "2").Wait();
            bus.Publish("test", "key", "3").Wait();
            bus.Publish("test", "key", "4").Wait();
            bus.Publish("test", "key2", "1").Wait();
            bus.Publish("test", "key2", "2").Wait();

            try
            {
                subscription = bus.Subscribe(subscriber, "key,00000001|key2,00000000", result =>
                {
                    foreach (var m in result.GetMessages())
                    {
                        int n = Int32.Parse(m.Value);
                        if (m.Key == "key")
                        {
                            Assert.True(cdKey.Mark(n));
                        }
                        else
                        {
                            Assert.True(cdKey2.Mark(n));
                        }
                    }

                    return TaskAsyncHelper.True;

                }, 10);

                bus.Publish("test", "key", "5");
                bus.Publish("test", "key2", "10");

                Assert.True(cdKey.Wait(TimeSpan.FromSeconds(5)));
                Assert.True(cdKey2.Wait(TimeSpan.FromSeconds(5)));
            }
            finally
            {
                if (subscription != null)
                {
                    subscription.Dispose();
                }
            }
        }