Exemple #1
0
        // Scenario1 tests
        // - Direct sync call
        // - Direct async cal
        // - Indirect sync call
        // - Indirect async call
        private static void RunScenario1()
        {
            const int TestCount   = 100000000;
            var       testMessage = new TestMessage1 {
                a = 1, b = 2
            };

            Console.WriteLine("***** PerfRequestTest-1 *****\n");

            RunTest("Nothing", TestCount, testMessage, (TestActor1 actor, object message) =>
            {
                return(null);
            });

            RunTest("Direct", TestCount, testMessage, (TestActor1 actor, object message) =>
            {
                var msg    = (TestMessage1)message;
                var result = actor.Min(msg.a, msg.b);
                return(new Temp__Result {
                    v = result
                });
            });

            RunTest("DirectAsync", TestCount, testMessage, (TestActor1 actor, object message) =>
            {
                var msg    = (TestMessage1)message;
                var result = actor.MinAsync(msg.a, msg.b).Result;
                return(new Temp__Result {
                    v = result
                });
            });

            var minMethod = (Func <TestActor1, int, int, int>)Delegate.CreateDelegate(typeof(Func <TestActor1, int, int, int>), typeof(TestActor1).GetMethod("Min"));

            RunTest("Indirect", TestCount, testMessage, (TestActor1 actor, object message) =>
            {
                var msg    = (TestMessage1)message;
                var result = minMethod(actor, msg.a, msg.b);
                return(new Temp__Result {
                    v = result
                });
            });

            var minAsyncMethod = (Func <TestActor1, int, int, Task <int> >)Delegate.CreateDelegate(typeof(Func <TestActor1, int, int, Task <int> >), typeof(TestActor1).GetMethod("MinAsync"));

            RunTest("IndirectAsync", TestCount, testMessage, (TestActor1 actor, object message) =>
            {
                var msg    = (TestMessage1)message;
                var result = minAsyncMethod(actor, msg.a, msg.b).Result;
                return(new Temp__Result {
                    v = result
                });
            });

            Console.WriteLine("");
        }
Exemple #2
0
        public void subscribed_handler_handles_message()
        {
            // GIVEN
            var handler = new TestHandler1();

            Bus.Subscribe(handler);

            // WHEN
            var message = new TestMessage1();

            Bus.Publish(message);
            // EXPECT
            CollectionAssert.AreEqual(new[] { message }, handler.HandledMessages);
        }
Exemple #3
0
        public void if_subscribed_handler_repeatedly_get_one_message()
        {
            // GIVEN
            var handler = new TestHandler1();

            Bus.Subscribe(handler);
            Bus.Subscribe(handler);
            // WHEN
            var m = new TestMessage1();

            Bus.Publish(m);
            // EXPECT
            CollectionAssert.AreEqual(new[] { m }, handler.HandledMessages);
        }
