Skip to content

Commit 2f6d2ba

Browse files
committed
Support multitenancy in id generators
1 parent 79ad5b8 commit 2f6d2ba

34 files changed

+506
-249
lines changed

src/NHibernate.Test/Async/IdGen/Enhanced/Forcedtable/HiLoForcedTableSequenceTest.cs

+15-11
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,20 @@
88
//------------------------------------------------------------------------------
99

1010

11-
using NUnit.Framework;
1211
using NHibernate.Id.Enhanced;
13-
using System.Collections;
12+
using NHibernate.Test.MultiTenancy;
13+
using NUnit.Framework;
1414

1515
namespace NHibernate.Test.IdGen.Enhanced.Forcedtable
1616
{
1717
using System.Threading.Tasks;
18-
[TestFixture]
19-
public class HiLoForcedTableSequenceTestAsync : TestCase
18+
[TestFixture(null)]
19+
[TestFixture("test")]
20+
public class HiLoForcedTableSequenceTestAsync : TestCaseWithMultiTenancy
2021
{
22+
public HiLoForcedTableSequenceTestAsync(string tenantIdentifier) : base(tenantIdentifier)
23+
{
24+
}
2125
protected override string[] Mappings
2226
{
2327
get { return new[] { "IdGen.Enhanced.Forcedtable.HiLo.hbm.xml" }; }
@@ -54,19 +58,19 @@ public async Task TestNormalBoundaryAsync()
5458
long expectedId = i + 1;
5559
Assert.That(entities[i].Id, Is.EqualTo(expectedId));
5660
Assert.That(generator.DatabaseStructure.TimesAccessed, Is.EqualTo(1)); // initialization
57-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(1)); // initialization
58-
Assert.That(optimizer.LastValue, Is.EqualTo(i + 1));
59-
Assert.That(optimizer.HiValue, Is.EqualTo(increment + 1));
61+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(1)); // initialization
62+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(i + 1));
63+
Assert.That(optimizer.GetHiValue(TenantIdentifier), Is.EqualTo(increment + 1));
6064
}
6165

6266
// now force a "clock over"
6367
entities[increment] = new Entity("" + increment);
6468
await (session.SaveAsync(entities[increment]));
6569
Assert.That(entities[optimizer.IncrementSize].Id, Is.EqualTo(optimizer.IncrementSize + 1));
6670
Assert.That(generator.DatabaseStructure.TimesAccessed, Is.EqualTo(2)); // initialization + clock-over
67-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(2)); // initialization + clock-over
68-
Assert.That(optimizer.LastValue, Is.EqualTo(increment + 1));
69-
Assert.That(optimizer.HiValue, Is.EqualTo(increment * 2 + 1));
71+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(2)); // initialization + clock-over
72+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(increment + 1));
73+
Assert.That(optimizer.GetHiValue(TenantIdentifier), Is.EqualTo(increment * 2 + 1));
7074

7175
await (transaction.CommitAsync());
7276
}
@@ -85,4 +89,4 @@ public async Task TestNormalBoundaryAsync()
8589
}
8690
}
8791
}
88-
}
92+
}

src/NHibernate.Test/Async/IdGen/Enhanced/Forcedtable/PooledForcedTableSequenceTest.cs

+13-9
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,20 @@
88
//------------------------------------------------------------------------------
99

1010

11-
using NUnit.Framework;
1211
using NHibernate.Id.Enhanced;
13-
using System.Collections;
12+
using NHibernate.Test.MultiTenancy;
13+
using NUnit.Framework;
1414

1515
namespace NHibernate.Test.IdGen.Enhanced.Forcedtable
1616
{
1717
using System.Threading.Tasks;
18-
[TestFixture]
19-
public class PooledForcedTableSequenceTestAsync : TestCase
18+
[TestFixture(null)]
19+
[TestFixture("test")]
20+
public class PooledForcedTableSequenceTestAsync : TestCaseWithMultiTenancy
2021
{
22+
public PooledForcedTableSequenceTestAsync(string tenantIdentifier) : base(tenantIdentifier)
23+
{
24+
}
2125
protected override string[] Mappings
2226
{
2327
get { return new[] { "IdGen.Enhanced.Forcedtable.Pooled.hbm.xml" }; }
@@ -55,8 +59,8 @@ public async Task TestNormalBoundaryAsync()
5559
Assert.That(entities[i].Id, Is.EqualTo(expectedId));
5660
// NOTE : initialization calls table twice
5761
Assert.That(generator.DatabaseStructure.TimesAccessed, Is.EqualTo(2)); // initialization
58-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(increment + 1)); // initialization
59-
Assert.That(optimizer.LastValue, Is.EqualTo(i + 1));
62+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(increment + 1)); // initialization
63+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(i + 1));
6064
}
6165

