99using Xtensive . Orm . Building . Builders ;
1010using Xtensive . Sql ;
1111using Xtensive . Orm . Tests . Sql . DriverFactoryTestTypes ;
12+ using System . Threading . Tasks ;
13+ using System . Threading ;
1214
1315namespace 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