Example #1
0
        public void ExecuteAllowsResubmitSameTask()
        {
            const int     nTasks   = 1000;
            AtomicInteger nRun     = new AtomicInteger(0);
            IRunnable     runnable = new Runnable(() => nRun.IncrementValueAndReturn());
            var           es       = new ThreadPoolExecutor(1, 30, Delays.Long, new ArrayBlockingQueue <IRunnable>(30));

            ExecutorService = es;
            for (int i = 0; i < nTasks; ++i)
            {
                for (; ;)
                {
                    try
                    {
                        es.Execute(runnable);
                        break;
                    }
                    catch (RejectedExecutionException)
                    {
                    }
                }
            }
            // enough time to run all tasks
            for (int i = 0; i < 20 && nRun.Value < nTasks; i++)
            {
                Thread.Sleep(Delays.Short);
            }
            Assert.AreEqual(nRun.Value, nTasks);
        }
 public override IMessage PreSend(IMessage message, IMessageChannel channel)
 {
     Assert.IsNotNull(message);
     return
         (MessageBuilder.FromMessage(message).SetHeader(GetType().Name, counter.IncrementValueAndReturn()).
          Build());
 }
Example #3
0
        public void ExecutionContinuesWithOneThreadWhenFactoryFailesToCreateMore()
        {
            var       nRun   = new AtomicInteger(0);
            const int nTasks = 100;

            var failingThreadFactory = MockRepository.GenerateStub <IThreadFactory>();

            failingThreadFactory.Stub(f => f.NewThread(Arg <IRunnable> .Is.NotNull))
            .Do(new Function <IRunnable, Thread>(r => new Thread(r.Run))).Repeat.Once();

            var es = new ThreadPoolExecutor(nTasks, nTasks, Delays.Long,
                                            new LinkedBlockingQueue <IRunnable>(), failingThreadFactory);

            ExecutorService = es;

            for (int k = 0; k < nTasks; ++k)
            {
                es.Execute(() => nRun.IncrementValueAndReturn());
            }
            for (int i = 0; i < 20 && nRun.Value < nTasks; i++)
            {
                Thread.Sleep(Delays.Short);
            }
            Assert.That(es.PoolSize, Is.EqualTo(1));
            Assert.AreEqual(nTasks, nRun.Value);
        }
            public override IMessage PostReceive(IMessage message, IMessageChannel channel)
            {
                Assert.IsNotNull(channel);
                Assert.That(channel, Is.SameAs(_channel));

                if (message != null)
                {
                    _messageCounter.IncrementValueAndReturn();
                }
                _invokedCounter.IncrementValueAndReturn();
                return(message);
            }
            public override void PostSend(IMessage message, IMessageChannel channel, bool sent)
            {
                Assert.IsNotNull(message);
                Assert.IsNotNull(channel);
                Assert.That(channel, Is.SameAs(_channel));

                if (sent)
                {
                    _sentCounter.IncrementValueAndReturn();
                }
                _invokedCounter.IncrementValueAndReturn();
            }
 protected int NextThreadId(bool noException)
 {
     if (noException || ThreadCount.Value < Threshold)
     {
         var next = ThreadCount.IncrementValueAndReturn();
         if (next <= Threshold)
         {
             return(next);
         }
         if (noException)
         {
             return(-next);
         }
     }
     throw new RejectedExecutionException();
 }
Example #7
0
 public bool Accept(IMessage message)
 {
     _counter.IncrementValueAndReturn();
     return(_shouldAccept);
 }
 public override bool PreReceive(IMessageChannel channel)
 {
     counter.IncrementValueAndReturn();
     return(false);
 }
 public override IMessage PreSend(IMessage message, IMessageChannel channel)
 {
     Assert.IsNotNull(message);
     counter.IncrementValueAndReturn();
     return(null);
 }
 public int Next()
 {
     return(count.IncrementValueAndReturn());
 }
