Skip to content

Commit 7d4ade3

Browse files
authored
Merge pull request #104 from DataObjects-NET/async-command-processing-tests
Tests for async command processing
2 parents 63624da + 7385d19 commit 7d4ade3

File tree

12 files changed

+677
-102
lines changed

12 files changed

+677
-102
lines changed

Orm/Xtensive.Orm.Tests/Storage/CommandProcessing/BatchingCommandProcessorParametersManagement.cs

Lines changed: 319 additions & 18 deletions
Large diffs are not rendered by default.

Orm/Xtensive.Orm.Tests/Storage/CommandProcessing/BatchingOfVersionizedEntitiesTest.cs

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
using System;
66
using System.Linq;
7+
using System.Threading.Tasks;
78
using NUnit.Framework;
89
using Xtensive.Core;
910
using Xtensive.Orm.Configuration;
@@ -119,10 +120,7 @@ public class BatchingOfVersionizedEntitiesTest : AutoBuildTest
119120
private readonly SessionConfiguration sessionWithoutCheck =
120121
new SessionConfiguration(SessionOptions.ServerProfile | SessionOptions.AutoActivation);
121122

122-
protected override void CheckRequirements()
123-
{
124-
Require.AllFeaturesSupported(ProviderFeatures.Batches);
125-
}
123+
protected override void CheckRequirements() => Require.AllFeaturesSupported(ProviderFeatures.Batches);
126124

127125
protected override DomainConfiguration BuildConfiguration()
128126
{
@@ -370,6 +368,47 @@ public void VersionedEntityUpdateWithoutVersionCheckTest03()
370368
}
371369
}
372370

371+
[Test]
372+
public async Task VersionedEntityUpdateWithoutVersionCheckAsyncTest03()
373+
{
374+
using (var session = await Domain.OpenSessionAsync(sessionWithoutCheck))
375+
using (var counter = new CommandCounter(session))
376+
using (var transaction = session.OpenTransaction()) {
377+
var store = session.Query.All<Store>().Single(el => el.Name == "Store");
378+
var book = session.Query.All<Book>().Single(el => el.Title == "Romeo and Juliet");
379+
var author = session.Query.All<Author>().Single(el => el.FirstName == "William");
380+
381+
_ = new Store { Name = "NewStore1" };
382+
_ = new Store { Name = "NewStore2" };
383+
book.Title = "AnotherTitle";
384+
store.Name = "AnotherStore";
385+
386+
_ = session.Query.ExecuteDelayed(q => q.All<Store>().Take(() => 1));
387+
_ = session.Query.ExecuteDelayed(q => q.All<Store>().Take(() => 2));
388+
_ = session.Query.ExecuteDelayed(q => q.All<Store>().Take(() => 3));
389+
_ = session.Query.ExecuteDelayed(q => q.All<Store>().Take(() => 4));
390+
391+
using (counter.Attach()) {
392+
(await session.Query.All<Author>().AsAsync()).Run();
393+
}
394+
395+
Assert.That(counter.Count, Is.EqualTo(1));
396+
counter.Reset();
397+
398+
_ = new Store { Name = "NewStore3" };
399+
_ = new Store { Name = "NewStore4" };
400+
_ = new Store { Name = "NewStore5" };
401+
402+
author.FirstName = "NotWilliam";
403+
404+
using (counter.Attach()) {
405+
session.SaveChanges();
406+
}
407+
408+
Assert.That(counter.Count, Is.EqualTo(1));
409+
}
410+
}
411+
373412
private bool IsUpdatesFirst()
374413
{
375414
return !(Domain.Configuration.Supports(ForeignKeyMode.Reference)

Orm/Xtensive.Orm.Tests/Storage/CommandProcessing/SimpleCommandProcessorParametersManagement.cs

Lines changed: 165 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
using System.Collections.Generic;
88
using System.Linq;
9+
using System.Threading.Tasks;
910
using NUnit.Framework;
1011
using Xtensive.Core;
1112
using Xtensive.Orm.Configuration;
@@ -16,10 +17,7 @@ namespace Xtensive.Orm.Tests.Storage.CommandProcessing
1617
{
1718
public class SimpleCommandProcessorParametersManagement : AutoBuildTest
1819
{
19-
public int StorageLimit
20-
{
21-
get { return ProviderInfo.MaxQueryParameterCount; }
22-
}
20+
public int StorageLimit => ProviderInfo.MaxQueryParameterCount;
2321

2422
protected override DomainConfiguration BuildConfiguration()
2523
{
@@ -29,10 +27,7 @@ protected override DomainConfiguration BuildConfiguration()
2927
return config;
3028
}
3129

32-
protected override void CheckRequirements()
33-
{
34-
Require.AllFeaturesNotSupported(ProviderFeatures.Batches);
35-
}
30+
protected override void CheckRequirements() => Require.AllFeaturesNotSupported(ProviderFeatures.Batches);
3631

3732
protected override void PopulateData()
3833
{
@@ -94,15 +89,65 @@ public void DelayedSelectsWithinLimitTest()
9489
}
9590
}
9691

92+
[Test]
93+
public async Task DelayedSelectsWithinLimitAsyncTest()
94+
{
95+
RequireLimit();
96+
97+
using (var session = await Domain.OpenSessionAsync())
98+
using (var transaction = session.OpenTransaction()) {
99+
var ids = Enumerable.Range(1, StorageLimit - 1).ToArray(StorageLimit - 1);
100+
var results = new List<IEnumerable<ALotOfFieldsEntityValid>>(10);
101+
102+
results.Add(session.Query.ExecuteDelayed(q =>
103+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, ids))));
104+
105+
results.Add(session.Query.ExecuteDelayed(q =>
106+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, ids))));
107+
108+
results.Add(session.Query.ExecuteDelayed(q =>
109+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, ids))));
110+
111+
results.Add(session.Query.ExecuteDelayed(q =>
112+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, ids))));
113+
114+
results.Add(session.Query.ExecuteDelayed(q =>
115+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, ids))));
116+
117+
results.Add(session.Query.ExecuteDelayed(q =>
118+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, ids))));
119+
120+
results.Add(session.Query.ExecuteDelayed(q =>
121+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, ids))));
122+
123+
results.Add(session.Query.ExecuteDelayed(q =>
124+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, ids))));
125+
126+
results.Add(session.Query.ExecuteDelayed(q =>
127+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, ids))));
128+
129+
results.Add(session.Query.ExecuteDelayed(q =>
130+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, ids))));
131+
132+
var inlineQuery = await session.Query.All<ALotOfFieldsEntityValid>()
133+
.Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, ids)).AsAsync();
134+
Assert.That(inlineQuery.Any(), Is.True);
135+
136+
foreach (var result in results) {
137+
Assert.That(result.Any(), Is.True);
138+
}
139+
}
140+
}
141+
97142
[Test]
98143
public void DelayedSelectsOutOfLimitTest01()
99144
{
100145
RequireLimit();
101146

102147
using (var session = Domain.OpenSession())
103148
using (var transaction = session.OpenTransaction()) {
104-
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray();
105-
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray();
149+
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray(StorageLimit - 1);
150+
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray(StorageLimit + 1);
106151

107152
var result = (DelayedSequence<ALotOfFieldsEntityValid>) session.Query.ExecuteDelayed(q =>
108153
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, idsOutOfRange)));
@@ -112,15 +157,33 @@ public void DelayedSelectsOutOfLimitTest01()
112157
}
113158
}
114159

