-
Notifications
You must be signed in to change notification settings - Fork 526
Expand file tree
/
Copy pathCosmosOperationCanceledExceptionTests.cs
More file actions
128 lines (113 loc) · 5.7 KB
/
CosmosOperationCanceledExceptionTests.cs
File metadata and controls
128 lines (113 loc) · 5.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace Microsoft.Azure.Cosmos.SDK.EmulatorTests
{
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class CosmosOperationCanceledExceptionTests : BaseCosmosClientHelper
{
private ContainerInternal Container = null;
[TestInitialize]
public async Task TestInitialize()
{
await base.TestInit();
string PartitionKey = "/pk";
ContainerResponse response = await this.database.CreateContainerAsync(
new ContainerProperties(id: Guid.NewGuid().ToString(), partitionKeyPath: PartitionKey),
cancellationToken: this.cancellationToken);
Assert.IsNotNull(response);
Assert.IsNotNull(response.Container);
Assert.IsNotNull(response.Resource);
this.Container = (ContainerInternal)response;
}
[TestCleanup]
public async Task Cleanup()
{
await base.TestCleanup();
}
[TestMethod]
public async Task CheckCancellationTokenGatewayTestAsync()
{
using (CosmosClient gatewayClient = TestCommon.CreateCosmosClient(
builder => builder.WithConnectionModeGateway()))
{
Container gatewayContainer = gatewayClient.GetContainer(this.database.Id, this.Container.Id);
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
cancellationTokenSource.Cancel();
await this.CheckCancellationTokenTestAsync(gatewayContainer, cancellationTokenSource.Token);
}
}
[TestMethod]
public async Task CheckCancellationWithTransportIntercepterTestAsync()
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
Container withCancellationToken = TransportClientHelper.GetContainerWithIntercepter(
this.database.Id,
this.Container.Id,
(uri, resourceOperation, documentServiceRequest) =>
{
if (documentServiceRequest.ResourceType == Documents.ResourceType.Document)
{
cancellationTokenSource.Cancel();
}
},
useGatewayMode: false,
(uri, resourceOperation, documentServiceRequest)
=> TransportClientHelper.ReturnThrottledStoreResponseOnItemOperation(uri, resourceOperation, documentServiceRequest, Guid.NewGuid(), string.Empty));
await this.CheckCancellationTokenTestAsync(withCancellationToken, cancellationTokenSource.Token);
}
[TestMethod]
public async Task CheckCancellationTokenDirectTestAsync()
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
cancellationTokenSource.Cancel();
await this.CheckCancellationTokenTestAsync(this.Container, cancellationTokenSource.Token);
}
private async Task CheckCancellationTokenTestAsync(
Container container,
CancellationToken cancellationToken)
{
ToDoActivity toDoActivity = ToDoActivity.CreateRandomToDoActivity();
try
{
await container.CreateItemAsync<ToDoActivity>(
toDoActivity,
new Cosmos.PartitionKey(toDoActivity.pk),
cancellationToken: cancellationToken);
Assert.Fail("Should have thrown");
}
catch (CosmosOperationCanceledException ce)
{
Assert.IsNotNull(ce);
string message = ce.Message;
string diagnostics = ce.Diagnostics.ToString();
string toString = ce.ToString();
Assert.IsTrue(toString.Contains(diagnostics), $"Exception ToString() : {toString} does not contain diagnostics: {diagnostics}");
Assert.IsTrue(message.Contains(diagnostics), $"Message : {message} does not contain diagnostics: {diagnostics}");
string messageWithoutDiagnostics = message[..message.IndexOf(Environment.NewLine)].Trim();
Assert.IsTrue(toString.Contains(messageWithoutDiagnostics), $"Exception ToString() : {toString} does not contain message: {messageWithoutDiagnostics}");
}
try
{
FeedIterator feedIterator = container.GetItemQueryStreamIterator(
"select * from T");
await feedIterator.ReadNextAsync(cancellationToken: cancellationToken);
Assert.Fail("Should have thrown");
}
catch (CosmosOperationCanceledException ce)
{
string message = ce.Message;
string diagnostics = ce.Diagnostics.ToString();
string toString = ce.ToString();
Assert.IsTrue(toString.Contains(diagnostics), $"Exception ToString() : {toString} does not contain diagnostics: {diagnostics}");
Assert.IsTrue(message.Contains(diagnostics), $"Message : {message} does not contain diagnostics: {diagnostics}");
string messageWithoutDiagnostics = message[..message.IndexOf(Environment.NewLine)].Trim();
Assert.IsTrue(toString.Contains(messageWithoutDiagnostics), $"Exception ToString() : {toString} does not contain message: {messageWithoutDiagnostics}");
}
}
}
}