Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
288 changes: 136 additions & 152 deletions Extensions/Xtensive.Orm.Localization.Tests/MultipleNodesTest.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
using System;
// Copyright (C) 2015-2020 Xtensive LLC.
// This code is distributed under MIT license terms.
// See the License.txt file in the project root for more information.

using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
Expand Down Expand Up @@ -189,20 +193,22 @@ public class IssueJira0614_MaterializationContextModel
{
private const string Node2Name = "Node2";
private const string Node1Name = "Node1";
private const string ErrorInTestFixtureSetup = "Error in Text fixture setup {0}";

[OneTimeSetUp]
public void TestFixtureSetUp() => Require.ProviderIs(StorageProvider.SqlServer);

[Test]
public void Test01()
{
var configuration1 = CreateConfiguration(typeof (Node1.TimesheetCode), DomainUpgradeMode.Recreate, "Model1");
var configuration2 = CreateConfiguration(typeof (Node2.TimesheetCode), DomainUpgradeMode.Recreate, "Model2");
var configuration1 = CreateConfiguration(typeof(Node1.TimesheetCode), DomainUpgradeMode.Recreate, "Model1");
var configuration2 = CreateConfiguration(typeof(Node2.TimesheetCode), DomainUpgradeMode.Recreate, "Model2");

using (var domain = BuildDomain(configuration1)) {
Assert.That(domain.Model.Types[typeof (Node1.TimesheetCode)].TypeId, Is.EqualTo(288));
Assert.That(domain.Model.Types[typeof(Node1.TimesheetCode)].TypeId, Is.EqualTo(288));
using (var session = domain.OpenSession())
using (var transaction = session.OpenTransaction()) {
for (var i = 0; i < 10; i++) {
new Node1.TimesheetCode(session) {
_ = new Node1.TimesheetCode(session) {
Active = i % 2==0,
Code = "jdfgdj" + i,
Description = "dfjghjdhfgjhsjkhgjdfg",
Expand Down Expand Up @@ -232,7 +238,7 @@ public void Test01()
using (var session = domain.OpenSession())
using (var transaction = session.OpenTransaction()) {
for (var i = 0; i < 10; i++) {
new Node2.TimesheetCode(session) {
_ = new Node2.TimesheetCode(session) {
Active = i % 2 == 0,
Code = "jdfgdj" + i,
Description = "dfjghjdhfgjhsjkhgjdfg",
Expand All @@ -257,12 +263,11 @@ public void Test01()
}
}

var multinodeDomainConfiguration = CreateConfiguration(typeof (Target.TimesheetCode), DomainUpgradeMode.Skip, "Model1");
var multinodeDomainConfiguration = CreateConfiguration(typeof(Target.TimesheetCode), DomainUpgradeMode.Skip, "Model1");
var nodeConfiguration = CreateNodeConfiguration(Node2Name, "Model1", "Model2", DomainUpgradeMode.Skip);
using (var domain = BuildDomain(multinodeDomainConfiguration)) {
domain.StorageNodeManager.AddNode(nodeConfiguration);

using (var domain = BuildDomain(multinodeDomainConfiguration, nodeConfiguration)) {
using (var session = domain.OpenSession()) {
session.SelectStorageNode(WellKnown.DefaultNodeId);
using (var transaction = session.OpenTransaction()) {
var list = session.Query.All<Target.TimesheetCode>()
.Where(c => c.Active)
Expand All @@ -288,19 +293,17 @@ public void Test01()
}
}

using (var session = domain.OpenSession()) {
session.SelectStorageNode(Node2Name);
using (var transaction = session.OpenTransaction()) {

var list = session.Query.All<Target.TimesheetCode>()
.Where(c => c.Active)
.OrderBy(c => c.Code)
.AsEnumerable()
.Select(c => new {
Value = c.Code,
Name = c.Code
}).ToList();
}
var selectedNode = domain.StorageNodeManager.GetNode(Node2Name);
using (var session = selectedNode.OpenSession())
using (var transaction = session.OpenTransaction()) {
var list = session.Query.All<Target.TimesheetCode>()
.Where(c => c.Active)
.OrderBy(c => c.Code)
.AsEnumerable()
.Select(c => new {
Value = c.Code,
Name = c.Code
}).ToList();
}
}
}
Expand All @@ -316,7 +319,7 @@ public void Test02()
using (var session = domain.OpenSession())
using (var transaction = session.OpenTransaction()) {
for (var i = 0; i < 10; i++) {
new Node1.TimesheetCode(session) {
_ = new Node1.TimesheetCode(session) {
Active = i % 2 == 0,
Code = "jdfgdj" + i,
Description = "dfjghjdhfgjhsjkhgjdfg",
Expand Down Expand Up @@ -347,7 +350,7 @@ public void Test02()
using (var session = domain.OpenSession())
using (var transaction = session.OpenTransaction()) {
for (var i = 0; i < 10; i++) {
new Node2.TimesheetCode(session) {
_ = new Node2.TimesheetCode(session) {
Active = i % 2 == 0,
Code = "jdfgdj" + i,
Description = "dfjghjdhfgjhsjkhgjdfg",
Expand All @@ -364,8 +367,7 @@ public void Test02()
.Where(c => c.Active)
.OrderBy(c => c.Code)
.AsEnumerable()
.Select(c => new
{
.Select(c => new {
Value = c.Code,
Name = c.Code
}).ToList();
Expand All @@ -375,45 +377,42 @@ public void Test02()

var multinodeDomainConfiguration = CreateConfiguration(typeof(Target.TimesheetCode), DomainUpgradeMode.PerformSafely, "Model2");
var nodeConfiguration = CreateNodeConfiguration(Node1Name, "Model2", "Model1", DomainUpgradeMode.PerformSafely);

using (var domain = BuildDomain(multinodeDomainConfiguration, nodeConfiguration)) {
using (var session = domain.OpenSession()) {
session.SelectStorageNode(WellKnown.DefaultNodeId);
using (var transaction = session.OpenTransaction()) {
var list = session.Query.All<Target.TimesheetCode>()
.Where(c => c.Active)
.OrderBy(c => c.Code)
.AsEnumerable()
.Select(c => new
{
.Select(c => new {
Value = c.Code,
Name = c.Code
}).ToList();
Assert.That(list.Count, Is.EqualTo(5));
}

using (var transaction = session.OpenTransaction()) {
var list = session.Query.All<Target.TimesheetCode>()
.Where(c => c.Active)
.OrderBy(c => c.Code)
.AsEnumerable()
.Select(c => new
{
.Select(c => new {
Value = c.Code,
Name = c.Code
}).ToList();
Assert.That(list.Count, Is.EqualTo(5));
}
}

using (var session = domain.OpenSession()) {
session.SelectStorageNode(Node1Name);
var selectedNode = domain.StorageNodeManager.GetNode(Node1Name);
using (var session = selectedNode.OpenSession()) {
using (var transaction = session.OpenTransaction()) {

var list = session.Query.All<Target.TimesheetCode>()
.Where(c => c.Active)
.OrderBy(c => c.Code)
.AsEnumerable()
.Select(c => new
{
.Select(c => new {
Value = c.Code,
Name = c.Code
}).ToList();
Expand All @@ -432,12 +431,6 @@ public void Test02()
}
}

private void CheckRequirements()
{
Require.AllFeaturesSupported(ProviderFeatures.Multischema);
Require.ProviderIs(StorageProvider.SqlServer);
}

private Domain BuildDomain(DomainConfiguration configuration, NodeConfiguration nodeConfiguration = null)
{
try{
Expand Down Expand Up @@ -469,25 +462,5 @@ private NodeConfiguration CreateNodeConfiguration(string nodeId, string oldSchem
configuration.UpgradeMode = upgradeMode;
return configuration;
}

[OneTimeSetUp]
public void TestFixtureSetUp()
{
try {
CheckRequirements();
}
catch (IgnoreException) {
throw;
}
catch (Exception e) {
Debug.WriteLine(ErrorInTestFixtureSetup, e);
throw;
}
}

[OneTimeTearDown]
public void TestFixtureTearDown()
{
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright (C) 2016 Xtensive LLC.
// All rights reserved.
// For conditions of distribution and use, see license.
// Copyright (C) 2016-2020 Xtensive LLC.
// This code is distributed under MIT license terms.
// See the License.txt file in the project root for more information.
// Created by: Alexey Kulakov
// Created: 2016.04.16

Expand Down Expand Up @@ -400,8 +400,8 @@ public void MainTest()
using (var domain = Domain.Build(configuration)) {
Assert.That(domain.Configuration.IsMultischema, Is.EqualTo(true));
Assert.That(domain.Configuration.IsMultidatabase, Is.EqualTo(false));
domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, alpha, DomainUpgradeMode.Recreate));
domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, beta, DomainUpgradeMode.Recreate));
_ = domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, alpha, DomainUpgradeMode.Recreate));
_ = domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, beta, DomainUpgradeMode.Recreate));

CheckNode(domain, alpha.Name, false);
CheckNode(domain, beta.Name, true);
Expand Down Expand Up @@ -461,18 +461,17 @@ private void BuildBaseVersion()
{
var configuration = BuildConfiguration(main, DomainUpgradeMode.Recreate, typeof (ModelNamespace.HintTest.BaseVersion.Customer));
using (var domain = Domain.Build(configuration)) {
domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, alpha, DomainUpgradeMode.Recreate));
domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, beta, DomainUpgradeMode.Recreate));

using (var session = domain.OpenSession()) {
session.SelectStorageNode(alpha.Name);
using (var tx = session.OpenTransaction()) {
new ModelNamespace.HintTest.BaseVersion.Customer { Name = "CustomerName" };
new ModelNamespace.HintTest.BaseVersion.Customer { Name = "Groznov" };
new ModelNamespace.HintTest.BaseVersion.Order { Number = 99, Text = "Test order number 99" };
new ModelNamespace.HintTest.BaseVersion.Order { Number = 1, Text = "Test order number 1" };
tx.Complete();
}
_ = domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, alpha, DomainUpgradeMode.Recreate));
_ = domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, beta, DomainUpgradeMode.Recreate));

var selectedNode = domain.StorageNodeManager.GetNode(alpha.Name);
using (var session = selectedNode.OpenSession())
using (var tx = session.OpenTransaction()) {
_ = new ModelNamespace.HintTest.BaseVersion.Customer { Name = "CustomerName" };
_ = new ModelNamespace.HintTest.BaseVersion.Customer { Name = "Groznov" };
_ = new ModelNamespace.HintTest.BaseVersion.Order { Number = 99, Text = "Test order number 99" };
_ = new ModelNamespace.HintTest.BaseVersion.Order { Number = 1, Text = "Test order number 1" };
tx.Complete();
}
}
}
Expand All @@ -481,8 +480,8 @@ private void BuildUpgradedVersion(Type type)
{
var configuration = BuildConfiguration(main, DomainUpgradeMode.PerformSafely, type);
using (var domain = Domain.Build(configuration)) {
domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, alpha, DomainUpgradeMode.PerformSafely));
domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, beta, DomainUpgradeMode.PerformSafely));
_ = domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, alpha, DomainUpgradeMode.PerformSafely));
_ = domain.StorageNodeManager.AddNode(BuildNodeConfiguration(domain.Configuration, beta, DomainUpgradeMode.PerformSafely));
}
}

Expand All @@ -500,12 +499,17 @@ private void CheckNode(Domain domain, string nodeName, bool spoiledExpected)
currentModel.UpdateReferences();
currentModel.UpdateMappings(node.Configuration); //this operation suppose to be performed by DataObjects internally

foreach (var typeInfo in currentModel.Types.Where(t => !t.IsSystem))
foreach (var typeInfo in currentModel.Types.Where(t => !t.IsSystem)) {
Assert.AreEqual(typeInfo.MappingSchema, expectedSchema);
}

var func = spoiledExpected
? new Action<string, string>(Assert.AreNotEqual)
: new Action<string, string>(Assert.AreEqual);

var func = spoiledExpected ? new Action<string, string>(Assert.AreNotEqual) : new Action<string, string>(Assert.AreEqual);
foreach (var typeInfo in spoiledModel.Types.Where(t => !t.IsSystem))
foreach (var typeInfo in spoiledModel.Types.Where(t => !t.IsSystem)) {
func(typeInfo.MappingSchema, expectedSchema);
}
}

private NodeConfiguration BuildNodeConfiguration(DomainConfiguration domainConfiguration, ClientNodeConfiguration nodeConfiguration, DomainUpgradeMode upgradeMode)
Expand All @@ -514,8 +518,10 @@ private NodeConfiguration BuildNodeConfiguration(DomainConfiguration domainConfi
node.ConnectionInfo = nodeConfiguration.ConnectionInfo;
node.ConnectionInitializationSql = nodeConfiguration.InitializationSql;
node.UpgradeMode = upgradeMode;
if (!domainConfiguration.DefaultSchema.IsNullOrEmpty() && !nodeConfiguration.DefaultSchema.IsNullOrEmpty())
if (!domainConfiguration.DefaultSchema.IsNullOrEmpty() && !nodeConfiguration.DefaultSchema.IsNullOrEmpty()) {
node.SchemaMapping.Add(domainConfiguration.DefaultSchema, nodeConfiguration.DefaultSchema);
}

return node;
}

Expand Down Expand Up @@ -556,8 +562,9 @@ private void BuildNodeConfigurationsMetadata()

private ConnectionInfo ComposeConnectionToMasterDatabase(ConnectionInfo baseConnectionInfo)
{
if (baseConnectionInfo.ConnectionUrl==null)
if (baseConnectionInfo.ConnectionUrl==null) {
throw new InvalidOperationException("Can't convert connection string based ConnectionInfo");
}

var provider = baseConnectionInfo.ConnectionUrl.Protocol;
var user = baseConnectionInfo.ConnectionUrl.User;
Expand All @@ -567,21 +574,21 @@ private ConnectionInfo ComposeConnectionToMasterDatabase(ConnectionInfo baseConn
var database = "master";
var parameters = baseConnectionInfo.ConnectionUrl.Params;

string urlTemplate = "{0}://{1}{2}{3}/{4}{5}";
var urlTemplate = "{0}://{1}{2}{3}/{4}{5}";
var authenticationPartTemplate = "{0}:{1}@";

var authentication = user.IsNullOrEmpty()
? string.Empty
: string.Format(authenticationPartTemplate, user, password);

var portPart = port==0
var portPart = port == 0
? string.Empty
: ":" + port;

var parametersPart = string.Empty;
if (parameters.Count > 0) {
parametersPart += "?";
parametersPart = parameters.Aggregate(parametersPart, (current, parameter) => current + (parameter.Key + "=" + parameter.Value + "&"));
parametersPart = parameters.Aggregate(parametersPart, (current, parameter) => current + parameter.Key + "=" + parameter.Value + "&");
parametersPart = parametersPart.TrimEnd('&');
}

Expand Down
Loading