Example #1
0
        public Task CreateActivities(int number)
        {
            var tasks = new Task[number];

            for (int i = 0; i < number; i++)
            {
                AccountCreatedMessage message = new AccountCreatedMessage(i, $"User {i}", "UserRef {i}");
                var messageContext            = new FakeMessage <AccountCreatedMessage>(message, Guid.NewGuid().ToString());

                MessageContextProvider.StoreMessageContext(messageContext);

                tasks[i] = ActivitySaver
                           .SaveActivity(message, ActivityType.AccountCreated)
                           .ContinueWith(t => CreatedActivities.Add(t.Result))
                           .ContinueWith(t => MessageContextProvider.ReleaseMessageContext(messageContext));
            }

            return(Task.WhenAll(tasks)
                   .ContinueWith(task =>
            {
                Assert.IsTrue(tasks.All(t => t.IsCompleted), "At least one creation task did not complete");

                var firstFaulted = tasks.FirstOrDefault(t => t.IsFaulted);
                if (firstFaulted != null)
                {
                    Assert.Fail($"At least one creation task faulted.{firstFaulted.Exception.Flatten().Message}");
                }

                Assert.AreEqual(number, CreatedActivities.Count, "Incorrect number of accounts created");
            }));
        }
Example #2
0
        public void StoreMessageContext_NullMessageContent_ThrowsException()
        {
            var mcp     = new MessageContextProvider();
            var message = new Mock <IMessage <object> >();

            Assert.Throws <MessageContextException>(() => mcp.StoreMessageContext(message.Object));
        }
Example #3
0
        public void GetContextForMessageBody_ValidMessageContent_ShouldBeAbleToHandleMultipleParallelMessages()
        {
            // Arrange
            var mcp = new MessageContextProvider();

            var messages = new List <Mock <IMessage <object> > >();

            for (int i = 0; i < 500; i++)
            {
                var messageMock    = new Mock <IMessage <object> >();
                var messageContent = new object();
                messageMock.Setup(mc => mc.Content).Returns(messageContent);
                messages.Add(messageMock);
            }

            Parallel.ForEach(messages, message =>
            {
                mcp.StoreMessageContext(message.Object);

                // Act
                var messageContext1 = mcp.GetContextForMessageBody(message.Object.Content);
                var messageContext2 = mcp.GetContextForMessageBody(message.Object.Content);

                // Assert
                Assert.AreEqual(message.Object.Content, messageContext1.MessageContent);
                Assert.AreEqual(messageContext1, messageContext2);
            });
        }
Example #4
0
        public void Release_ValidMessageContent_ShouldNotThrowExcptionIfContentIsReleasedOnce()
        {
            // Arrange
            var mcp     = new MessageContextProvider();
            var message = new Mock <IMessage <object> >();

            message.Setup(mc => mc.Content).Returns(new object());
            mcp.StoreMessageContext(message.Object);

            // Act
            mcp.ReleaseMessageContext(message.Object);
        }
Example #5
0
        public void StoreMessageContext_ValidMessageContent_ShouldNotThrowException()
        {
            // Arrange
            var mcp     = new MessageContextProvider();
            var message = new Mock <IMessage <object> >();

            message.Setup(mc => mc.Content).Returns(new object());

            // Act
            mcp.StoreMessageContext(message.Object);

            // Assert
            Assert.Pass("Did not get an exception");
        }
Example #6
0
        public void GetContextForMessageBody_ValidMessageContent_ShouldBeAvailableAfterStore()
        {
            // Arrange
            var mcp            = new MessageContextProvider();
            var message        = new Mock <IMessage <object> >();
            var messageContent = new object();

            message.Setup(mc => mc.Content).Returns(messageContent);
            mcp.StoreMessageContext(message.Object);

            // Act
            var messageContext = mcp.GetContextForMessageBody(messageContent);

            // Assert
            Assert.IsNotNull(messageContext);
        }
Example #7
0
        public void GetContextForMessageBody_ValidMessageContent_ShouldBeSameInstanceRetrievedWithEachCallForTheSameContent()
        {
            // Arrange
            var mcp            = new MessageContextProvider();
            var message        = new Mock <IMessage <object> >();
            var messageContent = new object();

            message.Setup(mc => mc.Content).Returns(messageContent);
            mcp.StoreMessageContext(message.Object);

            // Act
            var messageContext1 = mcp.GetContextForMessageBody(messageContent);
            var messageContext2 = mcp.GetContextForMessageBody(messageContent);

            // Assert
            Assert.AreEqual(messageContext1, messageContext2);
        }
Example #8
0
        public void StoreMessageContext_NullMessage_ThrowsException()
        {
            var mcp = new MessageContextProvider();

            Assert.Throws <MessageContextException>(() => mcp.StoreMessageContext((IMessage <Object>)null));
        }