public void CloseWhileQueueRuns()
 {
     var queue = new ScaleoutTaskQueue(new TraceSource("Queue"), "0", new ScaleoutConfiguration() { RetryOnError = true });
     queue.Open();
     queue.Enqueue(_ => Task.Delay(50), null);
     queue.Enqueue(_ => Task.Delay(100), null);
     queue.Enqueue(_ => Task.Delay(150), null);
     queue.Close();
 }
        public void ErrorOnSendBuffers()
        {
            int x = 0;
            var queue = new ScaleoutTaskQueue(new TraceSource("Queue"), "0", new ScaleoutConfiguration() { RetryOnError = true });
            queue.Open();
            queue.Enqueue(_ => { throw new InvalidOperationException(); }, null);
            queue.Enqueue(_ =>
            {
                x++;
                return TaskAsyncHelper.Empty;
            },
            null);

            queue.Enqueue(_ =>
            {
                x++;
                return TaskAsyncHelper.Empty;
            },
            null);

            Assert.Equal(0, x);
        }
        public void InitialToBufferingToOpenToSend()
        {
            int x = 0;
            var queue = new ScaleoutTaskQueue(new TraceSource("Queue"), "0", new ScaleoutConfiguration() { RetryOnError = true });
            queue.SetError(new Exception());
            queue.Open();
            queue.Enqueue(_ =>
            {
                x++;
                return TaskAsyncHelper.Empty;
            },
            null).Wait();

            Assert.Equal(1, x);
        }
 public void ErrorOnSendThrowsNextTime()
 {
     var queue = new ScaleoutTaskQueue(new TraceSource("Queue"), "0", new ScaleoutConfiguration());
     queue.Open();
     queue.Enqueue(_ => { throw new InvalidOperationException(); }, null);
     Assert.Throws<InvalidOperationException>(() => queue.Enqueue(_ => TaskAsyncHelper.Empty, null));
 }
        public void SendsBeforeBufferingShouldBeCaptured()
        {
            int x = 0;
            var queue = new ScaleoutTaskQueue(new TraceSource("Queue"), "0", new ScaleoutConfiguration() { RetryOnError = true });

            queue.Enqueue(_ =>
            {
                x++;
                return TaskAsyncHelper.Empty;
            },
            null);

            queue.SetError(new Exception());

            Task task = queue.Enqueue(_ =>
            {
                x++;
                return TaskAsyncHelper.Empty;
            },
            null);

            queue.Open();

            task.Wait();

            Assert.Equal(2, x);
        }
 public void SendAfterCloseThenOpenRemainsClosed()
 {
     var queue = new ScaleoutTaskQueue(new TraceSource("Queue"), "0", new ScaleoutConfiguration() { RetryOnError = true });
     queue.Open();
     queue.Enqueue(_ => Task.Delay(50), null);
     queue.Close();
     queue.Open();
     Assert.Throws<InvalidOperationException>(() => queue.Enqueue(_ => TaskAsyncHelper.Empty, null));
 }
        public void OpenAfterErrorRunsQueue()
        {
            int x = 0;
            var queue = new ScaleoutTaskQueue(new TraceSource("Queue"), "0", new ScaleoutConfiguration() { RetryOnError = true });
            queue.Open();
            queue.Enqueue(_ => { throw new InvalidOperationException(); }, null);
            queue.Enqueue(_ =>
            {
                x++;
                return TaskAsyncHelper.Empty;
            },
            null);

            var task = queue.Enqueue(_ =>
            {
                x++;
                return TaskAsyncHelper.Empty;
            },
            null);

            queue.Open();

            task.Wait();

            Assert.Equal(2, x);
        }