/// <remarks> /// * Validation is done by running the loop in parallel using 'Parallel.For(..'. /// * Keys are generated in clustered distribution using 'Guid(a,b,c,d,e,f,g,h,j,k)' by changing the 'c'. /// The sample size is run twice, first time in order to populate and second time to compare with the /// results of the first run. /// </remarks> public static DistributionStore<int> ShouldGetPartitionsForKeys(this IPartitionConnectionProvider provider, short sampleSize) { var partitionDistribution = new DistributionStore<int>(); var partitionMap = new ConcurrentDictionary<Guid, int>(); // should populate (most likely as there is only slight chance of clashing with keys from other specs) & return Parallel.For(0, sampleSize, i => { var key = new Guid(22, 43, (short) i, 1, 2, 3, 4, 5, 6, 7, 8); var partition = provider.GetConnection(key).Connection.ExtractPartitionFromConnection(); partitionMap[key] = partition; partitionDistribution.Add(partition); }); // should return already existing Parallel.For(0, sampleSize, i => { var key = new Guid(22, 43, (short) i, 1, 2, 3, 4, 5, 6, 7, 8); var partition = provider.GetConnection(key).Connection.ExtractPartitionFromConnection(); partitionMap.ShouldContainKeyValue(key, partition); }); return partitionDistribution; }