Esempio n. 1
0
        public void When_expiring_a_cache_entry_no_longer_there()
        {
            //Arrange
            var outbox = new InMemoryOutbox()
            {
                //set some aggressive outbox reclamation times for the test
                EntryTimeToLive        = TimeSpan.FromMilliseconds(50),
                ExpirationScanInterval = TimeSpan.FromMilliseconds(100)
            };

            var messageId    = Guid.NewGuid();
            var messageToAdd = new Message(
                new MessageHeader(messageId, "test_topic", MessageType.MT_DOCUMENT),
                new MessageBody("message body"));


            //Act
            outbox.Add(messageToAdd);

            Task.Delay(500).Wait(); //give the entry to time to expire

            //Trigger a cache clean
            outbox.Get(messageId);

            Task.Delay(500).Wait(); //Give the sweep time to run

            var message = outbox.Get(messageId);

            //Assert
            message.Should().BeNull();
        }
        public void When_shrinking_evict_oldest_messages_first()
        {
            //Arrange
            const int limit = 5;

            var outbox = new InMemoryOutbox()
            {
                EntryLimit           = limit,
                CompactionPercentage = 0.5
            };

            var messageIds = new Guid[] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() };

            for (int i = 0; i <= limit - 1; i++)
            {
                outbox.Add(new MessageTestDataBuilder().WithId(messageIds[i]));
                Task.Delay(1000);
            }

            //Act
            outbox.EntryCount.Should().Be(5);

            outbox.Add(new MessageTestDataBuilder());

            Task.Delay(500).Wait(); //Allow time for compaction to run

            //should clear compaction percentage from the outbox, and then add  the  new one
            outbox.Get(messageIds[0]).Should().BeNull();
            outbox.Get(messageIds[1]).Should().BeNull();
            outbox.Get(messageIds[2]).Should().BeNull();
            outbox.Get(messageIds[3]).Should().NotBeNull();
            outbox.Get(messageIds[4]).Should().NotBeNull();
        }
        public void When_Posting_With_An_In_Memory_Outbox()
        {
            _commandProcessor.Post(_myCommand);

            //_should_store_the_message_in_the_sent_command_message_repository
            _outbox.Get(_myCommand.Id).Should().NotBeNull();
            //_should_send_a_message_via_the_messaging_gateway
            _fakeMessageProducer.MessageWasSent.Should().BeTrue();
            // _should_convert_the_command_into_a_message
            _outbox.Get(_myCommand.Id).Should().Be(_message);
        }
Esempio n. 4
0
        public void When_over_ttl_but_no_sweep_run()
        {
            //Arrange
            var outbox = new InMemoryOutbox()
            {
                //set low time to live but long sweep perioc
                EntryTimeToLive        = TimeSpan.FromMilliseconds(50),
                ExpirationScanInterval = TimeSpan.FromMilliseconds(10000)
            };

            var messageId    = Guid.NewGuid();
            var messageToAdd = new Message(
                new MessageHeader(messageId, "test_topic", MessageType.MT_DOCUMENT),
                new MessageBody("message body"));


            //Act
            outbox.Add(messageToAdd);

            Task.Delay(50).Wait();    //TTL has passed, but not expired yet

            var message = outbox.Get(messageId);

            //Assert
            message.Should().NotBeNull();
            message.Id.Should().Be(messageId);
        }
Esempio n. 5
0
        public void When_paging_a_list_of_messages()
        {
            //Arrange
            var outbox = new InMemoryOutbox();

            for (int i = 0; i <= 8; i++) // -- nine items
            {
                outbox.Add(new MessageTestDataBuilder());
            }

            //Act
            var firstPage  = outbox.Get(5, 1);
            var secondPage = outbox.Get(5, 2);

            //Assert
            firstPage.Count().Should().Be(5);
            secondPage.Count().Should().Be(4); // -- only 4 on the second page
        }
Esempio n. 6
0
        public void When_there_are_multiple_items_retrieve_by_id()
        {
            //Arrange
            var outbox = new InMemoryOutbox();

            var messageIds = new Guid[] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), };

            for (int i = 0; i <= 4; i++)
            {
                outbox.Add(new MessageTestDataBuilder().WithId(messageIds[i]));
            }

            //Act
            var message = outbox.Get(messageIds[2]);

            //Assert
            message.Id.Should().Be(messageIds[2]);
        }
Esempio n. 7
0
        public void When_reading_from_outbox()
        {
            //Arrange
            var outbox = new InMemoryOutbox();

            var messageId    = Guid.NewGuid();
            var messageToAdd = new Message(
                new MessageHeader(messageId, "test_topic", MessageType.MT_DOCUMENT),
                new MessageBody("message body"));


            //Act
            outbox.Add(messageToAdd);

            var retrievedMessage = outbox.Get(messageId);

            //Assert
            retrievedMessage.Should().NotBeNull();
            retrievedMessage.Id.Should().Be(messageId);
            retrievedMessage.Header.Topic.Should().Be(messageToAdd.Header.Topic);
            retrievedMessage.Header.MessageType.Should().Be(messageToAdd.Header.MessageType);
            retrievedMessage.Body.Value.Should().Be(messageToAdd.Body.Value);
        }