160+
[Test]
161+
public async Task DelayedSelectsOutOfLimitAsyncTest01()
162+
{
163+
RequireLimit();
164+
165+
using (var session = await Domain.OpenSessionAsync())
166+
using (var transaction = session.OpenTransaction()) {
167+
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray(StorageLimit - 1);
168+
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray(StorageLimit + 1);
169+
170+
var result = (DelayedSequence<ALotOfFieldsEntityValid>) session.Query.ExecuteDelayed(q =>
171+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, idsOutOfRange)));
172+
173+
_ = Assert.ThrowsAsync<ParametersLimitExceededException>(async () => await result.AsAsync());
174+
Assert.That(result.Task.Result.Count, Is.EqualTo(0));
175+
}
176+
}
177+
115178
[Test]
116179
public void DelayedSelectsOutOfLimitTest02()
117180
{
118181
RequireLimit();
119182

120183
using (var session = Domain.OpenSession())
121184
using (var transaction = session.OpenTransaction()) {
122-
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray();
123-
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray();
185+
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray(StorageLimit - 1);
186+
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray(StorageLimit + 1);
124187

125188
var result = (DelayedSequence<ALotOfFieldsEntityValid>) session.Query.ExecuteDelayed(q =>
126189
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, idsOutOfRange)));
@@ -130,15 +193,33 @@ public void DelayedSelectsOutOfLimitTest02()
130193
}
131194
}
132195

196+
[Test]
197+
public async Task DelayedSelectsOutOfLimitAsyncTest02()
198+
{
199+
RequireLimit();
200+
201+
using (var session = await Domain.OpenSessionAsync())
202+
using (var transaction = session.OpenTransaction()) {
203+
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray(StorageLimit - 1);
204+
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray(StorageLimit + 1);
205+
206+
var result = (DelayedSequence<ALotOfFieldsEntityValid>) session.Query.ExecuteDelayed(q =>
207+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, idsOutOfRange)));
208+
209+
_ = Assert.ThrowsAsync<ParametersLimitExceededException>(async () => (await session.Query.All<ALotOfFieldsEntityValid>().AsAsync()).Run());
210+
Assert.That(result.Task.Result.Count, Is.EqualTo(0));
211+
}
212+
}
213+
133214
[Test]
134215
public void DelayedSelectsOutOfLimitTest03()
135216
{
136217
RequireLimit();
137218

138219
using (var session = Domain.OpenSession())
139220
using (var transaction = session.OpenTransaction()) {
140-
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray();
141-
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray();
221+
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray(StorageLimit - 1);
222+
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray(StorageLimit + 1);
142223

143224
var result = (DelayedSequence<ALotOfFieldsEntityValid>) session.Query.ExecuteDelayed(q =>
144225
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, fittedIds)));
@@ -151,15 +232,36 @@ public void DelayedSelectsOutOfLimitTest03()
151232
}
152233
}
153234

