Exemple #1
0
        public void ConstantRateEntityRecoveryStrategy_must_recover_entities()
        {
            var entities        = ImmutableHashSet.Create <EntityId>("1", "2", "3", "4", "5");
            var startTime       = DateTime.UtcNow;
            var resultWithTimes = strategy.RecoverEntities(entities)
                                  .Select(scheduledRecovery => scheduledRecovery.ContinueWith(t => new KeyValuePair <IImmutableSet <string>, TimeSpan>(t.Result, DateTime.UtcNow - startTime)))
                                  .ToArray();

            var result = Task.WhenAll(resultWithTimes).Result.OrderBy(pair => pair.Value).ToArray();

            result.Length.Should().Be(3);

            var scheduledEntities = result.Select(pair => pair.Key).ToArray();

            scheduledEntities[0].Count.Should().Be(2);
            scheduledEntities[1].Count.Should().Be(2);
            scheduledEntities[2].Count.Should().Be(1);
            scheduledEntities.SelectMany(s => s).ToImmutableHashSet().Should().Equal(entities);

            var timesMillis = result.Select(pair => pair.Value.TotalMilliseconds).ToArray();

            // scheduling will not happen too early
            timesMillis[0].Should().BeApproximately(1400, 500);
            timesMillis[1].Should().BeApproximately(2400, 500);
            timesMillis[2].Should().BeApproximately(3400, 500);
        }
Exemple #2
0
        public void AllAtOnceEntityRecoveryStrategy_must_recover_entities()
        {
            var entities = ImmutableHashSet.Create <EntityId>("1", "2", "3", "4", "5");

            var result = strategy.RecoverEntities(entities);

            result.Should().HaveCount(1);

            // the Task is completed immediately for allStrategy
            result.Head().Result.Should().BeSameAs(entities);
        }