6266
// now force a "clock over"
@@ -66,8 +70,8 @@ public async Task TestNormalBoundaryAsync()
6670
Assert.That(entities[optimizer.IncrementSize].Id, Is.EqualTo(optimizer.IncrementSize + 1));
6771
// initialization (2) + clock over
6872
Assert.That(generator.DatabaseStructure.TimesAccessed, Is.EqualTo(3));
69-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(increment*2 + 1));
70-
Assert.That(optimizer.LastValue, Is.EqualTo(increment + 1));
73+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(increment*2 + 1));
74+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(increment + 1));
7175

7276
await (transaction.CommitAsync());
7377
}
@@ -86,4 +90,4 @@ public async Task TestNormalBoundaryAsync()
8690
}
8791
}
8892
}
89-
}
93+
}

src/NHibernate.Test/Async/IdGen/Enhanced/OptimizerTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
//------------------------------------------------------------------------------
99

1010

11-
using NUnit.Framework;
1211
using NHibernate.Id.Enhanced;
12+
using NUnit.Framework;
1313

1414
namespace NHibernate.Test.IdGen.Enhanced
1515
{

src/NHibernate.Test/Async/IdGen/Enhanced/Sequence/HiLoSequenceTest.cs

+14-9
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,18 @@
1111
using System.Collections;
1212
using NUnit.Framework;
1313
using NHibernate.Id.Enhanced;
14+
using NHibernate.Test.MultiTenancy;
1415

1516
namespace NHibernate.Test.IdGen.Enhanced.Sequence
1617
{
1718
using System.Threading.Tasks;
18-
[TestFixture]
19-
public class HiLoSequenceTestAsync : TestCase
19+
[TestFixture(null)]
20+
[TestFixture("test")]
21+
public class HiLoSequenceTestAsync : TestCaseWithMultiTenancy
2022
{
23+
public HiLoSequenceTestAsync(string tenantIdentifier) : base(tenantIdentifier)
24+
{
25+
}
2126
protected override string[] Mappings
2227
{
2328
get { return new[] { "IdGen.Enhanced.Sequence.HiLo.hbm.xml" }; }
@@ -51,18 +56,18 @@ public async Task TestNormalBoundaryAsync()
5156
entities[i] = new Entity("" + (i + 1));
5257
await (session.SaveAsync(entities[i]));
5358
Assert.That(generator.DatabaseStructure.TimesAccessed, Is.EqualTo(1)); // initialization
54-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(1)); // initialization
55-
Assert.That(optimizer.LastValue, Is.EqualTo(i + 1));
56-
Assert.That(optimizer.HiValue, Is.EqualTo(increment + 1));
59+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(1)); // initialization
60+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(i + 1));
61+
Assert.That(optimizer.GetHiValue(TenantIdentifier), Is.EqualTo(increment + 1));
5762
}
5863

5964
// now force a "clock over"
6065
entities[increment] = new Entity("" + increment);
6166
await (session.SaveAsync(entities[increment]));
6267
Assert.That(generator.DatabaseStructure.TimesAccessed, Is.EqualTo(2));
63-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(2));
64-
Assert.That(optimizer.LastValue, Is.EqualTo(increment + 1));
65-
Assert.That(optimizer.HiValue, Is.EqualTo(increment * 2 + 1));
68+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(2));
69+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(increment + 1));
70+
Assert.That(optimizer.GetHiValue(TenantIdentifier), Is.EqualTo(increment * 2 + 1));
6671

6772
await (transaction.CommitAsync());
6873
}
@@ -80,4 +85,4 @@ public async Task TestNormalBoundaryAsync()
8085
}
8186
}
8287
}
83-
}
88+
}

src/NHibernate.Test/Async/IdGen/Enhanced/Sequence/PooledSequenceTest.cs

+13-9
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,20 @@
88
//------------------------------------------------------------------------------
99

1010

11-
using System.Collections;
12-
using NUnit.Framework;
1311
using NHibernate.Id.Enhanced;
12+
using NHibernate.Test.MultiTenancy;
13+
using NUnit.Framework;
1414

