Revision 1cc1e8c5 trunk/Pithos.Core.Test/SnapshotDifferencerTest.cs

b/trunk/Pithos.Core.Test/SnapshotDifferencerTest.cs
29 29
        public void Setup()
30 30
        {
31 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"},
32
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="1"},
33
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="2"},
34
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="3"},
35
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="4"},
36
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="5"},
37
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="6"},
38
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="7"},
39
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="8"},
40
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="9"},
41
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="10"},
42
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="11"},
43
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="12"},
44
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="13"},
45 45
                            };
46 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"},
47
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="2"},
48
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="3"},
49
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=1234,X_Object_Hash="aa45",Version=1,UUID="4"},
50
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name5",Bytes=123,X_Object_Hash="aa5",Version=1,UUID="14"},
51
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="5"},
52
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="6"},
53
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="7"},
54
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="9"},
55
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="10"},
56
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=1234,X_Object_Hash="aa45",Version=1,UUID="11"},
57
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name5",Bytes=123,X_Object_Hash="aa5",Version=1,UUID="15"},
58
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="12"},
59
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="13"},
60 60
                           };
61 61
            
62 62
        }
......
80 80
            var differencer=d1.Post(_previous).Post(_current);
81 81
            var deleted=new[]
82 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"},
83
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="1"},
84
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="8"},
85 85
                            };
86 86
            Assert.That(differencer.Deleted.ToList(),Is.EquivalentTo(deleted)
87 87
                .Using((IEqualityComparer) new ObjectInfoComparer()));
......
93 93
            var differencer=d1.Post(_previous).Post(_current);
94 94
            var created = new[]
95 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" },
96
                                  new ObjectInfo { Account = "acc1", Container = "Cont1", Name = "Name5", Bytes = 123, X_Object_Hash = "aa5", Version = 1,UUID="14" },
97
                                  new ObjectInfo { Account = "acc1", Container = "Cont2", Name = "Name5", Bytes = 123, X_Object_Hash = "aa5", Version = 1,UUID="15" },
98 98
                              };
99 99
            Assert.That(differencer.Created.ToList(), Is.EquivalentTo(created)
100 100
                .Using((IEqualityComparer)new ObjectInfoComparer()));
......
105 105
            var d1 = new SnapshotDifferencer();            
106 106
            var differencer=d1.Post(_previous).Post(_current);
107 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" },
108
                new ObjectInfo { Account = "acc1", Container = "Cont1", Name = "Name4", Bytes = 1234, X_Object_Hash = "aa45", PreviousHash="aa4", Version = 1,UUID="4" },
109
                new ObjectInfo { Account = "acc1", Container = "Cont2", Name = "Name4", Bytes = 1234, X_Object_Hash = "aa45", PreviousHash="aa4", Version = 1,UUID="11" },
110 110
            };
111 111

  
112 112
            Comparison<ObjectInfo> comparer = (x, y) =>
......
114 114
                                                      if (x.Account == y.Account
115 115
                                                          && x.Container == y.Container
116 116
                                                          && x.Name == y.Name
117
                                                          && x.Hash == y.Hash
117
                                                          && x.X_Object_Hash == y.X_Object_Hash
118 118
                                                          && x.PreviousHash == y.PreviousHash)
119 119
                                                          return 0;
120 120
                                                      return 1;
......
128 128
        {
129 129
            var d1 = new SnapshotDifferencer();
130 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"},
131
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="1"},
132
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="2"},
133
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="3"},
134
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="4"},
135
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="5"},
136
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="6"},
137
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="7"},
138
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="8"},
139
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="9"},
140
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="10"},
141
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="11"},
142
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="12"},
143
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="13"},
144 144
                            };
145 145

  
146 146
            var differencer=d1.Post(_previous).Post(current);
147 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"}
148
                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,X_Object_Hash="aa3",PreviousHash="aa3",Version=1,UUID="3"}
149 149
            };
150 150

  
151 151
            Comparison<ObjectInfo> comparer = (x, y) =>
......
153 153
                                                      if (x.Account == y.Account
154 154
                                                          && x.Container == y.Container
155 155
                                                          && x.Name == y.Name
156
                                                          && x.Hash == y.Hash
156
                                                          && x.X_Object_Hash == y.X_Object_Hash
157 157
                                                          && x.PreviousHash == y.PreviousHash)
158 158
                                                          return 0;
159 159
                                                      return 1;
