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