Skip to content

Commit 9ded135

Browse files
committed
Async methods in IConnectionHandler + default abstract implementor
+ async async tests
1 parent d1d6441 commit 9ded135

File tree

4 files changed

+403
-54
lines changed

4 files changed

+403
-54
lines changed

Orm/Xtensive.Orm.Tests.Sql/DriverFactoryTest.cs

Lines changed: 172 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,68 @@
99
using Xtensive.Orm.Building.Builders;
1010
using Xtensive.Sql;
1111
using Xtensive.Orm.Tests.Sql.DriverFactoryTestTypes;
12+
using System.Threading.Tasks;
13+
using System.Threading;
1214

1315
namespace Xtensive.Orm.Tests.Sql.DriverFactoryTestTypes
1416
{
15-
public class TestConnectionHandler : IConnectionHandler
17+
public class TestConnectionHandler : ConnectionHandler
1618
{
1719
public int OpeningCounter = 0;
18-
public int OpenedCounter = 0;
20+
public int OpeningAsyncCounter = 0;
21+
1922
public int OpeningInitCounter = 0;
23+
public int OpeningInitAsyncCounter = 0;
24+
25+
public int OpenedCounter = 0;
26+
public int OpenedAsyncCounter = 0;
27+
2028
public int OpeningFailedCounter = 0;
29+
public int OpeningFailedAsyncCounter = 0;
2130

22-
public void ConnectionOpening(ConnectionEventData eventData)
31+
public override void ConnectionOpening(ConnectionEventData eventData)
2332
{
2433
OpeningCounter++;
2534
}
2635

27-
public void ConnectionOpened(ConnectionEventData eventData)
36+
public override Task ConnectionOpeningAsync(ConnectionEventData eventData, CancellationToken cancellationToken)
2837
{
29-
OpenedCounter++;
38+
OpeningAsyncCounter++;
39+
return base.ConnectionOpeningAsync(eventData, cancellationToken);
3040
}
3141

32-
public void ConnectionInitialization(ConnectionInitEventData eventData)
42+
public override void ConnectionInitialization(ConnectionInitEventData eventData)
3343
{
3444
OpeningInitCounter++;
3545
}
3646

37-
public void ConnectionOpeningFailed(ConnectionErrorEventData eventData)
47+
public override Task ConnectionInitializationAsync(ConnectionInitEventData eventData, CancellationToken cancellationToken)
48+
{
49+
OpeningInitAsyncCounter++;
50+
return base.ConnectionInitializationAsync(eventData, cancellationToken);
51+
}
52+
53+
public override void ConnectionOpened(ConnectionEventData eventData)
54+
{
55+
OpenedCounter++;
56+
}
57+
58+
public override Task ConnectionOpenedAsync(ConnectionEventData eventData, CancellationToken cancellationToken)
59+
{
60+
OpenedAsyncCounter++;
61+
return base.ConnectionOpenedAsync(eventData, cancellationToken);
62+
}
63+
64+
public override void ConnectionOpeningFailed(ConnectionErrorEventData eventData)
3865
{
3966
OpeningFailedCounter++;
4067
}
68+
69+
public override Task ConnectionOpeningFailedAsync(ConnectionErrorEventData eventData, CancellationToken cancellationToken)
70+
{
71+
OpeningFailedAsyncCounter++;
72+
return base.ConnectionOpeningFailedAsync(eventData, cancellationToken);
73+
}
4174
}
4275

4376
public static class StaticCounter
@@ -142,36 +175,62 @@ public void ConnectionHandlerTest()
142175
var factory = (SqlDriverFactory) Activator.CreateInstance(descriptor.DriverFactory);
143176

144177
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(0));
178+
Assert.That(handlerInstance.OpeningAsyncCounter, Is.EqualTo(0));
145179
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(0));
180+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(0));
146181
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(0));
182+
Assert.That(handlerInstance.OpenedAsyncCounter, Is.EqualTo(0));
147183
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(0));
184+
Assert.That(handlerInstance.OpeningFailedAsyncCounter, Is.EqualTo(0));
148185

149186
var configuration = new SqlDriverConfiguration(handlersArray);
150187
_ = factory.GetDriver(new ConnectionInfo(Url), configuration);
151188
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(1));
189+
Assert.That(handlerInstance.OpeningAsyncCounter, Is.EqualTo(0));
152190
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(0));
191+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(0));
153192
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(1));
193+
Assert.That(handlerInstance.OpenedAsyncCounter, Is.EqualTo(0));
154194
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(0));
195+
Assert.That(handlerInstance.OpeningFailedAsyncCounter, Is.EqualTo(0));
155196

156197
configuration = new SqlDriverConfiguration(handlersArray) { EnsureConnectionIsAlive = true };
157198
_ = factory.GetDriver(new ConnectionInfo(Url), configuration);
158199
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(2));
159-
if (provider == WellKnown.Provider.SqlServer)
200+
Assert.That(handlerInstance.OpeningAsyncCounter, Is.EqualTo(0));
201+
202+
if (provider == WellKnown.Provider.SqlServer) {
160203
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(1));
161-
else
204+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(0));
205+
}
206+
else {
162207
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(0));
208+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(0));
209+
}
210+
163211
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(2));
212+
Assert.That(handlerInstance.OpenedAsyncCounter, Is.EqualTo(0));
164213
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(0));
214+
Assert.That(handlerInstance.OpeningFailedAsyncCounter, Is.EqualTo(0));
165215