Exemple #4
0
        public void Test_FlushChannelMessages()
        {
            TestMessage1 msg1 = new TestMessage1();

            msg1.Data.Add(100);
            msg1.Data.Add(200);
            string channel1Name = "TestChannel1";

            TestMessage2 msg2 = new TestMessage2();

            msg2.Data.Add(1000);
            msg2.Data.Add(2000);
            string channel2Name = "TestChannel2";

            // Setup the mocks
            MockDistributedMemoryManager distributedMemoryManagerMock = new MockDistributedMemoryManager();

            DeferredChannelMessageContextEntry entry = new DeferredChannelMessageContextEntry(distributedMemoryManagerMock);

            entry.AddOrUpdateMessage(channel1Name, msg1, null);
            entry.AddOrUpdateMessage(channel2Name, msg2, null);
            entry.FlushMessages();

            TestMessage1 msg1Out;
            TestMessage2 msg2Out;

            Assert.IsFalse(entry.TryGetMessage(channel1Name, out msg1Out), "Channel1 should have no messages");
            Assert.IsFalse(entry.TryGetMessage(channel2Name, out msg2Out), "Channel2 should have no messages");

            // Validation
            MockChannel <TestMessage1> channel1 = distributedMemoryManagerMock.CreatedChannels[channel1Name] as MockChannel <TestMessage1>;

            Assert.IsNotNull(channel1, "{0} was not found", channel1Name);
            Assert.AreEqual(1, channel1.PublishedMessages.Count);
            Assert.AreSame(msg1, channel1.PublishedMessages[0]);

            MockChannel <TestMessage2> channel2 = distributedMemoryManagerMock.CreatedChannels[channel2Name] as MockChannel <TestMessage2>;

            Assert.IsNotNull(channel2, "{0} was not found", channel2Name);
            Assert.AreEqual(1, channel2.PublishedMessages.Count);
            Assert.AreSame(msg2, channel2.PublishedMessages[0]);
        }
        public async Task Given_multiple_are_configured_when_receiving_invalid_message_it_should_select_appropriate_strategy()
        {
            string       messageId1       = null;
            string       messageId2       = null;
            TestMessage1 receivedMessage1 = null;
            TestMessage2 receivedMessage2 = null;
            var          sync             = new AutoResetEvent(false);

            var activator = new BuiltinHandlerActivator();

            activator
            .Handle <TestMessage1>((bus, context, message) =>
            {
                // This should happen.
                receivedMessage1 = message;
                messageId1       = context.Message.GetMessageId();
                sync.Set();
                return(Task.CompletedTask);
            })
            .Handle <TestMessage2>((bus, context, message) =>
            {
                // This should not happen.
                receivedMessage2 = message;
                messageId2       = context.Message.GetMessageId();
                sync.Set();
                return(Task.CompletedTask);
            });

            using (IBus bus = CreateBus(activator,
                                        o =>
            {
                o.ValidateIncomingMessages(_validatorFactoryMock.Object,
                                           v => v
                                           .PassThrough <TestMessage1>()
                                           .Drop <TestMessage2>()
                                           );

                o.OnPipelineCompletion <TestMessage2>(failed =>
                {
                    receivedMessage2 = failed;
                    messageId2 = MessageContext.Current.Message.GetMessageId();
                    sync.Set();
                });
            }))
            {
                // Act
                await bus.Send(new TestMessage1
                {
                    ShouldPassValidation = false
                });

                await bus.Send(new TestMessage2
                {
                    ShouldPassValidation = false
                });

                // Assert
                sync.WaitOne(Debugger.IsAttached ? -1 : 5000);
                sync.WaitOne(Debugger.IsAttached ? -1 : 5000);

                receivedMessage1.Should().NotBeNull();
                receivedMessage2.Should().NotBeNull();
            }

            var logMessages = _loggerFactory.LogEvents
                              .Select(le => le.ToString())
                              .ToList();

            logMessages
            .Should()
            .ContainMatch($"*\"{messageId1}\" is configured to pass through.*");
            logMessages
            .Should()
            .ContainMatch($"*\"{messageId2}\" is configured to be dropped.*");
        }
