public static void HandleFakeMessagesRollback <TMessage>(IReceivedMessage <TMessage> message,
                                                                 int runTime,
                                                                 IncrementWrapper processedCount,
                                                                 long messageCount,
                                                                 ManualResetEventSlim waitForFinish,
                                                                 ConcurrentDictionary <string, int> haveIProcessedYouBefore)
            where TMessage : class
        {
            var key = message.CorrelationId.Id.Value.ToString();

            if (haveIProcessedYouBefore.ContainsKey(key))
            {
                if (runTime > 0)
                {
                    Thread.Sleep(runTime * 1000);
                }

                Interlocked.Increment(ref processedCount.ProcessedCount);
                haveIProcessedYouBefore[key] = haveIProcessedYouBefore[key] + 1;
                if (Interlocked.Read(ref processedCount.ProcessedCount) == messageCount)
                {
                    waitForFinish.Set();
                }
                return;
            }
            haveIProcessedYouBefore.TryAdd(key, 0);
            throw new OperationCanceledException("I don't feel like processing this message");
        }
        public static void HandleFakeMessages <TMessage>(IReceivedMessage <TMessage> message,
                                                         int runTime, IncrementWrapper processedCount, int messageCount, ManualResetEventSlim waitForFinish)
            where TMessage : class
        {
            if (runTime > 0)
            {
                Thread.Sleep(runTime * 1000);
            }

            Interlocked.Increment(ref processedCount.ProcessedCount);
            var body = message?.Body as FakeMessage;

            if (body != null)
            {
                var result = processedCount.AddId(body.Id);
                if (!result)
                {
                    waitForFinish.Set();
                }
            }
            if (Interlocked.Read(ref processedCount.ProcessedCount) == messageCount)
            {
                waitForFinish.Set();
            }
        }
        public static void HandleFakeMessagesError <TMessage>(IncrementWrapper processedCount, ManualResetEventSlim waitForFinish, int messageCount, IReceivedMessage <TMessage> message)
            where TMessage : class
        {
            var currentCount = processedCount.GetErrorCount(message.MessageId.Id.Value.ToString());

            if (currentCount == 0)
            {
                Assert.False(message.PreviousErrors.ContainsKey(typeof(IndexOutOfRangeException).ToString()));
            }
            else
            {
                var messageCountFromMessage = Convert.ToInt64(message.PreviousErrors[typeof(IndexOutOfRangeException).ToString()]);

                //our count and the message count should match
                Assert.Equal(currentCount, messageCountFromMessage);
            }

            Interlocked.Increment(ref processedCount.ProcessedCount);
            processedCount.AddUpdateErrorCount(message.MessageId.Id.Value.ToString(), currentCount + 1);
            if (Interlocked.Read(ref processedCount.ProcessedCount) == messageCount * 3)
            {
                waitForFinish.Set();
            }
            // ReSharper disable once UnthrowableException
            throw new IndexOutOfRangeException("The index is out of range");
        }
 public static void HandleFakeMessagesError(IncrementWrapper processedCount, ManualResetEventSlim waitForFinish, int messageCount)
 {
     Interlocked.Increment(ref processedCount.ProcessedCount);
     if (Interlocked.Read(ref processedCount.ProcessedCount) == messageCount * 3)
     {
         waitForFinish.Set();
     }
     // ReSharper disable once UnthrowableException
     throw new IndexOutOfRangeException("The index is out of range");
 }