Skip to content

Commit b8aa235

Browse files
committed
Added tests for low an high level
1 parent fc50d4b commit b8aa235

File tree

2 files changed

+393
-1
lines changed

2 files changed

+393
-1
lines changed

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

Lines changed: 114 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2003-2010 Xtensive LLC.
1+
// Copyright (C) 2009-2021 Xtensive LLC.
22
// This code is distributed under MIT license terms.
33
// See the License.txt file in the project root for more information.
44

@@ -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,25 @@ 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:
210+
return "select current_timestamp from RDB$DATABASE;";
211+
case WellKnown.Provider.MySql:
212+
return "SELECT 0";
213+
case WellKnown.Provider.Oracle:
214+
return "select current_timestamp from DUAL";
215+
case WellKnown.Provider.PostgreSql:
216+
return "SELECT 0";
217+
case WellKnown.Provider.SqlServer:
218+
return "SELECT 0";
219+
case WellKnown.Provider.Sqlite:
220+
return "SELECT 0";
221+
default:
222+
throw new ArgumentOutOfRangeException(currentProvider);
223+
}
224+
}
112225
}
113226
}

0 commit comments

Comments
 (0)