Exemple #6
0
 public void OnTest(TestMessage1 msg)
 {
     Debug.Log(msg.name);
 }
        static void Main(string[] args)
        {
            //NLog.Config.SimpleConfigurator.ConfigureForConsoleLogging(LogLevel.Info);

            try
            {
                ConfigExample.Test();
                //OracleTests.TestBasicOps();
                //OracleTests.TestDbInit();
                //OracleTests.TestSend();
                OracleTests.TestNamedQ();
                OracleTests.TestQueueOps();
                //Console.ReadLine();
                //return;
                //MongoQueue.Test1();
                //MongoQueue.TestSer();
                //MongoQueue.Test2();
                //MongoQueue.TestSagas();
                //return;
                //DelegateTest();
                //PerfTest.SendTest();
                //Console.ReadLine();
                //return;
                //SerializationTests.Test4();
                //SerializationTests.Test3();
                //turn;
                //CacheTest();
                //TransactionTest.Test1("Data Source=(local);Initial Catalog=NGinn;User Id=nginn;Password=PASS");
                //TransactionTest.Test2("Data Source=(local);Initial Catalog=NGinn;User Id=nginn;Password=PASS");
                //TransactionTest.Test3("Data Source=(local);Initial Catalog=NGinn;User Id=nginn;Password=PASS");

                //return;
                ///configure perf counters - just to see the stats in log
                //NGinnBPM.MessageBus.Perf.DefaultCounters.ConfigureFromFile("PerfCounters.xml");
                ///Map database alias to database connection string, so then you can use
                ///the alias when referring to a queue: e.g. sql://testdb1/Queue1
                Dictionary<string, string> connStrings = new Dictionary<string,string>();
                 ///configure two containers with two message buses
                IWindsorContainer wc1 = ConfigureMessageBus("sql://testdb1/MQueue4", connStrings, null);

                //IWindsorContainer wc2 = ConfigureMessageBus("sql://testdb2/MQueue2", connStrings, null);

                IMessageBus mb1 = wc1.Resolve<IMessageBus>();
                string sqid = Guid.NewGuid().ToString();
                for (var o = 0; o < 10000; o++)
                {
                   // mb1.Notify(new TestMessage1 { Id = 100000 + o });
                }
                Console.ReadLine();
                using (var ts = new TransactionScope())
                {
                    var m = new TestMessage1 { Id = 9998 };
                    for (int i = 0; i < 100; i++)
                    {
                        mb1.Notify(m);
                    }
                    ts.Complete();
                }
                Console.WriteLine("Batch sent. Enter");
                Console.ReadLine();
                return;
                using (var ts = new TransactionScope())
                {
                    mb1.Notify(new TestMessage1 { });
                    mb1.Notify(new TestMessage1 { Id = 32423 });
                    mb1.NewMessage(new TestMessage1 { Id = 101 }).InSequence(sqid, 0, 4).Publish();
                    mb1.NewMessage(new TestMessage1 { Id = 103 }).InSequence(sqid, 2, 4).Publish();
                    mb1.NewMessage(new TestMessage1 { Id = 102 }).InSequence(sqid, 1, 4).Publish();
                    mb1.NewMessage(new TestMessage1 { Id = 99 }).SetDeliveryDate(DateTime.Now.AddSeconds(10)).Publish();
                    var m = mb1 as NGinnBPM.MessageBus.Impl.MessageBus;
                    Console.WriteLine("STATE");
                    Console.WriteLine(m.GetCurrentTransactionState());
                    ts.Complete();
                }

                Console.ReadLine();
                SagaTest(wc1);
                Console.ReadLine();
                return;
                //IMessageBus mb2 = wc1.Resolve<IMessageBus>("bus2");

                //IMessageBus mb2 = wc2.Resolve<IMessageBus>();
                //mb1.SubscribeAt("sql://testdb2/MQueue2", typeof(TestMessage1));

                //mb1.NewMessage(new TestMessage1 { Id = 2 }).Send(mb2.Endpoint);

                //using (var ts = new System.Transactions.TransactionScope())
                //{
                //    mb1.NewMessage(new TestMessage1 { Id = 111 })
                //        .SetCorrelationId("123332")
                //        .Publish();
                //    //mb1.Notify(new TestMessage1 { Id = 100 });
                //    //mb1.Send("sql://testdb2/MQueue2", new TestMessage1());
                //    ts.Complete();
                //}
                Console.ReadLine();
                return;
                ServiceClient sc = new ServiceClient();
                sc.BaseUrl = "http://localhost:9013/call/";
                sc.CallService<TestMessage1>(new TestMessage1 { Id = 99 });
                sc.CallService<TestMessage1>(new TestMessage1 { Id = 100 });

                /*mb1.NewMessage(new Ping())
                    .SetTTL(DateTime.Now)
                    .Publish();
                mb1.Send("sql://testdb1/MQueue2", new Ping { });
                mb1.Notify(new TestMessage1 { Id = 1 });
                */
                //mb1.NewMessage(new TestMessage1()).InTransaction(mb1.CurrentMessageTransaction).Publish();
                Console.ReadLine();
                /*for (var i = 0; i < 40000; i++)
                {
                    mb1.Notify(new Pong { Id = i.ToString() });
                }*/
                Console.WriteLine("Done all");
                Console.ReadLine();
                /*var sid = Guid.NewGuid().ToString("N");
                for (int i = 10; i >= 0; i--)
                {
                    mb1.NewMessage(new Ping { Id = i.ToString() }).InSequence(sid, i, 11).Publish();
                }
                Console.ReadLine();
                return;*/
                //mb1.SubscribeAt("sql://testdb2/MQueue2", typeof(TestMessage1));
                //mb1.Send("sql://testdb2/MQueue2", new Ping { Id = "TEST" });

                /*
                IMessageBus mb2 = wc2.Resolve<IMessageBus>();
                for (int i = 0; i < 50; i++)
                {
                    //mb1.Send("sql://testdb2/MQueue2", new Ping { Id = "TEST" + i });
                }

                mb1.Send("sql://testdb2/MQueue2", new Ping { Id = "test http" });
                for (int i = 0; i < 10; i++)
                {
                    mb1.NewMessage(new Ping { Id = "t1" })
                        .SetNonPersistentLocal()
                        .Publish();
                }*/
                DateTime dt = DateTime.Now;
                for (int j = 0; j < 100; j++)
                {
                    using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())
                    {
                        for (int i = 0; i < 100; i++)
                        {
                            //mb1.Send("sql://testdb2/MQueue2", new Ping { Id = (10 * j + i).ToString() });
                            ///send the message using fluent interface
                            mb1.NewMessage(new TestMessage1(j * 10 + i))
                                .SetDeliveryDate(DateTime.Now.AddSeconds(1))
                                .SetLabel("Test XX" + i)
                                .Publish();

                        }
                        if (j % 2 < 2)
                        {
                            ts.Complete();
                        }
                    }
                }
                log.Warn("Inserted 10K messages in {0}", DateTime.Now - dt);
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                log.Error("Error: {0}", ex);
                Console.ReadLine();
            }
        }
