Skip to content

Commit 290281c

Browse files
committed
Fix NRE and correct disposal of weak cache instances in test
1 parent 5c49257 commit 290281c

File tree

2 files changed

+105
-94
lines changed

2 files changed

+105
-94
lines changed

Orm/Xtensive.Orm.Tests.Core/Caching/WeakCacheTest.cs

Lines changed: 48 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,24 @@ public class WeakCacheTest
1919
[TearDown]
2020
public void TearDown()
2121
{
22-
globalCache.Dispose();
22+
if (globalCache is not null) {
23+
globalCache.Dispose();
24+
}
2325
}
2426

2527
[Test]
2628
public void ConstructorsTest()
2729
{
28-
var cache = new WeakCache<string, TestClass>(
29-
false, value => value.Text);
30+
using (var cache = new WeakCache<string, TestClass>(
31+
false, value => value.Text)) {
3032

31-
Assert.That(cache.KeyExtractor, Is.Not.Null);
33+
Assert.That(cache.KeyExtractor, Is.Not.Null);
3234

33-
var item = new TestClass("100");
34-
cache.Add(item);
35+
var item = new TestClass("100");
36+
cache.Add(item);
3537

36-
Assert.That(cache.Count, Is.EqualTo(1));
38+
Assert.That(cache.Count, Is.EqualTo(1));
39+
}
3740
}
3841

3942
[Test]
@@ -45,26 +48,27 @@ public void ConstructorDenyTest()
4548
[Test]
4649
public void AddRemoveTest()
4750
{
48-
var cache = new WeakCache<string, TestClass>(false, value => value.Text);
51+
using (var cache = new WeakCache<string, TestClass>(false, value => value.Text)) {
4952

50-
TestClass item = new TestClass("1");
51-
cache.Add(item);
52-
Assert.That(cache.Count, Is.EqualTo(1));
53+
TestClass item = new TestClass("1");
54+
cache.Add(item);
55+
Assert.That(cache.Count, Is.EqualTo(1));
5356

54-
item = new TestClass("2");
55-
cache.Add(item);
56-
Assert.That(cache.Count, Is.EqualTo(2));
57-
Assert.That(cache[item.Text, false], Is.EqualTo(item));
57+
item = new TestClass("2");
58+
cache.Add(item);
59+
Assert.That(cache.Count, Is.EqualTo(2));
60+
Assert.That(cache[item.Text, false], Is.EqualTo(item));
5861

59-
ICache<string, TestClass> icache = cache;
60-
Assert.That(icache[item.Text, false], Is.EqualTo(item));
61-
Assert.That(icache["3", false], Is.EqualTo(null));
62+
ICache<string, TestClass> icache = cache;
63+
Assert.That(icache[item.Text, false], Is.EqualTo(item));
64+
Assert.That(icache["3", false], Is.EqualTo(null));
6265

63-
cache.Remove(item);
64-
Assert.That(cache.Count, Is.EqualTo(1));
66+
cache.Remove(item);
67+
Assert.That(cache.Count, Is.EqualTo(1));
6568

66-
cache.Clear();
67-
Assert.That(cache.Count, Is.EqualTo(0));
69+
cache.Clear();
70+
Assert.That(cache.Count, Is.EqualTo(0));
71+
}
6872
}
6973

