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); }
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); }
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 }
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]); }
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); }