public void check_response_handled()
        {
            var sampleMessage = new SampleTestCommand(10);
            sampleMessage.SetContextData(MessagesConstants.ReplyToHeader, "test");
            _bus.Send(sampleMessage);
            var handled = _handler.Reset.WaitOne(10000);
            //cycle until we found handled message on tracking
            List<TrackedMessageModel> tracks = null;
            DateTime startTime = DateTime.Now;
            do
            {
                Thread.Sleep(50);
                tracks = _messages.FindAll().ToList();
            }
            while (
                    tracks.Count < 2 && //command tracking and commandhandled tracking
                    DateTime.Now.Subtract(startTime).TotalSeconds < 4
            );

            var track = tracks.Single(t => t.MessageId == sampleMessage.MessageId.ToString());
            Assert.That(track.Description, Is.EqualTo(sampleMessage.Describe()));
            Assert.That(track.StartedAt, Is.Not.Null);
            Assert.That(track.CompletedAt, Is.Not.Null);

            var handledTrack = tracks.Single(t => t.MessageId != sampleMessage.MessageId.ToString());
            CommandHandled commandHandled = (CommandHandled)handledTrack.Message;
            Assert.That(commandHandled.CommandId, Is.EqualTo(sampleMessage.MessageId));
            Assert.That(handledTrack.Description, Is.StringContaining(sampleMessage.MessageId.ToString()));
            Assert.That(handledTrack.Description, Is.StringContaining("Handled!"));
        }
        public void verify_elaboration_tracking()
        {
            var sampleMessage = new SampleTestCommand(10);
            _bus.Send(sampleMessage);
            var handled = _handler.Reset.WaitOne(10000);
            //cycle until we found handled message on tracking
            TrackedMessageModel track = null;
            DateTime startTime = DateTime.Now;
            do
            {
                Thread.Sleep(50);
                var tracks = _messages.FindAll().ToList();
                Assert.That(tracks, Has.Count.EqualTo(1));
                track = tracks.Single();
            }
            while (
                    track.CompletedAt == null &&
                    DateTime.Now.Subtract(startTime).TotalSeconds < 4
            );

            Assert.That(track.MessageId, Is.EqualTo(sampleMessage.MessageId.ToString()));
            Assert.That(track.LastExecutionStartTime, Is.Not.Null);
            Assert.That(track.ExecutionCount, Is.EqualTo(1));
            Assert.That(track.ExecutionStartTimeList.Length, Is.EqualTo(1));
        }
        public void Test_extensions_write_object_to_command_Context_int()
        {
            var cmd = new SampleTestCommand(1);

            cmd.SetContextData("data", 42);
            Assert.That(cmd.GetContextData <int>("data"), Is.EqualTo(42));
        }
        public async Task Check_basic_tracking()
        {
            var sampleMessage = new SampleTestCommand(10);
            await _bus.Send(sampleMessage).ConfigureAwait(false);

            _handler.Reset.WaitOne(10000);

            //cycle until we found handled message on tracking
            DateTime            startTime = DateTime.Now;
            TrackedMessageModel track;

            do
            {
                Thread.Sleep(50);
                var tracks = _messages.FindAll().ToList();
                Assert.That(tracks, Has.Count.EqualTo(1));
                track = tracks.Single();
            }while (track.CompletedAt == null &&
                    DateTime.Now.Subtract(startTime).TotalSeconds < 4
                    );

            Assert.That(track.MessageId, Is.EqualTo(sampleMessage.MessageId.ToString()));
            Assert.That(track.Description, Is.EqualTo(sampleMessage.Describe()));
            Assert.That(track.StartedAt, Is.Not.Null);
            Assert.That(track.CompletedAt, Is.Not.Null);
            Assert.That(track.Completed, Is.True);
            Assert.That(track.Success, Is.True);
        }
        public void Test_extensions_write_object_to_command_Context_mismatch_throw()
        {
            var cmd = new SampleTestCommand(1);

            cmd.SetContextData("data", 42);

            Assert.Throws <InvalidCastException>(() => cmd.GetContextData <DateTime>("data"));
        }
        public void Test_extensions_write_object_to_command_Context_dateTime_nullable()
        {
            var cmd  = new SampleTestCommand(1);
            var data = DateTime.Now;

            cmd.SetContextData("data", data);
            Assert.That(cmd.GetContextData <DateTime?>("data"), Is.EqualTo(data));
        }
        public void Test_extensions_write_object_to_command_Context_dateTime_from_string()
        {
            var cmd  = new SampleTestCommand(1);
            var data = DateTime.Now;

            cmd.SetContextData("data", JsonConvert.SerializeObject(data, CommandExtensions.JsonSerializerSettings));
            Assert.That(cmd.GetContextData <DateTime>("data"), Is.EqualTo(data));
        }
        public void Test_extensions_datetime_object()
        {
            var cmd  = new SampleTestCommand(1);
            var data = new TestObject(StringValue, 42);

            cmd.SetContextData("obj", data);
            Assert.That(cmd.GetContextData <TestObject>("obj").Value, Is.EqualTo(StringValue));
            Assert.That(cmd.GetContextData <TestObject>("obj").Age, Is.EqualTo(42));
        }
        public void verify_multiple_start_execution_time()
        {
            SampleTestCommand cmd = new SampleTestCommand(1);
            sut.Started(cmd);
            DateTime startDate1 = new DateTime(2000, 01, 01, 1, 1, 42, DateTimeKind.Utc);
            DateTime startDate2 = startDate1.AddSeconds(1);
            sut.ElaborationStarted(cmd.MessageId, startDate1);
            sut.ElaborationStarted(cmd.MessageId, startDate2);

            var handledTrack = _messages.AsQueryable().Single(t => t.MessageId == cmd.MessageId.ToString());
            Assert.That(handledTrack.LastExecutionStartTime, Is.EqualTo(startDate2));
            Assert.That(handledTrack.ExecutionStartTimeList, Is.EquivalentTo(new[] { startDate1, startDate2 }));
        }
        public void Verify_multiple_start_do_not_push_too_much_data()
        {
            SampleTestCommand cmd = new SampleTestCommand(1);

            sut.Started(cmd);
            DateTime startDate1 = new DateTime(2000, 01, 01, 1, 1, 42, DateTimeKind.Utc);

            for (int i = 0; i < 100; i++)
            {
                sut.ElaborationStarted(cmd, startDate1.AddMinutes(i));
            }

            var handledTrack = _messages.AsQueryable().Single(t => t.MessageId == cmd.MessageId.ToString());

            Assert.That(handledTrack.ExecutionStartTimeList.Length, Is.EqualTo(10));
            var last = handledTrack.ExecutionStartTimeList.Last();

            Assert.That(last, Is.EqualTo(startDate1.AddMinutes(99)));
        }