7074
[Test]
@@ -91,31 +95,32 @@ public void RemoveDenyTest1()
9195
[Test]
9296
public void IEnumerableTest()
9397
{
94-
var cache = new WeakCache<string, TestClass>(false, value => value.Text);
98+
using (var cache = new WeakCache<string, TestClass>(false, value => value.Text)) {
9599

96-
for (int i = 0; i < 100; i++)
97-
cache.Add(new TestClass("item " + i));
100+
for (int i = 0; i < 100; i++)
101+
cache.Add(new TestClass("item " + i));
98102

99-
Assert.That(cache.Count >= 0, Is.True);
100-
Assert.That(cache.Count <= 100, Is.True);
103+
Assert.That(cache.Count >= 0, Is.True);
104+
Assert.That(cache.Count <= 100, Is.True);
101105

102-
int itemsCount = 0;
103-
foreach (TestClass testClass in cache) {
104-
Assert.That(testClass == null || testClass.Text.StartsWith("item"), Is.True, "Line 182");
105-
itemsCount++;
106-
}
107-
Assert.That(itemsCount >= 0, Is.True);
108-
Assert.That(itemsCount <= 100, Is.True);
106+
int itemsCount = 0;
107+
foreach (TestClass testClass in cache) {
108+
Assert.That(testClass == null || testClass.Text.StartsWith("item"), Is.True, "Line 182");
109+
itemsCount++;
110+
}
111+
Assert.That(itemsCount >= 0, Is.True);
112+
Assert.That(itemsCount <= 100, Is.True);
109113

110-
TestHelper.CollectGarbage(true);
114+
TestHelper.CollectGarbage(true);
111115

112-
itemsCount = 0;
113-
foreach (TestClass testClass in cache) {
114-
Assert.That(testClass == null || testClass.Text.StartsWith("item"), Is.True, "Line 196");
115-
itemsCount++;
116+
itemsCount = 0;
117+
foreach (TestClass testClass in cache) {
118+
Assert.That(testClass == null || testClass.Text.StartsWith("item"), Is.True, "Line 196");
119+
itemsCount++;
120+
}
121+
Assert.That(itemsCount >= 0, Is.True);
122+
Assert.That(itemsCount <= 100, Is.True);
116123
}
117-
Assert.That(itemsCount >= 0, Is.True);
118-
Assert.That(itemsCount <= 100, Is.True);
119124
}
120125

121126
private static bool canFinish = true;
@@ -148,7 +153,8 @@ public void SynchronizationTest()
148153
}
149154
}
150155
Assert.That(globalCache.Count >= 0, Is.True);
151-
156+
157+
globalCache.Dispose();
152158
globalCache = null;
153159
}
154160

Orm/Xtensive.Orm.Tests.Core/Caching/WeakestCacheTest.cs

Lines changed: 57 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -60,85 +60,89 @@ public Item(string value)
6060
[Test]
6161
public void ClassFieldInTestScopeTest()
6262
{
63-
var cache = new WeakestCache<Item, Item>(false, false, i => i);
63+
using (var cache = new WeakestCache<Item, Item>(false, false, i => i)) {
6464

65-
fieldItem1 = new Item("1");
65+
fieldItem1 = new Item("1");
6666

67-
cache.Add(fieldItem1);
67+
cache.Add(fieldItem1);
6868

69-
Assert.That(cache.First(), Is.SameAs(fieldItem1));
70-
Assert.That(cache[new Item("1"), true], Is.SameAs(fieldItem1));
69+
Assert.That(cache.First(), Is.SameAs(fieldItem1));
70+
Assert.That(cache[new Item("1"), true], Is.SameAs(fieldItem1));
7171

72-
cache.Remove(fieldItem1);
73-
Assert.That(cache.Count, Is.EqualTo(0));
72+
cache.Remove(fieldItem1);
73+
Assert.That(cache.Count, Is.EqualTo(0));
7474

75-
cache.Add(fieldItem1);
76-
TestHelper.CollectGarbage(true);
77-
cache.CollectGarbage();
78-
Assert.That(cache.Count, Is.EqualTo(1));
75+
cache.Add(fieldItem1);
76+
TestHelper.CollectGarbage(true);
77+
cache.CollectGarbage();
78+
Assert.That(cache.Count, Is.EqualTo(1));
7979

80-
fieldItem1 = null;
81-
TestHelper.CollectGarbage(true);
82-
cache.CollectGarbage();
83-
Assert.That(cache.Count, Is.EqualTo(1));
80+
fieldItem1 = null;
81+
TestHelper.CollectGarbage(true);
82+
cache.CollectGarbage();
83+
Assert.That(cache.Count, Is.EqualTo(1));
8484

85-
Assert.That(cache[new Item("1"), true], Is.Not.Null);
85+
Assert.That(cache[new Item("1"), true], Is.Not.Null);
86+
}
8687
}
8788