......
171 171
        {
172 172
            var d1 = new SnapshotDifferencer();
173 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"},
174
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="1"},
175
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="2"},
176
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,X_Object_Hash="aa35",Version=1,UUID="3"},
177
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="4"},
178
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="5"},
179
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="6"},
180
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="7"},
181
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="8"},
182
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="9"},
183
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="10"},
184
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="11"},
185
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="12"},
186
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="13"},
187 187
                            };
188 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"},
189
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="1",PreviousHash="aa1"},
190
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="2",PreviousHash="aa2"},
191
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="4",PreviousHash="aa4"},
192
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="5",PreviousHash="aa4"},
193
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="6",PreviousHash="aa1"},
194
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="7",PreviousHash="aa2"},
195
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="8",PreviousHash="aa1"},
196
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="9",PreviousHash="aa2"},
197
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="10",PreviousHash="aa3"},
198
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="11",PreviousHash="aa4"},
199
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="12",PreviousHash="aa1"},
200
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="13",PreviousHash="aa2"},
201 201
                            };
202 202

  
203 203
            var differencer = d1.Post(_previous).Post(current);
204 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"}
205
                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,X_Object_Hash="aa35",PreviousHash="aa3",Version=1,UUID="3"}
206 206
            };
207 207

  
208 208
            Comparison<ObjectInfo> comparer = (x, y) =>
......
210 210
                if (x.Account == y.Account
211 211
                    && x.Container == y.Container
212 212
                    && x.Name == y.Name
213
                    && x.Hash == y.Hash
213
                    && x.X_Object_Hash == y.X_Object_Hash
214 214
                    && x.PreviousHash == y.PreviousHash)
215 215
                    return 0;
216 216
                return 1;
......
227 227
        {
228 228
            var d1 = new SnapshotDifferencer();
229 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"},
230
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="1"},
231
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="2"},
232
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="3"},
233
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="4"},
234
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="5"},
235
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="6"},
236
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="7"},
237
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="8"},
238
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="9"},
239
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="10"},
240
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="11"},
241
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="12"},
242
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="13"},
243 243
                            };
244 244

  
245 245
            var differencer=d1.Post(_previous).Post(current);
246 246
            var moved = new[] { 
247
                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name3",Bytes=123,Hash="aa3",PreviousHash="aa3",Version=1},
247
                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name3",Bytes=123,X_Object_Hash="aa3",PreviousHash="aa3",Version=1},
248 248
            };
249 249

  
250 250
            Comparison<ObjectInfo> comparer = (x, y) =>
......
252 252
                                                      if (x.Account == y.Account
253 253
                                                          && x.Container == y.Container
254 254
                                                          && x.Name == y.Name
255
                                                          && x.Hash == y.Hash
255
                                                          && x.X_Object_Hash == y.X_Object_Hash
256 256
                                                          && x.PreviousHash == y.PreviousHash)
257 257
                                                          return 0;
258 258
                                                      return 1;
......
272 272
            var differencer=d1.Post(_previous).Post(_current);
273 273
            var unchanged = new[]
274 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"},                                    
275
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="2"},
276
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="3"},
277
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="6"},
278
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="7"},  
279
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="5"},  
280
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="9"},
281
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="10"},
282
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="12"},
283
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="13"},                                    
284 284
                                };            
285 285
            Assert.That(differencer.Unchanged.ToList(), Is.EquivalentTo(unchanged)
286 286
                .Using((IEqualityComparer)new ObjectInfoComparer()));
......
346 346
                                };
347 347
            var deleted = new[]
348 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"},
349
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="1"},
350
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="2"},
351
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="3"},
352
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="4"},
353 353
                            };
354 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"},
355
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="5",PreviousHash="aa4"},
356
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="6",PreviousHash="aa1"},
357
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="7",PreviousHash="aa2"},
358
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="8",PreviousHash="aa1"},
359
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="9",PreviousHash="aa2"},
360
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,X_Object_Hash="aa3",Version=1,UUID="10",PreviousHash="aa3"},
361
                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,X_Object_Hash="aa4",Version=1,UUID="11",PreviousHash="aa4"},
362
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,X_Object_Hash="aa1",Version=1,UUID="12",PreviousHash="aa1"},
363
                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,X_Object_Hash="aa2",Version=1,UUID="13",PreviousHash="aa2"},
364 364
                            };
365 365
            var differencer = d1.Post(_previous)
366 366
                .Post(noModItems);

Also available in: Unified diff