166216
configuration = new SqlDriverConfiguration(handlersArray) { ConnectionInitializationSql = InitQueryPerProvider(provider) };
167217
_ = factory.GetDriver(new ConnectionInfo(Url), configuration);
168218
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(3));
169-
if (provider == WellKnown.Provider.SqlServer)
219+
Assert.That(handlerInstance.OpeningAsyncCounter, Is.EqualTo(0));
220+
221+
if (provider == WellKnown.Provider.SqlServer) {
170222
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(2));
171-
else
223+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(0));
224+
}
225+
else {
172226
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(1));
227+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(0));
228+
}
229+
173230
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(3));
231+
Assert.That(handlerInstance.OpenedAsyncCounter, Is.EqualTo(0));
174232
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(0));
233+
Assert.That(handlerInstance.OpeningFailedAsyncCounter, Is.EqualTo(0));
175234

176235
configuration = new SqlDriverConfiguration(handlersArray) { ConnectionInitializationSql = "dummy string to trigger error" };
177236
try {
@@ -181,12 +240,112 @@ public void ConnectionHandlerTest()
181240
//skip it
182241
}
183242
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(4));
184-
if (provider == WellKnown.Provider.SqlServer)
243+
Assert.That(handlerInstance.OpeningAsyncCounter, Is.EqualTo(0));
244+
245+
if (provider == WellKnown.Provider.SqlServer) {
185246
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(3));
186-
else
247+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(0));
248+
}
249+
else {
187250
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(2));
251+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(0));
252+
}
253+
254+
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(3));
255+
Assert.That(handlerInstance.OpenedAsyncCounter, Is.EqualTo(0));
256+
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(1));
257+
Assert.That(handlerInstance.OpeningFailedAsyncCounter, Is.EqualTo(0));
258+
}
259+
260+
[Test]
261+
public async Task ConnectionHandlerAsyncTest()
262+
{
263+
var handlerInstance = new TestConnectionHandler();
264+
var handlersArray = new[] { handlerInstance };
265+
var descriptor = ProviderDescriptor.Get(provider);
266+
var factory = (SqlDriverFactory) Activator.CreateInstance(descriptor.DriverFactory);
267+
268+
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(0));
269+
Assert.That(handlerInstance.OpeningAsyncCounter, Is.EqualTo(0));
270+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(0));
271+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(0));
272+
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(0));
273+
Assert.That(handlerInstance.OpenedAsyncCounter, Is.EqualTo(0));
274+
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(0));
275+
Assert.That(handlerInstance.OpeningFailedAsyncCounter, Is.EqualTo(0));
276+
277+
var configuration = new SqlDriverConfiguration(handlersArray);
278+
_ = await factory.GetDriverAsync(new ConnectionInfo(Url), configuration, CancellationToken.None);
279+
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(1));
280+
Assert.That(handlerInstance.OpeningAsyncCounter, Is.EqualTo(1));
281+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(0));
282+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(0));
283+
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(1));
284+
Assert.That(handlerInstance.OpenedAsyncCounter, Is.EqualTo(1));
285+
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(0));
286+
Assert.That(handlerInstance.OpeningFailedAsyncCounter, Is.EqualTo(0));
287+
288+
configuration = new SqlDriverConfiguration(handlersArray) { EnsureConnectionIsAlive = true };
289+
_ = await factory.GetDriverAsync(new ConnectionInfo(Url), configuration, CancellationToken.None);
290+
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(2));
291+
Assert.That(handlerInstance.OpeningAsyncCounter, Is.EqualTo(2));
292+
293+
if (provider == WellKnown.Provider.SqlServer) {
294+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(1));
295+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(1));
296+
}
297+
else {
298+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(0));
299+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(0));
300+
}
301+
302+
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(2));
303+
Assert.That(handlerInstance.OpenedAsyncCounter, Is.EqualTo(2));
304+
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(0));
305+
Assert.That(handlerInstance.OpeningFailedAsyncCounter, Is.EqualTo(0));
306+
307+
configuration = new SqlDriverConfiguration(handlersArray) { ConnectionInitializationSql = InitQueryPerProvider(provider) };
308+
_ = await factory.GetDriverAsync(new ConnectionInfo(Url), configuration, CancellationToken.None);
309+
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(3));
310+
Assert.That(handlerInstance.OpeningAsyncCounter, Is.EqualTo(3));
311+
if (provider == WellKnown.Provider.SqlServer) {
312+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(2));
313+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(2));
314+
}
315+
else {
316+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(1));
317+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(1));
318+
}
319+
320+
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(3));
321+
Assert.That(handlerInstance.OpenedAsyncCounter, Is.EqualTo(3));
322+
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(0));
323+
Assert.That(handlerInstance.OpeningFailedAsyncCounter, Is.EqualTo(0));
324+
325+
configuration = new SqlDriverConfiguration(handlersArray) { ConnectionInitializationSql = "dummy string to trigger error" };
326+
try {
327+
_ = await factory.GetDriverAsync(new ConnectionInfo(Url), configuration, CancellationToken.None);
328+
}
329+
catch {
330+
//skip it
331+
}
332+
333+
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(4));
334+
Assert.That(handlerInstance.OpeningAsyncCounter, Is.EqualTo(4));
335+
336+
if (provider == WellKnown.Provider.SqlServer) {
337+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(3));
338+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(3));
339+
}
340+
else {
341+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(2));
342+
Assert.That(handlerInstance.OpeningInitAsyncCounter, Is.EqualTo(2));
343+
}
344+
188345
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(3));
346+
Assert.That(handlerInstance.OpenedAsyncCounter, Is.EqualTo(3));
189347
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(1));
348+
Assert.That(handlerInstance.OpeningFailedAsyncCounter, Is.EqualTo(1));
190349
}
191350

192351
private static void TestProvider(string providerName, string connectionString, string connectionUrl)

0 commit comments

Comments
 (0)