// 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(""); }
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); }
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); }
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.*"); }
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(); } }
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)); }