private static async Task IterateDekFeedAsync( DatabaseCore databaseCore, List <string> expectedDekIds, bool isExpectedDeksCompleteSetForRequest, bool isResultOrderExpected, string startId = null, string endId = null, bool isDescending = false, int?itemCountInPage = null) { int remainingItemCount = expectedDekIds.Count; QueryRequestOptions options = null; if (itemCountInPage.HasValue) { options = new QueryRequestOptions() { MaxItemCount = itemCountInPage }; } FeedIterator <DataEncryptionKeyProperties> dekIterator = databaseCore.GetDataEncryptionKeyIterator( startId, endId, isDescending, requestOptions: options); Assert.IsTrue(dekIterator.HasMoreResults); List <string> readDekIds = new List <string>(); while (remainingItemCount > 0) { FeedResponse <DataEncryptionKeyProperties> page = await dekIterator.ReadNextAsync(); if (itemCountInPage.HasValue) { // last page if (remainingItemCount < itemCountInPage.Value) { Assert.AreEqual(remainingItemCount, page.Count); } else { Assert.AreEqual(itemCountInPage.Value, page.Count); } } else { Assert.AreEqual(expectedDekIds.Count, page.Count); } remainingItemCount -= page.Count; if (isExpectedDeksCompleteSetForRequest) { Assert.AreEqual(remainingItemCount > 0, dekIterator.HasMoreResults); } foreach (DataEncryptionKeyProperties dek in page.Resource) { readDekIds.Add(dek.Id); } } if (isResultOrderExpected) { Assert.IsTrue(expectedDekIds.SequenceEqual(readDekIds)); } else { Assert.IsTrue(expectedDekIds.ToHashSet().SetEquals(readDekIds)); } }