[Query][Internal] Adds tests for aggregate queries with invalid continuation tokens (#4052)

* partial test

* Tests and error handling update

* update error message

* typo

* update original err msg

* combine tests

* test cleanup

* undo error message update
This commit is contained in:
Maya-Painter 2023-09-11 08:29:16 -07:00 коммит произвёл GitHub
Родитель b7b1064ab7
Коммит 4111caed99
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1 изменённых файлов: 57 добавлений и 2 удалений

Просмотреть файл

@ -878,9 +878,65 @@ namespace Microsoft.Azure.Cosmos.SDK.EmulatorTests
await TestSearch(x => x.description.Contains("todo"), "CONTAINS", false, 0);
await TestSearch(x => x.description.Contains("tOdO", StringComparison.OrdinalIgnoreCase), "CONTAINS", true, 200);
}
[TestMethod]
public async Task LinqAggregatesWithContinuationTokenTest()
{
await ToDoActivity.CreateRandomItems(container: this.Container, pkCount: 1, perPKItemCount: 2, randomPartitionKey: true);
QueryRequestOptions requestOptions = new QueryRequestOptions()
{
MaxItemCount = 1
};
IOrderedQueryable<ToDoActivity> firstQuery = this.Container.GetItemLinqQueryable<ToDoActivity>(allowSynchronousQueryExecution: true, requestOptions: requestOptions);
int count = await firstQuery.CountAsync();
double average = firstQuery.Average(x => x.taskNum);
string continuationToken = null;
FeedIterator<ToDoActivity> firstFeedIterator = firstQuery.ToFeedIterator();
// if instead of while loop in order to retrieve continuation token
if (firstFeedIterator.HasMoreResults)
{
FeedResponse<ToDoActivity> firstFeedResponse = await firstFeedIterator.ReadNextAsync();
continuationToken = firstFeedResponse.ContinuationToken;
}
Assert.AreEqual(2, count);
Assert.IsNotNull(continuationToken);
IOrderedQueryable<ToDoActivity> secondQuery = this.Container.GetItemLinqQueryable<ToDoActivity>(allowSynchronousQueryExecution: true, continuationToken: continuationToken, requestOptions: requestOptions);
try
{
count = await secondQuery.CountAsync();
Assert.Fail("Expected Count query to return exception");
}
catch (CosmosException exception)
{
Assert.IsTrue(exception.StatusCode == System.Net.HttpStatusCode.BadRequest);
Assert.IsTrue(exception.SubStatusCode == (int)Documents.SubStatusCodes.MalformedContinuationToken);
Assert.IsTrue(exception.Message.Contains("ParallelCrossPartitionQueryPipelineStage"));
}
try
{
average = secondQuery.Average(x => x.taskNum);
Assert.Fail("Expected Average query to return exception");
}
catch (CosmosException exception)
{
Assert.IsTrue(exception.StatusCode == System.Net.HttpStatusCode.BadRequest);
Assert.IsTrue(exception.SubStatusCode == (int)Documents.SubStatusCodes.MalformedContinuationToken);
Assert.IsTrue(exception.Message.Contains("ParallelCrossPartitionQueryPipelineStage"));
}
}
[TestMethod]
public async Task LinqSelectEverythingWithoutQueryableTest()
{
@ -911,7 +967,6 @@ namespace Microsoft.Azure.Cosmos.SDK.EmulatorTests
public decimal decimaleValue;
public bool booleanValue;
public NumberLinqItem[] children;
}
private async Task<List<T>> FetchResults<T>(QueryDefinition queryDefinition)