LCOV - code coverage report
Current view: top level - Cqrs.Tests/Cache - When_saving_two_aggregates_in_parallel.cs Hit Total Coverage
Test: doc-coverage.info Lines: 0 5 0.0 %
Date: 2017-07-26

          Line data    Source code
       1             : using System;
       2             : using System.Linq;
       3             : using System.Runtime.Caching;
       4             : using System.Threading.Tasks;
       5             : using cdmdotnet.Logging;
       6             : using Cqrs.Cache;
       7             : using Cqrs.Domain;
       8             : using Cqrs.Domain.Factories;
       9             : using Cqrs.Authentication;
      10             : using Cqrs.Tests.Substitutes;
      11             : using NUnit.Framework;
      12             : 
      13             : namespace Cqrs.Tests.Cache
      14             : {
      15             :         public class When_saving_two_aggregates_in_parallel
      16           0 :         {
      17             :                 private CacheRepository<ISingleSignOnToken> _rep1;
      18             :                 private TestAggregate _aggregate1;
      19             :                 private TestInMemoryEventStore _testStore;
      20             :                 private TestAggregate _aggregate2;
      21             : 
      22             :                 [SetUp]
      23           0 :                 public void Setup()
      24             :                 {
      25             :                         // This will clear the cache between runs.
      26             :                         var cacheKeys = MemoryCache.Default.Select(kvp => kvp.Key).ToList();
      27             :                         foreach (var cacheKey in cacheKeys)
      28             :                                 MemoryCache.Default.Remove(cacheKey);
      29             : 
      30             :                         _testStore = new TestInMemoryEventStore();
      31             :                         var dependencyResolver = new TestDependencyResolver(null);
      32             :                         var aggregateFactory = new AggregateFactory(dependencyResolver, dependencyResolver.Resolve<ILogger>());
      33             :                         _rep1 = new CacheRepository<ISingleSignOnToken>(new AggregateRepository<ISingleSignOnToken>(aggregateFactory, _testStore, new TestEventPublisher(), new NullCorrelationIdHelper()), _testStore);
      34             : 
      35             :                         _aggregate1 = new TestAggregate(Guid.NewGuid());
      36             :                         _aggregate2 = new TestAggregate(Guid.NewGuid());
      37             : 
      38             :                         _rep1.Save(_aggregate1);
      39             :                         _rep1.Save(_aggregate2);
      40             : 
      41             :                         var t1 = new Task(() =>
      42             :                                                                   {
      43             :                                                                           for (var i = 0; i < 100; i++)
      44             :                                                                           {
      45             :                                                                                   var aggregate = _rep1.Get<TestAggregate>(_aggregate1.Id);
      46             :                                                                                   aggregate.DoSomething();
      47             :                                                                                   _rep1.Save(aggregate);
      48             :                                                                           }
      49             :                                                                   });
      50             : 
      51             :                         var t2 = new Task(() =>
      52             :                                                                   {
      53             :                                                                           for (var i = 0; i < 100; i++)
      54             :                                                                           {
      55             :                                                                                   var aggregate = _rep1.Get<TestAggregate>(_aggregate2.Id);
      56             :                                                                                   aggregate.DoSomething();
      57             :                                                                                   _rep1.Save(aggregate);
      58             :                                                                           }
      59             :                                                                   });
      60             :                         t1.Start();
      61             :                         t2.Start();
      62             : 
      63             :                         Task.WaitAll(new[] {t1,t2});
      64             :                 }
      65             : 
      66             :                 [Test]
      67           0 :                 public void Should_not_get_more_than_one_event_with_same_id()
      68             :                 {
      69             :                         Assert.That(_testStore.Events.Select(x => x.Version).Count(), Is.EqualTo(_testStore.Events.Count));
      70             :                 }
      71             : 
      72             :                 [Test]
      73           0 :                 public void Should_save_all_events()
      74             :                 {
      75             :                         Assert.That(_testStore.Events.Count(), Is.EqualTo(202));
      76             :                 }
      77             : 
      78             :                 [Test]
      79           0 :                 public void Should_distibute_events_correct()
      80             :                 {
      81             :                         var aggregate1 = _rep1.Get<TestAggregate>(_aggregate2.Id);
      82             :                         Assert.That(aggregate1.DidSomethingCount, Is.EqualTo(100));
      83             :                         var aggregate2 = _rep1.Get<TestAggregate>(_aggregate2.Id);
      84             :                         Assert.That(aggregate2.DidSomethingCount, Is.EqualTo(100));
      85             :                 }
      86             :         }
      87             : }

Generated by: LCOV version 1.10