root / trunk / Pithos.Core.Test / SnapshotDifferencerTest.cs @ 5e10d44f
History | View | Annotate | Download (28.9 kB)
1 |
// ----------------------------------------------------------------------- |
---|---|
2 |
// <copyright file="TestDifferencer.cs" company="Microsoft"> |
3 |
// TODO: Update copyright text. |
4 |
// </copyright> |
5 |
// ----------------------------------------------------------------------- |
6 |
|
7 |
using System.Collections; |
8 |
using NUnit.Framework; |
9 |
using Pithos.Interfaces; |
10 |
using Pithos.Network; |
11 |
|
12 |
namespace Pithos.Core.Test |
13 |
{ |
14 |
using System; |
15 |
using System.Collections.Generic; |
16 |
using System.Linq; |
17 |
using System.Text; |
18 |
using Pithos.Core.Agents; |
19 |
|
20 |
[TestFixture] |
21 |
public class SnapshotDifferencerTest |
22 |
{ |
23 |
private ObjectInfo[] _previous; |
24 |
private ObjectInfo[] _current; |
25 |
readonly IEqualityComparer<ObjectInfo> _comparer = new ObjectInfoComparer(); |
26 |
private readonly Uri _testUri = new Uri("http://test"); |
27 |
|
28 |
[SetUp] |
29 |
public void Setup() |
30 |
{ |
31 |
_previous = new []{ |
32 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"}, |
33 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"}, |
34 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"}, |
35 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"}, |
36 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"}, |
37 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"}, |
38 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"}, |
39 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"}, |
40 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"}, |
41 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"}, |
42 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"}, |
43 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"}, |
44 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"}, |
45 |
}; |
46 |
_current = new []{ |
47 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"}, |
48 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"}, |
49 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=1234,Hash="aa45",Version=1,UUID="4"}, |
50 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name5",Bytes=123,Hash="aa5",Version=1,UUID="14"}, |
51 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"}, |
52 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"}, |
53 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"}, |
54 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"}, |
55 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"}, |
56 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=1234,Hash="aa45",Version=1,UUID="11"}, |
57 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name5",Bytes=123,Hash="aa5",Version=1,UUID="15"}, |
58 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"}, |
59 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"}, |
60 |
}; |
61 |
|
62 |
} |
63 |
|
64 |
[Test] |
65 |
public void when_adding_a_snapshot_for_the_first_time() |
66 |
{ |
67 |
var d1 = new SnapshotDifferencer(); |
68 |
var differencer=d1.Post(_previous); |
69 |
Assert.That(differencer.Deleted,Is.Empty); |
70 |
Assert.That(differencer.Created,Is.EquivalentTo(_previous)); |
71 |
Assert.That(differencer.Changed,Is.Empty); |
72 |
Assert.That(differencer.Moved, Is.Empty, "should have no moves"); |
73 |
Assert.That(differencer.Unchanged,Is.Empty); |
74 |
} |
75 |
|
76 |
[Test] |
77 |
public void when_adding_a_second_snapshot_with_a_deletion() |
78 |
{ |
79 |
var d1 = new SnapshotDifferencer(); |
80 |
var differencer=d1.Post(_previous).Post(_current); |
81 |
var deleted=new[] |
82 |
{ |
83 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"}, |
84 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"}, |
85 |
}; |
86 |
Assert.That(differencer.Deleted.ToList(),Is.EquivalentTo(deleted) |
87 |
.Using((IEqualityComparer) new ObjectInfoComparer())); |
88 |
} |
89 |
[Test] |
90 |
public void when_adding_a_second_snapshot_with_an_addition() |
91 |
{ |
92 |
var d1 = new SnapshotDifferencer(); |
93 |
var differencer=d1.Post(_previous).Post(_current); |
94 |
var created = new[] |
95 |
{ |
96 |
new ObjectInfo { Account = "acc1", Container = "Cont1", Name = "Name5", Bytes = 123, Hash = "aa5", Version = 1,UUID="14" }, |
97 |
new ObjectInfo { Account = "acc1", Container = "Cont2", Name = "Name5", Bytes = 123, Hash = "aa5", Version = 1,UUID="15" }, |
98 |
}; |
99 |
Assert.That(differencer.Created.ToList(), Is.EquivalentTo(created) |
100 |
.Using((IEqualityComparer)new ObjectInfoComparer())); |
101 |
} |
102 |
[Test] |
103 |
public void when_adding_a_second_snapshot_with_a_change() |
104 |
{ |
105 |
var d1 = new SnapshotDifferencer(); |
106 |
var differencer=d1.Post(_previous).Post(_current); |
107 |
var changed = new[] { |
108 |
new ObjectInfo { Account = "acc1", Container = "Cont1", Name = "Name4", Bytes = 1234, Hash = "aa45", PreviousHash="aa4", Version = 1,UUID="4" }, |
109 |
new ObjectInfo { Account = "acc1", Container = "Cont2", Name = "Name4", Bytes = 1234, Hash = "aa45", PreviousHash="aa4", Version = 1,UUID="11" }, |
110 |
}; |
111 |
|
112 |
Comparison<ObjectInfo> comparer = (x, y) => |
113 |
{ |
114 |
if (x.Account == y.Account |
115 |
&& x.Container == y.Container |
116 |
&& x.Name == y.Name |
117 |
&& x.Hash == y.Hash |
118 |
&& x.PreviousHash == y.PreviousHash) |
119 |
return 0; |
120 |
return 1; |
121 |
}; |
122 |
|
123 |
Assert.That(differencer.Changed.ToList(), Is.EquivalentTo(changed).Using(comparer)); |
124 |
} |
125 |
|
126 |
[Test] |
127 |
public void when_adding_a_second_snapshot_with_a_rename() |
128 |
{ |
129 |
var d1 = new SnapshotDifferencer(); |
130 |
var current = new[]{ |
131 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"}, |
132 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"}, |
133 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,Hash="aa3",Version=1,UUID="3"}, |
134 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"}, |
135 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"}, |
136 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"}, |
137 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"}, |
138 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"}, |
139 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"}, |
140 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"}, |
141 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"}, |
142 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"}, |
143 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"}, |
144 |
}; |
145 |
|
146 |
var differencer=d1.Post(_previous).Post(current); |
147 |
var moved = new[] { |
148 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,Hash="aa3",PreviousHash="aa3",Version=1,UUID="3"} |
149 |
}; |
150 |
|
151 |
Comparison<ObjectInfo> comparer = (x, y) => |
152 |
{ |
153 |
if (x.Account == y.Account |
154 |
&& x.Container == y.Container |
155 |
&& x.Name == y.Name |
156 |
&& x.Hash == y.Hash |
157 |
&& x.PreviousHash == y.PreviousHash) |
158 |
return 0; |
159 |
return 1; |
160 |
}; |
161 |
Assert.That(differencer.Moved.ToList(), Is.EquivalentTo(moved).Using(comparer)); |
162 |
Assert.That(differencer.Deleted, Is.Empty); |
163 |
Assert.That(differencer.Created, Is.Empty); |
164 |
Assert.That(differencer.Changed, Is.Empty); |
165 |
//Assert.That(differencer.Unchanged, Is.Empty); |
166 |
Assert.That(differencer.Moved.ToList(), Is.EquivalentTo(moved).Using(comparer)); |
167 |
} |
168 |
|
169 |
[Test] |
170 |
public void when_adding_a_second_snapshot_with_a_changed_rename() |
171 |
{ |
172 |
var d1 = new SnapshotDifferencer(); |
173 |
var current = new[]{ |
174 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"}, |
175 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"}, |
176 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,Hash="aa35",Version=1,UUID="3"}, |
177 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"}, |
178 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"}, |
179 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"}, |
180 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"}, |
181 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"}, |
182 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"}, |
183 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"}, |
184 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"}, |
185 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"}, |
186 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"}, |
187 |
}; |
188 |
var unchanged = new[]{ |
189 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1",PreviousHash="aa1"}, |
190 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2",PreviousHash="aa2"}, |
191 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4",PreviousHash="aa4"}, |
192 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5",PreviousHash="aa4"}, |
193 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6",PreviousHash="aa1"}, |
194 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7",PreviousHash="aa2"}, |
195 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8",PreviousHash="aa1"}, |
196 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9",PreviousHash="aa2"}, |
197 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10",PreviousHash="aa3"}, |
198 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11",PreviousHash="aa4"}, |
199 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12",PreviousHash="aa1"}, |
200 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13",PreviousHash="aa2"}, |
201 |
}; |
202 |
|
203 |
var differencer = d1.Post(_previous).Post(current); |
204 |
var moved = new[] { |
205 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,Hash="aa35",PreviousHash="aa3",Version=1,UUID="3"} |
206 |
}; |
207 |
|
208 |
Comparison<ObjectInfo> comparer = (x, y) => |
209 |
{ |
210 |
if (x.Account == y.Account |
211 |
&& x.Container == y.Container |
212 |
&& x.Name == y.Name |
213 |
&& x.Hash == y.Hash |
214 |
&& x.PreviousHash == y.PreviousHash) |
215 |
return 0; |
216 |
return 1; |
217 |
}; |
218 |
Assert.That(differencer.Moved.ToList(), Is.EquivalentTo(moved).Using(comparer)); |
219 |
Assert.That(differencer.Deleted, Is.Empty); |
220 |
Assert.That(differencer.Created, Is.Empty); |
221 |
Assert.That(differencer.Changed, Is.Empty); |
222 |
Assert.That(differencer.Unchanged, Is.EquivalentTo(unchanged).Using(comparer)); |
223 |
} |
224 |
|
225 |
[Test] |
226 |
public void when_adding_a_second_snapshot_with_a_move() |
227 |
{ |
228 |
var d1 = new SnapshotDifferencer(); |
229 |
var current = new[]{ |
230 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"}, |
231 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"}, |
232 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"}, |
233 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"}, |
234 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"}, |
235 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"}, |
236 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"}, |
237 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"}, |
238 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"}, |
239 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"}, |
240 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"}, |
241 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"}, |
242 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"}, |
243 |
}; |
244 |
|
245 |
var differencer=d1.Post(_previous).Post(current); |
246 |
var moved = new[] { |
247 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name3",Bytes=123,Hash="aa3",PreviousHash="aa3",Version=1}, |
248 |
}; |
249 |
|
250 |
Comparison<ObjectInfo> comparer = (x, y) => |
251 |
{ |
252 |
if (x.Account == y.Account |
253 |
&& x.Container == y.Container |
254 |
&& x.Name == y.Name |
255 |
&& x.Hash == y.Hash |
256 |
&& x.PreviousHash == y.PreviousHash) |
257 |
return 0; |
258 |
return 1; |
259 |
}; |
260 |
|
261 |
Assert.That(differencer.Deleted, Is.Empty); |
262 |
Assert.That(differencer.Created, Is.Empty); |
263 |
Assert.That(differencer.Changed, Is.Empty); |
264 |
//Assert.That(differencer.Unchanged, Is.Empty); |
265 |
Assert.That(differencer.Moved.ToList(), Is.EquivalentTo(moved).Using(comparer)); |
266 |
} |
267 |
|
268 |
[Test] |
269 |
public void when_adding_a_second_snapshot_with_unchanged() |
270 |
{ |
271 |
var d1 = new SnapshotDifferencer(); |
272 |
var differencer=d1.Post(_previous).Post(_current); |
273 |
var unchanged = new[] |
274 |
{ |
275 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"}, |
276 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"}, |
277 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"}, |
278 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"}, |
279 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"}, |
280 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"}, |
281 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"}, |
282 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"}, |
283 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"}, |
284 |
}; |
285 |
Assert.That(differencer.Unchanged.ToList(), Is.EquivalentTo(unchanged) |
286 |
.Using((IEqualityComparer)new ObjectInfoComparer())); |
287 |
} |
288 |
|
289 |
[Test] |
290 |
public void when_adding_a_null_first_snapshot() |
291 |
{ |
292 |
var d1 = new SnapshotDifferencer(); |
293 |
var differencer=d1.Post(null); |
294 |
Assert.That(differencer.Deleted, Is.Empty); |
295 |
Assert.That(differencer.Created, Is.Empty); |
296 |
Assert.That(differencer.Changed, Is.Empty); |
297 |
Assert.That(differencer.Moved, Is.Empty, "should have no moves"); |
298 |
Assert.That(differencer.Unchanged, Is.Empty); |
299 |
} |
300 |
|
301 |
[Test] |
302 |
public void when_adding_a_null_second_snapshot() |
303 |
{ |
304 |
var d1 = new SnapshotDifferencer(); |
305 |
var differencer=d1.Post(_previous).Post(null); |
306 |
Assert.That(differencer.Deleted, Is.EquivalentTo(_previous)); |
307 |
Assert.That(differencer.Created, Is.Empty); |
308 |
Assert.That(differencer.Changed, Is.Empty); |
309 |
Assert.That(differencer.Moved, Is.Empty, "should have no moves"); |
310 |
Assert.That(differencer.Unchanged, Is.Empty); |
311 |
} |
312 |
|
313 |
[Test] |
314 |
public void when_adding_no_modifications() |
315 |
{ |
316 |
var d1 = new SnapshotDifferencer(); |
317 |
//NOTE: Must post nomods for all accounts and contaienrs, otherwise the missing |
318 |
//containers will appear deleted |
319 |
var noModItem = new[]{ |
320 |
new NoModificationInfo("acc1", "Cont1"), |
321 |
new NoModificationInfo("acc1", "Cont2"), |
322 |
new NoModificationInfo("acc2", "Cont1"), |
323 |
new NoModificationInfo("acc2", "Cont2"), |
324 |
}; |
325 |
var differencer = d1.Post(_previous) |
326 |
.Post(noModItem); |
327 |
Assert.That(differencer.Deleted, Is.Empty,"should have no deletions"); |
328 |
Assert.That(differencer.Created, Is.Empty,"should have no insertions"); |
329 |
Assert.That(differencer.Changed, Is.Empty,"should have no changes"); |
330 |
Assert.That(differencer.Moved, Is.Empty, "should have no moves"); |
331 |
Assert.That(differencer.Unchanged, Is.EquivalentTo(_previous),"should be equivalent to previous"); |
332 |
|
333 |
} |
334 |
|
335 |
[Test] |
336 |
public void when_adding_no_mod_for_a_folder() |
337 |
{ |
338 |
var d1 = new SnapshotDifferencer(); |
339 |
//NOTE: Must post nomods for all accounts and contaienrs, otherwise the missing |
340 |
//containers will appear deleted |
341 |
var noModItems = new[]{ |
342 |
new NoModificationInfo("acc1", "Cont1","Folder1"), |
343 |
new NoModificationInfo("acc1", "Cont2"), |
344 |
new NoModificationInfo("acc2", "Cont1"), |
345 |
new NoModificationInfo("acc2", "Cont2"), |
346 |
}; |
347 |
var deleted = new[] |
348 |
{ |
349 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"}, |
350 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"}, |
351 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"}, |
352 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"}, |
353 |
}; |
354 |
var unchanged = new[]{ |
355 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5",PreviousHash="aa4"}, |
356 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6",PreviousHash="aa1"}, |
357 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7",PreviousHash="aa2"}, |
358 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8",PreviousHash="aa1"}, |
359 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9",PreviousHash="aa2"}, |
360 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10",PreviousHash="aa3"}, |
361 |
new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11",PreviousHash="aa4"}, |
362 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12",PreviousHash="aa1"}, |
363 |
new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13",PreviousHash="aa2"}, |
364 |
}; |
365 |
var differencer = d1.Post(_previous) |
366 |
.Post(noModItems); |
367 |
|
368 |
|
369 |
Assert.That(differencer.Deleted.ToList(), Is.EquivalentTo(deleted).Using(_comparer), "should have deletions only from acc1/cont1"); |
370 |
Assert.That(differencer.Created, Is.Empty,"should have no insertions"); |
371 |
Assert.That(differencer.Changed, Is.Empty,"should have no changes"); |
372 |
Assert.That(differencer.Moved, Is.Empty, "should have no moves"); |
373 |
var actualUnchanged = differencer.Unchanged.OrderBy(i => i.Uri.ToString()).ToArray(); |
374 |
var expectedUnchanged = unchanged.OrderBy(i => i.Uri.ToString()).ToArray(); |
375 |
Assert.That(actualUnchanged, Is.EquivalentTo(expectedUnchanged).Using(_comparer),"should be equivalent to previous except the direct leafs of acc1/cont1"); |
376 |
|
377 |
} |
378 |
|
379 |
} |
380 |
|
381 |
|
382 |
} |