Example #1
0
        public async Task HotPathNotificationTest()
        {
            await _sharedQueue.InitializeAsync(CancellationToken.None);

            var messageHandlerMock = new Mock <IMessageHandler>();
            var calls = 0;

            messageHandlerMock.Setup(m => m.TryExecuteAsync(It.IsAny <JObject>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(() =>
            {
                calls++;     // executed sequentially, no need interlocked
                return(new FunctionResult(true));
            });

            Assert.True(_sharedQueue.RegisterHandler("mockFunction1", messageHandlerMock.Object));

            // register another INotificationHandler to sharedQueueWatcher
            // so that we can tell when the sharedQueueListener is notified
            var notifies         = 0;
            var notificationMock = new Mock <INotificationCommand>();

            notificationMock.Setup(m => m.Notify()).Callback(() => Interlocked.Increment(ref notifies));
            _sharedContextProvider.GetOrCreateInstance <SharedQueueWatcher>(null)
            .Register(HostQueueNames.GetHostSharedQueueName(HostId), notificationMock.Object);

            await _sharedQueue.StartQueueAsync(CancellationToken.None);

            int max     = 10;
            var enqueue = new List <Task>();

            for (int i = 0; i < max; i++)
            {
                JObject message = JObject.Parse("{count:" + i + "}");
                enqueue.Add(_sharedQueue.EnqueueAsync(message, "mockFunction1", CancellationToken.None));
            }

            await Task.WhenAll(enqueue);

            // wait for dequeue
            await TestHelpers.Await(() => calls >= max, 1000, 200);

            await _sharedQueue.StopQueueAsync(CancellationToken.None);

            Assert.Equal(max, notifies);
            Assert.Equal(max, calls);
        }
Example #2
0
        private Task RunDummyEnqueueAsync(List <TestCase> testCases)
        {
            var enqueues = new List <Task>();
            int index    = 0;

            foreach (var testcase in testCases)
            {
                var functionMock = new Mock <IMessageHandler>();
                functionMock.Setup(m => m.TryExecuteAsync(It.IsAny <JObject>(), It.IsAny <CancellationToken>()))
                .ReturnsAsync(() => { testcase.CallCount++; return(new FunctionResult(true)); });
                if (testcase.Register)
                {
                    Assert.True(_sharedQueue.RegisterHandler(index.ToString(), functionMock.Object));
                }
                for (int i = 0; i < testcase.TotalEnqueues; i++)
                {
                    // enqueue an empty JObject
                    enqueues.Add(_sharedQueue.EnqueueAsync(JObject.Parse("{}"), index.ToString(), CancellationToken.None));
                }
                index++;
            }
            return(Task.WhenAll(enqueues));
        }