8889
[Test]
8990
public void LocalVarInTestScopeTest()
9091
{
91-
var cache = new WeakestCache<Item, Item>(false, false, i => i);
92+
using (var cache = new WeakestCache<Item, Item>(false, false, i => i)) {
9293

93-
var item1 = new Item("1");
94+
var item1 = new Item("1");
9495

95-
cache.Add(item1);
96+
cache.Add(item1);
9697

97-
Assert.That(cache.First(), Is.SameAs(item1));
98-
Assert.That(cache[new Item("1"), true], Is.SameAs(item1));
98+
Assert.That(cache.First(), Is.SameAs(item1));
99+
Assert.That(cache[new Item("1"), true], Is.SameAs(item1));
99100

100-
cache.Remove(item1);
101-
Assert.That(cache.Count, Is.EqualTo(0));
101+
cache.Remove(item1);
102+
Assert.That(cache.Count, Is.EqualTo(0));
102103

103-
cache.Add(item1);
104-
TestHelper.CollectGarbage(true);
105-
cache.CollectGarbage();
106-
Assert.That(cache.Count, Is.EqualTo(1));
104+
cache.Add(item1);
105+
TestHelper.CollectGarbage(true);
106+
cache.CollectGarbage();
107+
Assert.That(cache.Count, Is.EqualTo(1));
107108

108-
item1 = null;
109-
TestHelper.CollectGarbage(true);
110-
cache.CollectGarbage();
111-
Assert.That(cache.Count, Is.EqualTo(1));
109+
item1 = null;
110+
TestHelper.CollectGarbage(true);
111+
cache.CollectGarbage();
112+
Assert.That(cache.Count, Is.EqualTo(1));
112113

113-
Assert.That(cache[new Item("1"), true], Is.Not.Null);
114+
Assert.That(cache[new Item("1"), true], Is.Not.Null);
115+
}
114116
}
115117

116118
[Test]
117119
public void LocalVarInCalledMethodScopeTest()
118120
{
119-
var cache = new WeakestCache<Item, Item>(false, false, i => i);
121+
using (var cache = new WeakestCache<Item, Item>(false, false, i => i)) {
120122

121-
InnerLocalVariableCacheTest(cache);
123+
InnerLocalVariableCacheTest(cache);
122124

123-
TestHelper.CollectGarbage(true);
124-
cache.CollectGarbage();
125-
Assert.That(cache.Count, Is.EqualTo(0));
125+
TestHelper.CollectGarbage(true);
126+
cache.CollectGarbage();
127+
Assert.That(cache.Count, Is.EqualTo(0));
126128

127-
Assert.That(cache[new Item("1"), true], Is.Null);
129+
Assert.That(cache[new Item("1"), true], Is.Null);
130+
}
128131
}
129132

130133
[Test]
131134
public void ClassFieldInCalledMethodScopeTest()
132135
{
133-
var cache = new WeakestCache<Item, Item>(false, false, i => i);
136+
using (var cache = new WeakestCache<Item, Item>(false, false, i => i)) {
134137

135-
InnerClassFieldCacheTest(cache);
138+
InnerClassFieldCacheTest(cache);
136139

137-
TestHelper.CollectGarbage(true);
138-
cache.CollectGarbage();
139-
Assert.That(cache.Count, Is.EqualTo(0));
140+
TestHelper.CollectGarbage(true);
141+
cache.CollectGarbage();
142+
Assert.That(cache.Count, Is.EqualTo(0));
140143

141-
Assert.That(cache[new Item("1"), true], Is.Null);
144+
Assert.That(cache[new Item("1"), true], Is.Null);
145+
}
142146
}
143147

144148
private void InnerLocalVariableCacheTest(WeakestCache<Item, Item> cache)
@@ -184,14 +188,15 @@ private void InnerClassFieldCacheTest(WeakestCache<Item, Item> cache)
184188
[Test]
185189
public void ProfileTest()
186190
{
187-
var cache = new WeakestCache<Item, Item>(false, false, i => i);
188-
var measurement = new Measurement();
189-
for (int i = 0, j = 0; i < 1000000; i++, j++) {
190-
var item = new Item(i.ToString());
191-
cache.Add(item);
192-
if (j == 100000) {
193-
j = 0;
194-
Console.Out.WriteLine(measurement.ToString());
191+
using (var cache = new WeakestCache<Item, Item>(false, false, i => i)) {
192+
var measurement = new Measurement();
193+
for (int i = 0, j = 0; i < 1000000; i++, j++) {
194+
var item = new Item(i.ToString());
195+
cache.Add(item);
196+
if (j == 100000) {
197+
j = 0;
198+
Console.Out.WriteLine(measurement.ToString());
199+
}
195200
}
196201
}
197202
}

0 commit comments

Comments
 (0)