public SagaJsonMapper(string connectionString, string sagaTypeName) { cloudTable = SagaIndexer.GetTable(connectionString, sagaTypeName); }
public void When_duplicates_found_Should_raise_an_event_for_every_duplicate_set_found(int testSize) { const int NumberOfCollisionsForEach = 2; var modulo = testSize / NumberOfCollisionsForEach; var toCreate = Enumerable.Range(0, testSize).Select(i => Tuple.Create(i, Guid.NewGuid())).ToArray(); const int concurrency = 100; var semaphore = new SemaphoreSlim(concurrency); foreach (var t in toCreate) { semaphore.Wait(); cloudTable.ExecuteAsync(TableOperation.Insert(CreateSagaState(t, modulo))) .ContinueWith(task => { if (task.Exception != null) { Console.WriteLine($"Exception occured {task.Exception}"); } semaphore.Release(); }); } for (var i = 0; i < concurrency; i++) { semaphore.Wait(); } var comparer = EqualityComparers.GetValueComparer(EdmType.Int64); var indexer = new SagaIndexer(cloudTable, "CorrelatingId", o => (ulong)(long)o, comparer); var results = new List<Tuple<Guid, Guid[]>>(); indexer.SearchForDuplicates((o, guids) => results.Add(Tuple.Create(o, guids.ToArray()))); var dict = results .GroupBy(t => t.Item1, t => t.Item2, comparer) .ToDictionary(g => g.Key, g => g.SelectMany(ids => ids).Distinct().ToArray(), comparer); Assert.AreEqual(modulo, dict.Count); foreach (var kvp in dict) { Assert.AreEqual(2, kvp.Value.Length); } }