public void ShouldStopBecauseOfExceptionOnAnotherThread()
        {
            var handshake = Substitute.For <IStormCommandIn>();

            var reader = Substitute.For <IStormReader>();

            reader.ReadInitialHandshakeMessage().Returns(handshake);
            reader.ReadCommand().Returns(new StormTuple(Substitute.For <IProtocolReaderFormat>(), 1, "1", "2", 1, new object[0]));

            var writer = Substitute.For <IBoltWriter>();

            var subjectUnderTest = new TestBolt(reader, writer);

            new Thread(() =>
            {
                subjectUnderTest.Started.WaitOne();
                throw new Exception();
            })
            {
                IsBackground = true
            }.Start();

            subjectUnderTest.Run();
            Assert.IsTrue(subjectUnderTest.ExceptionCalled);
        }
        public void ShouldInitialiseThenReadCommandThenEndBecauseOfException()
        {
            var handshake = Substitute.For <IStormCommandIn>();
            var command   = Substitute.For <IStormCommandIn>();

            var reader = Substitute.For <IStormReader>();

            reader.ReadInitialHandshakeMessage().Returns(handshake);
            reader.ReadCommand().Returns(_ => command, _ => { throw new Exception(); });

            var writer = Substitute.For <IBoltWriter>();

            var subjectUnderTest = new TestBolt(reader, writer);

            subjectUnderTest.Run();

            handshake.Received().BeProcessesBy(subjectUnderTest);
            command.Received().BeProcessesBy(subjectUnderTest);
            writer.ReceivedWithAnyArgs().LogError("");
            Assert.IsTrue(subjectUnderTest.ExceptionCalled);
        }