Exemple #8
0
        public void Test_AddOrUpdateMessage_Merge_FlushChannelMessages()
        {
            TestMessage1 msg11 = new TestMessage1();

            msg11.Data.Add(100);
            msg11.Data.Add(200);
            TestMessage1 msg12 = new TestMessage1();

            msg12.Data.Add(300);
            msg12.Data.Add(400);
            string channel1Name = "TestChannel1";

            TestMessage2 msg21 = new TestMessage2();

            msg21.Data.Add(1000);
            msg21.Data.Add(2000);
            TestMessage2 msg22 = new TestMessage2();

            msg22.Data.Add(3000);
            msg22.Data.Add(4000);
            msg22.Data.Add(5000);
            string channel2Name = "TestChannel2";

            // Setup the mocks
            MockDistributedMemoryManager distributedMemoryManagerMock = new MockDistributedMemoryManager();

            DeferredChannelMessageContextEntry entry = new DeferredChannelMessageContextEntry(distributedMemoryManagerMock);

            entry.AddOrUpdateMessage(channel1Name, msg11, (e, n) => e.Data.UnionWith(n.Data));
            entry.AddOrUpdateMessage(channel1Name, msg12, (e, n) => e.Data.UnionWith(n.Data)); // This will merge
            entry.AddOrUpdateMessage(channel2Name, msg21, (e, n) => e.Data.UnionWith(n.Data));
            entry.AddOrUpdateMessage(channel2Name, msg22, (e, n) => e.Data.UnionWith(n.Data)); // This will merge
            entry.FlushMessages();

            TestMessage1 msg1Out;
            TestMessage2 msg2Out;

            Assert.IsFalse(entry.TryGetMessage(channel1Name, out msg1Out), "Channel1 should have no messages");
            Assert.IsFalse(entry.TryGetMessage(channel2Name, out msg2Out), "Channel2 should have no messages");

            // Validation
            MockChannel <TestMessage1> channel1 = distributedMemoryManagerMock.CreatedChannels[channel1Name] as MockChannel <TestMessage1>;

            Assert.IsNotNull(channel1, "{0} was not found", channel1Name);
            Assert.AreEqual(1, channel1.PublishedMessages.Count); // Should still have only one message as it has been merged

            SortedSet <int> msg1Data = new SortedSet <int>();

            msg1Data.UnionWith(msg11.Data);
            msg1Data.UnionWith(msg12.Data);

            Assert.AreEqual(msg1Data.Count, channel1.PublishedMessages[0].Data.Count);
            Assert.IsTrue(channel1.PublishedMessages[0].Data.SetEquals(msg1Data));

            MockChannel <TestMessage2> channel2 = distributedMemoryManagerMock.CreatedChannels[channel2Name] as MockChannel <TestMessage2>;

            Assert.IsNotNull(channel2, "{0} was not found", channel2Name);
            Assert.AreEqual(1, channel2.PublishedMessages.Count); // Should still have only one message as it has been merged

            SortedSet <int> msg2Data = new SortedSet <int>();

            msg2Data.UnionWith(msg21.Data);
            msg2Data.UnionWith(msg22.Data);

            Assert.AreEqual(msg2Data.Count, channel2.PublishedMessages[0].Data.Count);
            Assert.IsTrue(channel2.PublishedMessages[0].Data.SetEquals(msg2Data));
        }