Skip to content

Commit 00ff76e

Browse files
committed
Add test of connection handlers for driver factory
1 parent 3dd9251 commit 00ff76e

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed

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

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,44 @@
88
using Xtensive.Orm;
99
using Xtensive.Orm.Building.Builders;
1010
using Xtensive.Sql;
11+
using Xtensive.Orm.Tests.Sql.DriverFactoryTestTypes;
12+
13+
namespace Xtensive.Orm.Tests.Sql.DriverFactoryTestTypes
14+
{
15+
public class TestConnectionHandler : IConnectionHandler
16+
{
17+
public int OpeningCounter = 0;
18+
public int OpenedCounter = 0;
19+
public int OpeningInitCounter = 0;
20+
public int OpeningFailedCounter = 0;
21+
22+
public void ConnectionOpening(ConnectionEventData eventData)
23+
{
24+
OpeningCounter++;
25+
}
26+
27+
public void ConnectionOpened(ConnectionEventData eventData)
28+
{
29+
OpenedCounter++;
30+
}
31+
32+
public void ConnectionInitialization(ConnectionInitEventData eventData)
33+
{
34+
OpeningInitCounter++;
35+
}
36+
37+
public void ConnectionOpeningFailed(ConnectionErrorEventData eventData)
38+
{
39+
OpeningFailedCounter++;
40+
}
41+
}
42+
43+
public static class StaticCounter
44+
{
45+
public static int OpeningReached;
46+
public static int OpenedReached;
47+
}
48+
}
1149

1250
namespace Xtensive.Orm.Tests.Sql
1351
{
@@ -95,6 +133,61 @@ public void SqlServerConnectionCheckTest()
95133
Assert.That(GetCheckConnectionIsAliveFlag(driver), Is.False);
96134
}
97135

136+
[Test]
137+
public void ConnectionHandlerTest()
138+
{
139+
var handlerInstance = new TestConnectionHandler();
140+
var handlersArray = new[] { handlerInstance };
141+
var descriptor = ProviderDescriptor.Get(provider);
142+
var factory = (SqlDriverFactory) Activator.CreateInstance(descriptor.DriverFactory);
143+
144+
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(0));
145+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(0));
146+
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(0));
147+
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(0));
148+
149+
var configuration = new SqlDriverConfiguration(handlersArray);
150+
_ = factory.GetDriver(new ConnectionInfo(Url), configuration);
151+
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(1));
152+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(0));
153+
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(1));
154+
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(0));
155+
156+
configuration = new SqlDriverConfiguration(handlersArray) { EnsureConnectionIsAlive = true };
157+
_ = factory.GetDriver(new ConnectionInfo(Url), configuration);
158+
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(2));
159+
if (provider == WellKnown.Provider.SqlServer)
160+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(1));
161+
else
162+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(0));
163+
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(2));
164+
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(0));
165+
166+
configuration = new SqlDriverConfiguration(handlersArray) { ConnectionInitializationSql = InitQueryPerProvider(provider) };
167+
_ = factory.GetDriver(new ConnectionInfo(Url), configuration);
168+
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(3));
169+
if (provider == WellKnown.Provider.SqlServer)
170+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(2));
171+
else
172+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(1));
173+
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(3));
174+
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(0));
175+
176+
configuration = new SqlDriverConfiguration(handlersArray) { ConnectionInitializationSql = "dummy string to trigger error" };
177+
try {
178+
_ = factory.GetDriver(new ConnectionInfo(Url), configuration);
179+
}
180+
catch {
181+
//skip it
182+
}
183+
Assert.That(handlerInstance.OpeningCounter, Is.EqualTo(4));
184+
if (provider == WellKnown.Provider.SqlServer)
185+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(3));
186+
else
187+
Assert.That(handlerInstance.OpeningInitCounter, Is.EqualTo(2));
188+
Assert.That(handlerInstance.OpenedCounter, Is.EqualTo(3));
189+
Assert.That(handlerInstance.OpeningFailedCounter, Is.EqualTo(1));
190+
}
98191

99192
private static void TestProvider(string providerName, string connectionString, string connectionUrl)
100193
{
@@ -109,5 +202,18 @@ private static bool GetCheckConnectionIsAliveFlag(SqlDriver driver)
109202
return (bool) type.GetField(fieldName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
110203
.GetValue(driver);
111204
}
205+
206+
private static string InitQueryPerProvider(string currentProvider)
207+
{
208+
switch (currentProvider) {
209+
case WellKnown.Provider.Firebird: return "select current_timestamp from RDB$DATABASE;";
210+
case WellKnown.Provider.MySql: return "SELECT 0";
211+
case WellKnown.Provider.Oracle: return "select current_timestamp from DUAL";
212+
case WellKnown.Provider.PostgreSql: return "SELECT 0";
213+
case WellKnown.Provider.SqlServer: return "SELECT 0";
214+
case WellKnown.Provider.Sqlite: return "SELECT 0";
215+
default: throw new ArgumentOutOfRangeException(currentProvider);
216+
}
217+
}
112218
}
113219
}

0 commit comments

Comments
 (0)