235+
[Test]
236+
public async Task DelayedSelectsOutOfLimitAsyncTest03()
237+
{
238+
RequireLimit();
239+
240+
using (var session = await Domain.OpenSessionAsync())
241+
using (var transaction = session.OpenTransaction()) {
242+
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray(StorageLimit - 1);
243+
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray(StorageLimit + 1);
244+
245+
var result = (DelayedSequence<ALotOfFieldsEntityValid>) session.Query.ExecuteDelayed(q =>
246+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, fittedIds)));
247+
248+
_ = session.Query.ExecuteDelayed(q =>
249+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, idsOutOfRange)));
250+
251+
_ = Assert.ThrowsAsync<ParametersLimitExceededException>(async () => (await session.Query.All<ALotOfFieldsEntityValid>().AsAsync()).Run());
252+
Assert.That(result.Any(), Is.True);
253+
}
254+
}
255+
154256
[Test]
155257
public void DelayedSelectsOutOfLimitTest04()
156258
{
157259
RequireLimit();
158260

159261
using (var session = Domain.OpenSession())
160262
using (var transaction = session.OpenTransaction()) {
161-
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray();
162-
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray();
263+
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray(StorageLimit - 1);
264+
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray(StorageLimit + 1);
163265

164266
var result = (DelayedSequence<ALotOfFieldsEntityValid>) session.Query.ExecuteDelayed(q =>
165267
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, idsOutOfRange)));
@@ -172,15 +274,36 @@ public void DelayedSelectsOutOfLimitTest04()
172274
}
173275
}
174276

277+
[Test]
278+
public async Task DelayedSelectsOutOfLimitAsyncTest04()
279+
{
280+
RequireLimit();
281+
282+
using (var session = await Domain.OpenSessionAsync())
283+
using (var transaction = session.OpenTransaction()) {
284+
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray(StorageLimit - 1);
285+
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray(StorageLimit + 1);
286+
287+
var result = (DelayedSequence<ALotOfFieldsEntityValid>) session.Query.ExecuteDelayed(q =>
288+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, idsOutOfRange)));
289+
290+
_ = session.Query.ExecuteDelayed(q =>
291+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, fittedIds)));
292+
293+
_ = Assert.ThrowsAsync<ParametersLimitExceededException>(async () => (await session.Query.All<ALotOfFieldsEntityValid>().AsAsync()).Run());
294+
Assert.That(result.Any(), Is.False);
295+
}
296+
}
297+
175298
[Test]
176299
public void DelayedSelectsOutOfLimitTest05()
177300
{
178301
RequireLimit();
179302

180303
using (var session = Domain.OpenSession())
181304
using (var transaction = session.OpenTransaction()) {
182-
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray();
183-
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray();
305+
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray(StorageLimit - 1);
306+
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray(StorageLimit + 1);
184307

185308
var result1 = (DelayedSequence<ALotOfFieldsEntityValid>) session.Query.ExecuteDelayed(q =>
186309
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, fittedIds)));
@@ -196,6 +319,30 @@ public void DelayedSelectsOutOfLimitTest05()
196319
}
197320
}
198321

322+
[Test]
323+
public async Task DelayedSelectsOutOfLimitAsyncTest05()
324+
{
325+
RequireLimit();
326+
327+
using (var session = await Domain.OpenSessionAsync())
328+
using (var transaction = session.OpenTransaction()) {
329+
var fittedIds = Enumerable.Range(1, StorageLimit - 1).ToArray(StorageLimit - 1);
330+
var idsOutOfRange = Enumerable.Range(1, StorageLimit + 1).ToArray(StorageLimit + 1);
331+
332+
var result1 = (DelayedSequence<ALotOfFieldsEntityValid>) session.Query.ExecuteDelayed(q =>
333+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, fittedIds)));
334+
335+
var result2 = session.Query.ExecuteDelayed(q =>
336+
q.All<ALotOfFieldsEntityValid>().Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, fittedIds)));
337+
338+
_ = Assert.ThrowsAsync<ParametersLimitExceededException>(
339+
async () => (await session.Query.All<ALotOfFieldsEntityValid>()
340+
.Where(e => e.Id.In(IncludeAlgorithm.ComplexCondition, idsOutOfRange)).AsAsync()).Run());
341+
Assert.That(result1.Any(), Is.True);
342+
Assert.That(result2.Any(), Is.True);
343+
}
344+
}
345+
199346
[Test]
200347
public void InsertTest01()
201348
{

0 commit comments

Comments
 (0)