Esempio n. 1
0
        public void Enqueuing_more_than_enough_items_dispatches_them_and_then_waits_to_dispatch_the_rest()
        {
            // Arrange
            var list        = new List <int>();
            var accumulator = new TimedAccumulator <int>(items => {
                lock (list) {
                    list.AddRange(items);
                }
            }, 3, 100.Milliseconds(), TaskTimerFactory.Default);

            // Act
            accumulator.Enqueue(1);
            accumulator.Enqueue(2);
            accumulator.Enqueue(3);
            accumulator.Enqueue(4);
            accumulator.Enqueue(5);

            // Assert
            Assert.AreEqual(3, list.Count, "accumulated items where not dispatched");
            Assert.AreEqual(1, list[0], "item[0] did not match");
            Assert.AreEqual(2, list[1], "item[1] did not match");
            Assert.AreEqual(3, list[2], "item[2] did not match");
            Assert.IsTrue(Wait.For(() => {
                lock (list) {
                    return(list.Count == 5);
                }
            }, 1.Seconds()), "accumulated items where not dispatched");
            Assert.AreEqual(4, list[3], "item[3] did not match");
            Assert.AreEqual(5, list[4], "item[4] did not match");
        }
Esempio n. 2
0
        public void Enqueuing_too_few_items_delays_dispatching_them_twice_in_a_row()
        {
            // Arrange
            var list        = new List <int>();
            var accumulator = new TimedAccumulator <int>(items => {
                lock (list) {
                    list.AddRange(items);
                }
            }, 3, 100.Milliseconds(), TaskTimerFactory.Default);

            // Act 1
            accumulator.Enqueue(1);

            // Assert 1
            Assert.IsTrue(Wait.For(() => {
                lock (list) {
                    return(list.Count == 1);
                }
            }, 1.Seconds()), "accumulated items where not dispatched (act 1)");
            Assert.AreEqual(1, list[0], "item[0] did not match (act 1)");
            list.Clear();

            // Act 2
            accumulator.Enqueue(2);

            // Assert 2
            Assert.IsTrue(Wait.For(() => {
                lock (list) {
                    return(list.Count == 1);
                }
            }, 1.Seconds()), "accumulated items where not dispatched (act 2)");
            Assert.AreEqual(2, list[0], "item[0] did not match (act 2)");
        }
Esempio n. 3
0
        public void Enqueuing_more_than_enough_items_dispatches_them_and_then_waits_to_dispatch_the_rest()
        {
            // Arrange
            var list = new List<int>();
            var accumulator = new TimedAccumulator<int>(items => {
                lock(list) {
                    list.AddRange(items);
                }
            }, 3, 100.Milliseconds(), TaskTimerFactory.Default);

            // Act
            accumulator.Enqueue(1);
            accumulator.Enqueue(2);
            accumulator.Enqueue(3);
            accumulator.Enqueue(4);
            accumulator.Enqueue(5);

            // Assert
            Assert.AreEqual(3, list.Count, "accumulated items where not dispatched");
            Assert.AreEqual(1, list[0], "item[0] did not match");
            Assert.AreEqual(2, list[1], "item[1] did not match");
            Assert.AreEqual(3, list[2], "item[2] did not match");
            Assert.IsTrue(Wait.For(() => {
                lock(list) {
                    return list.Count == 5;
                }
            }, 1.Seconds()), "accumulated items where not dispatched");
            Assert.AreEqual(4, list[3], "item[3] did not match");
            Assert.AreEqual(5, list[4], "item[4] did not match");
        }
Esempio n. 4
0
 //--- Constructors ---
 /// <summary>
 /// Constructor for creating an instance.
 /// </summary>
 /// <param name="client">ISqsClient instance.</param>
 /// <param name="queueName">Queue name.</param>
 /// <param name="timerFactory">TimerFactory instance.</param>
 public SqsQueueDelayedSendClient(ISqsClient client, SqsQueueName queueName, TaskTimerFactory timerFactory)
 {
     if(client == null) {
         throw new ArgumentNullException("client");
     }
     this.QueueName = queueName;
     _client = client;
     _timedSendAccumulator = new TimedAccumulator<KeyValuePair<int, string>>(items => AsyncUtil.ForkBackgroundSender(() => BatchSendMessages(items)), SqsUtils.MAX_NUMBER_OF_BATCH_SEND_MESSAGES, AUTOFLUSH_TIME, timerFactory);
 }
Esempio n. 5
0
        //--- Constructors ---

        /// <summary>
        /// Constructor for creating an instance.
        /// </summary>
        /// <param name="client">ISqsClient instance.</param>
        /// <param name="queueName">Queue name.</param>
        /// <param name="timerFactory">TimerFactory instance.</param>
        public SqsQueueDelayedSendClient(ISqsClient client, SqsQueueName queueName, TaskTimerFactory timerFactory)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }
            this.QueueName        = queueName;
            _client               = client;
            _timedSendAccumulator = new TimedAccumulator <KeyValuePair <int, string> >(items => AsyncUtil.ForkBackgroundSender(() => BatchSendMessages(items)), SqsUtils.MAX_NUMBER_OF_BATCH_SEND_MESSAGES, AUTOFLUSH_TIME, timerFactory);
        }
Esempio n. 6
0
        public void Enqueuing_enough_items_dispatches_them()
        {
            // Arrange
            var list        = new List <int>();
            var accumulator = new TimedAccumulator <int>(items => {
                lock (list) {
                    list.AddRange(items);
                }
            }, 3, 5.Seconds(), TaskTimerFactory.Default);

            // Act
            accumulator.Enqueue(1);
            accumulator.Enqueue(2);
            accumulator.Enqueue(3);

            // Assert
            Assert.AreEqual(3, list.Count, "accumulated items where not dispatched");
            Assert.AreEqual(1, list[0], "item[0] did not match");
            Assert.AreEqual(2, list[1], "item[1] did not match");
            Assert.AreEqual(3, list[2], "item[2] did not match");
        }
Esempio n. 7
0
        public void Enqueuing_enough_items_dispatches_them()
        {
            // Arrange
            var list = new List<int>();
            var accumulator = new TimedAccumulator<int>(items => {
                lock(list) {
                    list.AddRange(items);
                }
            }, 3, 5.Seconds(), TaskTimerFactory.Default);

            // Act
            accumulator.Enqueue(1);
            accumulator.Enqueue(2);
            accumulator.Enqueue(3);

            // Assert
            Assert.AreEqual(3, list.Count, "accumulated items where not dispatched");
            Assert.AreEqual(1, list[0], "item[0] did not match");
            Assert.AreEqual(2, list[1], "item[1] did not match");
            Assert.AreEqual(3, list[2], "item[2] did not match");
        }
Esempio n. 8
0
        public void Enqueuing_too_few_items_delays_dispatching_them()
        {
            // Arrange
            var list = new List<int>();
            var accumulator = new TimedAccumulator<int>(items => {
                lock(list) {
                    list.AddRange(items);
                }
            }, 3, 100.Milliseconds(), TaskTimerFactory.Default);

            // Act
            accumulator.Enqueue(1);

            // Assert
            Assert.IsTrue(Wait.For(() => {
                lock(list) {
                    return list.Count == 1;
                }
            }, 1.Seconds()), "accumulated items where not dispatched");
            Assert.AreEqual(1, list[0], "item[0] did not match");
        }