1515
namespace NHibernate.Test.IdGen.Enhanced.Sequence
1616
{
1717
using System.Threading.Tasks;
18-
[TestFixture]
19-
public class PooledSequenceTestAsync : TestCase
18+
[TestFixture(null)]
19+
[TestFixture("test")]
20+
public class PooledSequenceTestAsync : TestCaseWithMultiTenancy
2021
{
22+
public PooledSequenceTestAsync(string tenantIdentifier) : base(tenantIdentifier)
23+
{
24+
}
2125
protected override string[] Mappings
2226
{
2327
get { return new[] { "IdGen.Enhanced.Sequence.Pooled.hbm.xml" }; }
@@ -51,16 +55,16 @@ public async Task TestNormalBoundaryAsync()
5155
entities[i] = new Entity("" + (i + 1));
5256
await (session.SaveAsync(entities[i]));
5357
Assert.That(generator.DatabaseStructure.TimesAccessed, Is.EqualTo(2)); // initialization calls seq twice
54-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(increment + 1)); // initialization calls seq twice
55-
Assert.That(optimizer.LastValue, Is.EqualTo(i + 1));
58+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(increment + 1)); // initialization calls seq twice
59+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(i + 1));
5660
}
5761

5862
// now force a "clock over"
5963
entities[increment] = new Entity("" + increment);
6064
await (session.SaveAsync(entities[increment]));
6165
Assert.That(generator.DatabaseStructure.TimesAccessed, Is.EqualTo(3)); // initialization (2) + clock over
62-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(increment * 2 + 1)); // initialization (2) + clock over
63-
Assert.That(optimizer.LastValue, Is.EqualTo(increment + 1));
66+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(increment * 2 + 1)); // initialization (2) + clock over
67+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(increment + 1));
6468

6569
await (transaction.CommitAsync());
6670
}
@@ -79,4 +83,4 @@ public async Task TestNormalBoundaryAsync()
7983
}
8084
}
8185
}
82-
}
86+
}

src/NHibernate.Test/Async/IdGen/Enhanced/SourceMock.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,4 @@ public Task<long> GetNextValueAsync(CancellationToken cancellationToken)
4646
}
4747
}
4848
}
49-
}
49+
}

src/NHibernate.Test/Async/IdGen/Enhanced/Table/HiLoTableTest.cs

+13-8
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,19 @@
1010

1111
using System.Collections;
1212
using NHibernate.Id.Enhanced;
13+
using NHibernate.Test.MultiTenancy;
1314
using NUnit.Framework;
1415

1516
namespace NHibernate.Test.IdGen.Enhanced.Table
1617
{
1718
using System.Threading.Tasks;
18-
[TestFixture]
19-
public class HiLoTableTestAsync : TestCase
19+
[TestFixture(null)]
20+
[TestFixture("test")]
21+
public class HiLoTableTestAsync : TestCaseWithMultiTenancy
2022
{
23+
public HiLoTableTestAsync(string tenantIdentifier) : base(tenantIdentifier)
24+
{
25+
}
2126
protected override string[] Mappings
2227
{
2328
get { return new[] { "IdGen.Enhanced.Table.HiLo.hbm.xml" }; }
@@ -50,18 +55,18 @@ public async Task TestNormalBoundaryAsync()
5055
entities[i] = new Entity("" + (i + 1));
5156
await (s.SaveAsync(entities[i]));
5257
Assert.That(generator.TableAccessCount, Is.EqualTo(1)); // initialization
53-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(1)); // initialization
54-
Assert.That(optimizer.LastValue, Is.EqualTo(i + 1));
55-
Assert.That(optimizer.HiValue, Is.EqualTo(increment + 1));
58+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(1)); // initialization
59+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(i + 1));
60+
Assert.That(optimizer.GetHiValue(TenantIdentifier), Is.EqualTo(increment + 1));
5661
}
5762

5863
// now force a "clock over"
5964
entities[increment] = new Entity("" + increment);
6065
await (s.SaveAsync(entities[increment]));
6166
Assert.That(generator.TableAccessCount, Is.EqualTo(2));
62-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(2));
63-
Assert.That(optimizer.LastValue, Is.EqualTo(increment + 1));
64-
Assert.That(optimizer.HiValue, Is.EqualTo((increment * 2) + 1));
67+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(2));
68+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(increment + 1));
69+
Assert.That(optimizer.GetHiValue(TenantIdentifier), Is.EqualTo((increment * 2) + 1));
6570
await (transaction.CommitAsync());
6671
}
6772

