public async Task CommandsAreProperlySerialized()
        {
            // arrange
            var cmds = new ConcurrentDictionary <Type, SentReceivedMessage>();

            cmds[typeof(Command <DoSimple>)] = new SentReceivedMessage
            {
                Sent = new Command <DoSimple>("cmd1", new DoSimple {
                    Value = "0"
                })
            };
            cmds[typeof(Command <DoComplex>)] = new SentReceivedMessage
            {
                Sent = new Command <DoComplex>("cmd2", new DoComplex {
                    IntValue = 10, StringValue = "abc"
                })
            };
            cmds[typeof(Command <DoSimpleStuff>)] = new SentReceivedMessage
            {
                Sent = new Command <DoSimpleStuff>("cmd3", DoSimpleStuff.Create())
            };
            cmds[typeof(Command <DoComplexStuff>)] = new SentReceivedMessage
            {
                Sent = new Command <DoComplexStuff>("cmd4", DoComplexStuff.Create())
            };
            cmds[typeof(Command <DoGenericStuff <DoComplexStuff> >)] = new SentReceivedMessage
            {
                Sent = new Command <DoGenericStuff <DoComplexStuff> >("cmd5", new DoGenericStuff <DoComplexStuff> {
                    Stuff = DoComplexStuff.Create()
                })
            };
            cmds[typeof(Command <DoNonGenericStuff>)] = new SentReceivedMessage
            {
                Sent = new Command <DoNonGenericStuff>("cmd6", new DoNonGenericStuff {
                    Stuff = DoSimpleStuff.Create()
                })
            };

            var sync = new CountdownEvent(cmds.Count);

            var ctx = DomainContext.Configure()
                      .Bus(b =>
                           b.WithProcessor(p =>
                                           p.Endpoint("p1")
                                           .RegisterHandler(new TestCommandHandler(cmd =>
            {
                // stores the received message and signals completion
                cmds[cmd.GetType()].Received = cmd;
                sync.Signal();
            })))
                           )
                      .Start();

            // act
            using (ctx)
            {
                foreach (var cmd in cmds)
                {
                    await ctx.CommandBus.Send(cmd.Value.Sent as ICommand);
                }

                sync.Wait(TimeSpan.FromSeconds(2));
            }

            // assert
            // check that the sent message is the same as the received message
            // by serializing each and comparing the string
            Assert.AreEqual(0, sync.CurrentCount); // asserts all messages were received

            foreach (var cmd in cmds)
            {
                Assert.AreEqual(
                    JsonConvert.SerializeObject(cmd.Value.Sent),
                    JsonConvert.SerializeObject(cmd.Value.Received));
            }
        }
Пример #2
0
        public async Task CommandsAreProperlySerialized()
        {
            // arrange
            var cmds = new ConcurrentDictionary<Type, SentReceivedMessage>();

            cmds[typeof(Command<DoSimple>)] = new SentReceivedMessage
            {
                Sent = new Command<DoSimple>("cmd1", new DoSimple { Value = "0" })
            };
            cmds[typeof(Command<DoComplex>)] = new SentReceivedMessage
            {
                Sent = new Command<DoComplex>("cmd2", new DoComplex { IntValue = 10, StringValue = "abc" })
            };
            cmds[typeof(Command<DoSimpleStuff>)] = new SentReceivedMessage
            {
                Sent = new Command<DoSimpleStuff>("cmd3", DoSimpleStuff.Create())
            };
            cmds[typeof(Command<DoComplexStuff>)] = new SentReceivedMessage
            {
                Sent = new Command<DoComplexStuff>("cmd4", DoComplexStuff.Create())
            };
            cmds[typeof(Command<DoGenericStuff<DoComplexStuff>>)] = new SentReceivedMessage
            {
                Sent = new Command<DoGenericStuff<DoComplexStuff>>("cmd5", new DoGenericStuff<DoComplexStuff> { Stuff = DoComplexStuff.Create() })
            };
            cmds[typeof(Command<DoNonGenericStuff>)] = new SentReceivedMessage
            {
                Sent = new Command<DoNonGenericStuff>("cmd6", new DoNonGenericStuff { Stuff = DoSimpleStuff.Create() })
            };

            var sync = new CountdownEvent(cmds.Count);

            var ctx = DomainContext.Configure()
                                         .Bus(b =>
                                             b.WithProcessor(p =>
                                                 p.Endpoint("p1")
                                                  .RegisterHandler(new TestCommandHandler(cmd =>
                                                  {
                                                      // stores the received message and signals completion
                                                      cmds[cmd.GetType()].Received = cmd;
                                                      sync.Signal();
                                                  })))
                                          )
                                          .Start();
            // act
            using (ctx)
            {
                foreach (var cmd in cmds)
                {
                    await ctx.CommandBus.Send(cmd.Value.Sent as ICommand);
                }

                sync.Wait(TimeSpan.FromSeconds(2));
            }

            // assert
            // check that the sent message is the same as the received message
            // by serializing each and comparing the string
            Assert.AreEqual(0, sync.CurrentCount); // asserts all messages were received

            foreach (var cmd in cmds)
            {
                Assert.AreEqual(
                    JsonConvert.SerializeObject(cmd.Value.Sent),
                    JsonConvert.SerializeObject(cmd.Value.Received));
            }
        }