Statistics
| Branch: | Revision:

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
}