Example #1
0
        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));
            }
        }