Skip to content

Commit be9dbc1

Browse files
committed
Adds tests for connection info and init sql for nodes
1 parent b459b99 commit be9dbc1

2 files changed

Lines changed: 289 additions & 0 deletions

File tree

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using NUnit.Framework;
5+
using Xtensive.Orm.Configuration;
6+
using Xtensive.Orm.Providers;
7+
using Xtensive.Orm.Services;
8+
9+
namespace Xtensive.Orm.Tests.Storage.Multinode
10+
{
11+
[TestFixture]
12+
public class ConnectionOverrideTest
13+
{
14+
[HierarchyRoot]
15+
public class TestEntity : Entity
16+
{
17+
[Field, Key]
18+
public int Id { get; set; }
19+
20+
public TestEntity(Session session)
21+
: base(session)
22+
{
23+
}
24+
}
25+
26+
[OneTimeSetUp]
27+
public void OneTimeSetUp() => Require.ProviderIs(StorageProvider.SqlServer);
28+
29+
[Test]
30+
public void NullNodeConnectionTest()
31+
{
32+
var domainConfig = DomainConfigurationFactory.Create();
33+
domainConfig.Types.Register(typeof(TestEntity));
34+
domainConfig.DefaultSchema = "dbo";
35+
domainConfig.UpgradeMode = DomainUpgradeMode.Recreate;
36+
37+
var nodeConfig = new NodeConfiguration("Additional");
38+
nodeConfig.UpgradeMode = DomainUpgradeMode.Recreate;
39+
nodeConfig.ConnectionInfo = null;
40+
nodeConfig.SchemaMapping.Add("dbo", "Model1");
41+
42+
void commandValidator(object sender, DbCommandEventArgs args)
43+
{
44+
var session = ((SessionEventAccessor) sender).Session;
45+
if (session.StorageNodeId == WellKnown.DefaultNodeId) {
46+
Assert.That(args.Command.CommandText.Contains("[dbo].[ConnectionOverrideTest.TestEntity]"), Is.True);
47+
}
48+
else {
49+
Assert.That(args.Command.CommandText.Contains("[Model1].[ConnectionOverrideTest.TestEntity]"), Is.True);
50+
}
51+
}
52+
53+
using (var domain = Domain.Build(domainConfig)) {
54+
var selectedNode = domain.SelectStorageNode(WellKnown.DefaultNodeId);
55+
using (var session = selectedNode.OpenSession())
56+
using (var tx = session.OpenTransaction()) {
57+
var connection = ((SqlSessionHandler) session.Handler).Connection;
58+
Assert.That(connection.ConnectionInfo, Is.EqualTo(domainConfig.ConnectionInfo));
59+
_ = new TestEntity(session);
60+
session.Events.DbCommandExecuted += commandValidator;
61+
session.SaveChanges();
62+
session.Events.DbCommandExecuted -= commandValidator;
63+
}
64+
65+
_ = domain.StorageNodeManager.AddNode(nodeConfig);
66+
selectedNode = domain.SelectStorageNode("Additional");
67+
using (var session = selectedNode.OpenSession())
68+
using (var tx = session.OpenTransaction()){
69+
var connection = ((SqlSessionHandler) session.Handler).Connection;
70+
Assert.That(connection.ConnectionInfo, Is.EqualTo(domainConfig.ConnectionInfo));
71+
72+
_ = new TestEntity(session);
73+
session.Events.DbCommandExecuted += commandValidator;
74+
session.SaveChanges();
75+
session.Events.DbCommandExecuted -= commandValidator;
76+
}
77+
}
78+
}
79+
80+
[Test]
81+
public void OverwrittenConnectionTest()
82+
{
83+
var domainConfig = DomainConfigurationFactory.Create();
84+
domainConfig.Types.Register(typeof(TestEntity));
85+
domainConfig.DefaultSchema = "dbo";
86+
domainConfig.UpgradeMode = DomainUpgradeMode.Recreate;
87+
88+
var domainConnectionUrlString = domainConfig.ConnectionInfo.ConnectionUrl.ToString();
89+
var parametersPosition = domainConnectionUrlString.IndexOf('?');
90+
91+
var nodeConfig = new NodeConfiguration("Additional");
92+
nodeConfig.UpgradeMode = DomainUpgradeMode.Recreate;
93+
nodeConfig.ConnectionInfo = new ConnectionInfo(UrlInfo.Parse(domainConnectionUrlString.Substring(0, parametersPosition)));
94+
nodeConfig.SchemaMapping.Add("dbo", "Model1");
95+
96+
void commandValidator(object sender, DbCommandEventArgs args)
97+
{
98+
var session = ((SessionEventAccessor) sender).Session;
99+
if (session.StorageNodeId == WellKnown.DefaultNodeId) {
100+
Assert.That(args.Command.CommandText.Contains("[dbo].[ConnectionOverrideTest.TestEntity]"), Is.True);
101+
}
102+
else {
103+
Assert.That(args.Command.CommandText.Contains("[Model1].[ConnectionOverrideTest.TestEntity]"), Is.True);
104+
}
105+
}
106+
107+
using (var domain = Domain.Build(domainConfig)) {
108+
var selectedNode = domain.SelectStorageNode(WellKnown.DefaultNodeId);
109+
using (var session = selectedNode.OpenSession())
110+
using (var tx = session.OpenTransaction()) {
111+
var connection = ((SqlSessionHandler) session.Handler).Connection;
112+
Assert.That(connection.ConnectionInfo, Is.EqualTo(domainConfig.ConnectionInfo));
113+
_ = new TestEntity(session);
114+
session.Events.DbCommandExecuted += commandValidator;
115+
session.SaveChanges();
116+
session.Events.DbCommandExecuted -= commandValidator;
117+
}
118+
119+
_ = domain.StorageNodeManager.AddNode(nodeConfig);
120+
selectedNode = domain.SelectStorageNode("Additional");
121+
using (var session = selectedNode.OpenSession())
122+
using (var tx = session.OpenTransaction()) {
123+
var connection = ((SqlSessionHandler) session.Handler).Connection;
124+
Assert.That(connection.ConnectionInfo, Is.Not.EqualTo(domainConfig.ConnectionInfo));
125+
126+
_ = new TestEntity(session);
127+
session.Events.DbCommandExecuted += commandValidator;
128+
session.SaveChanges();
129+
session.Events.DbCommandExecuted -= commandValidator;
130+
}
131+
}
132+
}
133+
}
134+
}
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using NUnit.Framework;
5+
using Xtensive.Orm.Configuration;
6+
using Xtensive.Orm.Providers;
7+
using Xtensive.Orm.Services;
8+
9+
namespace Xtensive.Orm.Tests.Storage.Multinode
10+
{
11+
[TestFixture]
12+
public sealed class InitializationSqlOverrideTest
13+
{
14+
[HierarchyRoot]
15+
public class TestEntity : Entity
16+
{
17+
[Field, Key]
18+
public int Id { get; set; }
19+
20+
public TestEntity(Session session)
21+
: base(session)
22+
{
23+
}
24+
}
25+
26+
[OneTimeSetUp]
27+
public void OneTimeSetUp() => Require.ProviderIs(StorageProvider.SqlServer);
28+
29+
[Test]
30+
public void NullNodeInitSql()
31+
{
32+
var domainConfig = DomainConfigurationFactory.Create();
33+
domainConfig.Types.Register(typeof(TestEntity));
34+
domainConfig.DefaultSchema = "dbo";
35+
domainConfig.ConnectionInitializationSql = "USE [DO-Tests]";
36+
domainConfig.UpgradeMode = DomainUpgradeMode.Recreate;
37+
38+
var nodeConfig = new NodeConfiguration("Additional");
39+
nodeConfig.UpgradeMode = DomainUpgradeMode.Recreate;
40+
nodeConfig.ConnectionInitializationSql = null;
41+
nodeConfig.SchemaMapping.Add("dbo", "Model1");
42+
43+
using (var domain = Domain.Build(domainConfig)) {
44+
var selectedNode = domain.SelectStorageNode(WellKnown.DefaultNodeId);
45+
using (var session = selectedNode.OpenSession())
46+
using (var tx = session.OpenTransaction()) {
47+
var service = session.Services.Get<DirectSqlAccessor>();
48+
using (var command = service.CreateCommand()) {
49+
command.CommandText = "SELECT DB_NAME() AS [Current Database];";
50+
var databaseName = command.ExecuteScalar();
51+
Assert.That(databaseName, Is.EqualTo("DO-Tests"));
52+
}
53+
}
54+
55+
_ = domain.StorageNodeManager.AddNode(nodeConfig);
56+
selectedNode = domain.SelectStorageNode("Additional");
57+
using (var session = selectedNode.OpenSession())
58+
using (var tx = session.OpenTransaction()) {
59+
var service = session.Services.Get<DirectSqlAccessor>();
60+
using (var command = service.CreateCommand()) {
61+
command.CommandText = "SELECT DB_NAME() AS [Current Database];";
62+
var databaseName = command.ExecuteScalar();
63+
Assert.That(databaseName, Is.EqualTo("DO-Tests"));
64+
}
65+
}
66+
}
67+
}
68+
69+
[Test]
70+
public void EmptyStringIninSql()
71+
{
72+
var domainConfig = DomainConfigurationFactory.Create();
73+
domainConfig.Types.Register(typeof(TestEntity));
74+
domainConfig.DefaultSchema = "dbo";
75+
domainConfig.ConnectionInitializationSql = "USE [DO-Tests]";
76+
domainConfig.UpgradeMode = DomainUpgradeMode.Recreate;
77+
78+
var nodeConfig = new NodeConfiguration("Additional");
79+
nodeConfig.UpgradeMode = DomainUpgradeMode.Recreate;
80+
nodeConfig.ConnectionInitializationSql = string.Empty;
81+
nodeConfig.SchemaMapping.Add("dbo", "Model1");
82+
83+
using (var domain = Domain.Build(domainConfig)) {
84+
var selectedNode = domain.SelectStorageNode(WellKnown.DefaultNodeId);
85+
using (var session = selectedNode.OpenSession())
86+
using (var tx = session.OpenTransaction()) {
87+
var connection = ((SqlSessionHandler) session.Handler).Connection;
88+
Assert.That(connection.ConnectionInfo, Is.EqualTo(domainConfig.ConnectionInfo));
89+
_ = new TestEntity(session);
90+
var service = session.Services.Get<DirectSqlAccessor>();
91+
using (var command = service.CreateCommand()) {
92+
command.CommandText = "SELECT DB_NAME() AS [Current Database];";
93+
var databaseName = command.ExecuteScalar();
94+
Assert.That(databaseName, Is.EqualTo("DO-Tests"));
95+
}
96+
}
97+
98+
_ = domain.StorageNodeManager.AddNode(nodeConfig);
99+
selectedNode = domain.SelectStorageNode("Additional");
100+
using (var session = selectedNode.OpenSession())
101+
using (var tx = session.OpenTransaction()) {
102+
var service = session.Services.Get<DirectSqlAccessor>();
103+
using (var command = service.CreateCommand()) {
104+
command.CommandText = "SELECT DB_NAME() AS [Current Database];";
105+
var databaseName = command.ExecuteScalar();
106+
Assert.That(databaseName, Is.EqualTo("DO-Tests"));
107+
}
108+
}
109+
}
110+
}
111+
112+
[Test]
113+
public void ValidInitSql()
114+
{
115+
var domainConfig = DomainConfigurationFactory.Create();
116+
domainConfig.Types.Register(typeof(TestEntity));
117+
domainConfig.DefaultSchema = "dbo";
118+
domainConfig.ConnectionInitializationSql = "USE [DO-Tests]";
119+
domainConfig.UpgradeMode = DomainUpgradeMode.Recreate;
120+
121+
var nodeConfig = new NodeConfiguration("Additional");
122+
nodeConfig.UpgradeMode = DomainUpgradeMode.Recreate;
123+
nodeConfig.ConnectionInitializationSql = "USE [DO-Tests-1]";
124+
nodeConfig.SchemaMapping.Add("dbo", "dbo");
125+
126+
using (var domain = Domain.Build(domainConfig)) {
127+
var selectedNode = domain.SelectStorageNode(WellKnown.DefaultNodeId);
128+
using (var session = selectedNode.OpenSession())
129+
using (var tx = session.OpenTransaction()) {
130+
var connection = ((SqlSessionHandler) session.Handler).Connection;
131+
Assert.That(connection.ConnectionInfo, Is.EqualTo(domainConfig.ConnectionInfo));
132+
_ = new TestEntity(session);
133+
var service = session.Services.Get<DirectSqlAccessor>();
134+
using (var command = service.CreateCommand()) {
135+
command.CommandText = "SELECT DB_NAME() AS [Current Database];";
136+
var databaseName = command.ExecuteScalar();
137+
Assert.That(databaseName, Is.EqualTo("DO-Tests"));
138+
}
139+
}
140+
141+
_ = domain.StorageNodeManager.AddNode(nodeConfig);
142+
selectedNode = domain.SelectStorageNode("Additional");
143+
using (var session = selectedNode.OpenSession())
144+
using (var tx = session.OpenTransaction()) {
145+
var service = session.Services.Get<DirectSqlAccessor>();
146+
using (var command = service.CreateCommand()) {
147+
command.CommandText = "SELECT DB_NAME() AS [Current Database];";
148+
var databaseName = command.ExecuteScalar();
149+
Assert.That(databaseName, Is.EqualTo("DO-Tests-1"));
150+
}
151+
}
152+
}
153+
}
154+
}
155+
}

0 commit comments

Comments
 (0)