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