src/NHibernate.Test/Async/IdGen/Enhanced/Table/PooledLoTableTest.cs

+11-6
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,19 @@
1010

1111
using System.Collections;
1212
using NHibernate.Id.Enhanced;
13+
using NHibernate.Test.MultiTenancy;
1314
using NUnit.Framework;
1415

1516
namespace NHibernate.Test.IdGen.Enhanced.Table
1617
{
1718
using System.Threading.Tasks;
18-
[TestFixture]
19-
public class PooledLoTableTestAsync : TestCase
19+
[TestFixture(null)]
20+
[TestFixture("test")]
21+
public class PooledLoTableTestAsync : TestCaseWithMultiTenancy
2022
{
23+
public PooledLoTableTestAsync(string tenantIdentifier) : base(tenantIdentifier)
24+
{
25+
}
2126
protected override string[] Mappings
2227
{
2328
get { return new[] { "IdGen.Enhanced.Table.PooledLo.hbm.xml" }; }
@@ -50,16 +55,16 @@ public async Task TestNormalBoundaryAsync()
5055
entities[i] = new Entity("" + (i + 1));
5156
await (s.SaveAsync(entities[i]));
5257
Assert.That(generator.TableAccessCount, Is.EqualTo(1)); // initialization
53-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(1)); // initialization
54-
Assert.That(optimizer.LastValue, Is.EqualTo(i + 1));
58+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(1)); // initialization
59+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(i + 1));
5560
}
5661

5762
// now force a "clock over"
5863
entities[increment] = new Entity("" + increment);
5964
await (s.SaveAsync(entities[increment]));
6065
Assert.That(generator.TableAccessCount, Is.EqualTo(2));
61-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(increment + 1));
62-
Assert.That(optimizer.LastValue, Is.EqualTo(increment + 1));
66+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(increment + 1));
67+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(increment + 1));
6368

6469
await (transaction.CommitAsync());
6570
}

src/NHibernate.Test/Async/IdGen/Enhanced/Table/PooledTableTest.cs

+11-7
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,20 @@
88
//------------------------------------------------------------------------------
99

1010

11-
using System.Collections;
1211
using NHibernate.Id.Enhanced;
12+
using NHibernate.Test.MultiTenancy;
1313
using NUnit.Framework;
1414

1515
namespace NHibernate.Test.IdGen.Enhanced.Table
1616
{
1717
using System.Threading.Tasks;
18-
[TestFixture]
19-
public class PooledTableTestAsync : TestCase
18+
[TestFixture(null)]
19+
[TestFixture("test")]
20+
public class PooledTableTestAsync : TestCaseWithMultiTenancy
2021
{
22+
public PooledTableTestAsync(string tenantIdentifier) : base(tenantIdentifier)
23+
{
24+
}
2125
protected override string[] Mappings
2226
{
2327
get { return new[] { "IdGen.Enhanced.Table.Pooled.hbm.xml" }; }
@@ -50,16 +54,16 @@ public async Task TestNormalBoundaryAsync()
5054
entities[i] = new Entity("" + (i + 1));
5155
await (s.SaveAsync(entities[i]));
5256
Assert.That(generator.TableAccessCount, Is.EqualTo(2)); // initialization calls seq twice
53-
Assert.That(optimizer.LastSourceValue, Is.EqualTo(increment + 1)); // initialization calls seq twice
54-
Assert.That(optimizer.LastValue, Is.EqualTo(i + 1));
57+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo(increment + 1)); // initialization calls seq twice
58+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(i + 1));
5559
}
5660

5761
// now force a "clock over"
5862
entities[increment] = new Entity("" + increment);
5963
await (s.SaveAsync(entities[increment]));
6064
Assert.That(generator.TableAccessCount, Is.EqualTo(3)); // initialization (2) + clock over
61-
Assert.That(optimizer.LastSourceValue, Is.EqualTo((increment * 2) + 1)); // initialization (2) + clock over
62-
Assert.That(optimizer.LastValue, Is.EqualTo(increment + 1));
65+
Assert.That(optimizer.GetLastSourceValue(TenantIdentifier), Is.EqualTo((increment * 2) + 1)); // initialization (2) + clock over
66+
Assert.That(optimizer.GetLastValue(TenantIdentifier), Is.EqualTo(increment + 1));
6367

6468
await (transaction.CommitAsync());
6569
}

0 commit comments

Comments
 (0)