Example #11
0
        public void TestReplyToThreeDeep()
        {
            var mockConnectionFactory = new Mock <ConnectionFactory>();
            var mockConnection        = new Mock <IConnection>();
            var mockChannel           = new Mock <IModel>();

            mockConnectionFactory.Setup(m => m.CreateConnection()).Returns(mockConnection.Object);
            mockConnection.Setup(m => m.IsOpen).Returns(true);
            mockConnection.Setup(m => m.CreateModel()).Returns(mockChannel.Object);
            mockChannel.Setup(m => m.CreateBasicProperties()).Returns(() => new BasicProperties());

            var template   = new RabbitTemplate(new SingleConnectionFactory(mockConnectionFactory.Object));
            var replyQueue = new Queue("new.replyTo");

            template.ReplyQueue = replyQueue;

            var messageProperties = new MessageProperties();

            messageProperties.ReplyTo = "replyTo2";
            messageProperties.SetHeader(RabbitTemplate.STACKED_REPLY_TO_HEADER, "replyTo1");
            messageProperties.SetHeader(RabbitTemplate.STACKED_CORRELATION_HEADER, "a");
            var message = new Message(Encoding.UTF8.GetBytes("Hello, world!"), messageProperties);
            var props   = new List <IBasicProperties>();

            var count             = new AtomicInteger();
            var nestedReplyTo     = new List <string>();
            var nestedReplyStack  = new List <string>();
            var nestedCorrelation = new List <string>();

            mockChannel.Setup(m => m.BasicPublish(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <bool>(), It.IsAny <IBasicProperties>(), It.IsAny <byte[]>())).Callback <string, string, bool, bool, IBasicProperties, byte[]>
            (
                (a1, a2, a3, a4, a5, a6) =>
            {
                var basicProps = a5;
                props.Add(basicProps);
                var springProps  = new DefaultMessagePropertiesConverter().ToMessageProperties(basicProps, null, "UTF-8");
                var replyMessage = new Message(Encoding.UTF8.GetBytes("!dlrow olleH"), springProps);
                if (count.IncrementValueAndReturn() < 2)
                {
                    var anotherMessage = new Message(Encoding.UTF8.GetBytes("Second"), springProps);
                    replyMessage       = template.SendAndReceive(anotherMessage);
                    nestedReplyTo.Add(replyMessage.MessageProperties.ReplyTo);
                    nestedReplyStack.Add((string)replyMessage.MessageProperties.Headers[RabbitTemplate.STACKED_REPLY_TO_HEADER]);
                    nestedCorrelation.Add((string)replyMessage.MessageProperties.Headers[RabbitTemplate.STACKED_CORRELATION_HEADER]);
                }

                template.OnMessage(replyMessage);
            });

            var reply = template.SendAndReceive(message);

            Assert.IsNotNull(reply);

            Assert.AreEqual(2, props.Count);
            var basicProperties = props[0];

            Assert.AreEqual("new.replyTo", basicProperties.ReplyTo);
            Assert.AreEqual("replyTo2:replyTo1", basicProperties.Headers[RabbitTemplate.STACKED_REPLY_TO_HEADER]);
            Assert.IsTrue(((string)basicProperties.Headers[RabbitTemplate.STACKED_CORRELATION_HEADER]).EndsWith(":a"));

            basicProperties = props[1];
            Assert.AreEqual("new.replyTo", basicProperties.ReplyTo);
            Assert.AreEqual("new.replyTo:replyTo2:replyTo1", basicProperties.Headers[RabbitTemplate.STACKED_REPLY_TO_HEADER]);
            Assert.IsTrue(((string)basicProperties.Headers[RabbitTemplate.STACKED_CORRELATION_HEADER]).EndsWith(":a"));

            Assert.AreEqual("replyTo1", reply.MessageProperties.Headers[RabbitTemplate.STACKED_REPLY_TO_HEADER]);
            Assert.AreEqual("a", reply.MessageProperties.Headers[RabbitTemplate.STACKED_CORRELATION_HEADER]);

            Assert.AreEqual(1, nestedReplyTo.Count);
            Assert.AreEqual(1, nestedReplyStack.Count);
            Assert.AreEqual(1, nestedCorrelation.Count);
            Assert.AreEqual("replyTo2:replyTo1", nestedReplyStack[0]);
            Assert.IsTrue(nestedCorrelation[0].EndsWith(":a"));
        }
 public override IMessage PreSend(IMessage message, IMessageChannel channel)
 {
     _sendCount.IncrementValueAndReturn();
     return(message);
 }