Skip to content

Commit b40b2e2

Browse files
committed
Additional tests for the github issue 224
1 parent 5ed850e commit b40b2e2

File tree

1 file changed

+123
-15
lines changed

1 file changed

+123
-15
lines changed

Orm/Xtensive.Orm.Tests/Issues/IssueGithub0224_DelayedQueryCapture.cs

Lines changed: 123 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace Xtensive.Orm.Tests.Issues
1919
namespace IssueGithub0224_DelayedQueryCapture_Model
2020
{
2121
[HierarchyRoot]
22-
class Item : Entity
22+
public class Item : Entity
2323
{
2424
[Field, Key]
2525
public int Id { get; private set; }
@@ -32,50 +32,139 @@ class Item : Entity
3232
[Serializable]
3333
public class IssueGithub0224_DelayedQueryCapture : AutoBuildTest
3434
{
35-
public class OtherService
35+
36+
#region Services
37+
38+
public class OtherService1
39+
{
40+
public static volatile int InstanceCount;
41+
42+
public int N;
43+
44+
public OtherService1()
45+
{
46+
_ = Interlocked.Increment(ref InstanceCount);
47+
}
48+
49+
~OtherService1()
50+
{
51+
_ = Interlocked.Decrement(ref InstanceCount);
52+
}
53+
}
54+
55+
public class OtherService2
56+
{
57+
public static volatile int InstanceCount;
58+
59+
public int N;
60+
61+
public OtherService2()
62+
{
63+
_ = Interlocked.Increment(ref InstanceCount);
64+
}
65+
66+
~OtherService2()
67+
{
68+
_ = Interlocked.Decrement(ref InstanceCount);
69+
}
70+
}
71+
72+
public class OtherService3
3673
{
3774
public static volatile int InstanceCount;
3875

3976
public int N;
4077

41-
public OtherService()
78+
public OtherService3()
4279
{
43-
Interlocked.Increment(ref InstanceCount);
80+
_ = Interlocked.Increment(ref InstanceCount);
4481
}
4582

46-
~OtherService()
83+
~OtherService3()
4784
{
48-
Interlocked.Decrement(ref InstanceCount);
85+
_ = Interlocked.Decrement(ref InstanceCount);
4986
}
5087
}
5188

89+
#endregion
5290

5391
protected override DomainConfiguration BuildConfiguration()
5492
{
5593
var config = base.BuildConfiguration();
56-
config.Types.Register(typeof(Item).Assembly, typeof(Item).Namespace);
94+
config.Types.Register(typeof(Item));
5795
return config;
5896
}
5997

6098
[Test]
61-
public void DelayedQueryCapture()
99+
public void DelayedQueryWithIncludeTest()
100+
{
101+
var cachedItems = Domain.QueryCache.Count;
102+
using (var session = Domain.OpenSession())
103+
using (var t = session.OpenTransaction()) {
104+
var item = new Item() { Tag = 10 };
105+
DelayedQueryWithInclude(session);
106+
t.Complete();
107+
}
108+
TestHelper.CollectGarbage(true);
109+
Assert.AreEqual(0, OtherService1.InstanceCount);
110+
Assert.That(Domain.QueryCache.Count, Is.EqualTo(cachedItems));
111+
}
112+
113+
[Test]
114+
public void DelayedQueryWithContainsTest()
115+
{
116+
var cachedItems = Domain.QueryCache.Count;
117+
using (var session = Domain.OpenSession())
118+
using (var t = session.OpenTransaction()) {
119+
var item = new Item() { Tag = 10 };
120+
DelayedQueryWithContains(session);
121+
t.Complete();
122+
}
123+
124+
TestHelper.CollectGarbage(true);
125+
Assert.AreEqual(0, OtherService2.InstanceCount);
126+
Assert.That(Domain.QueryCache.Count, Is.EqualTo(cachedItems));
127+
}
128+
129+
[Test]
130+
public void DelayedQueryWithEqualityTest()
62131
{
132+
var cachedItems = Domain.QueryCache.Count;
63133
using (var session = Domain.OpenSession())
64134
using (var t = session.OpenTransaction()) {
65135
var item = new Item() { Tag = 10 };
66-
DelayedQuery(session);
136+
DelayedQueryWithEquality(session);
67137
t.Complete();
68138
}
69-
GC.Collect();
70-
Thread.Sleep(1000);
71-
GC.Collect();
72-
Assert.AreEqual(0, OtherService.InstanceCount);
139+
140+
TestHelper.CollectGarbage(true);
141+
Assert.AreEqual(0, OtherService3.InstanceCount);
142+
Assert.That(Domain.QueryCache.Count, Is.EqualTo(cachedItems + 1));
143+
}
144+
145+
private void DelayedQueryWithEquality(Session session)
146+
{
147+
var id = 1;
148+
var otherService = new OtherService3();
149+
150+
var items = session.Query.CreateDelayedQuery("ABC", q =>
151+
from t in q.All<Item>()
152+
where t.Id == id
153+
select t).ToArray();
154+
155+
var bb1 = items
156+
.Select(a => new {
157+
a.Id,
158+
A = new {
159+
B = otherService.N == a.Id
160+
},
161+
});
73162
}
74163

75-
private void DelayedQuery(Session session)
164+
private void DelayedQueryWithInclude(Session session)
76165
{
77166
var ids = new[] { 1, 2 };
78-
var otherService = new OtherService();
167+
var otherService = new OtherService1();
79168

80169
var items = session.Query.CreateDelayedQuery(q =>
81170
from t in q.All<Item>()
@@ -90,5 +179,24 @@ where t.Id.In(ids)
90179
},
91180
});
92181
}
182+
183+
private void DelayedQueryWithContains(Session session)
184+
{
185+
var ids = new[] { 1, 2 };
186+
var otherService = new OtherService2();
187+
188+
var items = session.Query.CreateDelayedQuery(q =>
189+
from t in q.All<Item>()
190+
where ids.Contains(t.Id)
191+
select t).ToArray();
192+
193+
var bb1 = items
194+
.Select(a => new {
195+
a.Id,
196+
A = new {
197+
B = otherService.N == a.Id
198+
},
199+
});
200+
}
93201
}
94202
}

0 commit comments

Comments
 (0)