Modified differencer to compare UUIDs instead of URLs
authorPanagiotis Kanavos <pkanavos@gmail.com>
Wed, 29 Feb 2012 12:56:35 +0000 (14:56 +0200)
committerPanagiotis Kanavos <pkanavos@gmail.com>
Wed, 29 Feb 2012 12:56:35 +0000 (14:56 +0200)
trunk/Pithos.Core.Test/SnapshotDifferencerTest.cs
trunk/Pithos.Core/Agents/ObjectInfoComparer.cs
trunk/Pithos.Core/Agents/SnapshotDifferencer.cs

index ba51a20..bda6183 100644 (file)
@@ -22,40 +22,41 @@ namespace Pithos.Core.Test
     {\r
         private ObjectInfo[] _previous;\r
         private ObjectInfo[] _current;\r
     {\r
         private ObjectInfo[] _previous;\r
         private ObjectInfo[] _current;\r
-        IEqualityComparer<ObjectInfo> _comparer = new ObjectInfoComparer();\r
+        readonly IEqualityComparer<ObjectInfo> _comparer = new ObjectInfoComparer();\r
+        private readonly Uri _testUri = new Uri("http://test");\r
 \r
         [SetUp]\r
         public void Setup()\r
         {\r
             _previous = new []{\r
 \r
         [SetUp]\r
         public void Setup()\r
         {\r
             _previous = new []{\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},\r
                             };\r
             _current = new []{\r
                             };\r
             _current = new []{\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name4",Bytes=1234,Hash="aa45",Version=1,UUID="4"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name5",Bytes=123,Hash="aa5",Version=1,UUID="14"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name4",Bytes=1234,Hash="aa45",Version=1,UUID="11"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name5",Bytes=123,Hash="aa5",Version=1,UUID="15"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=1234,Hash="aa45",Version=1,UUID="4"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name5",Bytes=123,Hash="aa5",Version=1,UUID="14"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=1234,Hash="aa45",Version=1,UUID="11"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name5",Bytes=123,Hash="aa5",Version=1,UUID="15"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},\r
                            };\r
             \r
         }\r
                            };\r
             \r
         }\r
@@ -79,8 +80,8 @@ namespace Pithos.Core.Test
             var differencer=d1.Post(_previous).Post(_current);\r
             var deleted=new[]\r
                             {\r
             var differencer=d1.Post(_previous).Post(_current);\r
             var deleted=new[]\r
                             {\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"},\r
                             };\r
             Assert.That(differencer.Deleted.ToList(),Is.EquivalentTo(deleted)\r
                 .Using((IEqualityComparer) new ObjectInfoComparer()));\r
                             };\r
             Assert.That(differencer.Deleted.ToList(),Is.EquivalentTo(deleted)\r
                 .Using((IEqualityComparer) new ObjectInfoComparer()));\r
@@ -127,24 +128,24 @@ namespace Pithos.Core.Test
         {\r
             var d1 = new SnapshotDifferencer();\r
             var current = new[]{\r
         {\r
             var d1 = new SnapshotDifferencer();\r
             var current = new[]{\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,Hash="aa3",Version=1,UUID="3"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,Hash="aa3",Version=1,UUID="3"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},\r
                             };\r
 \r
             var differencer=d1.Post(_previous).Post(current);\r
             var moved = new[] { \r
                             };\r
 \r
             var differencer=d1.Post(_previous).Post(current);\r
             var moved = new[] { \r
-                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,Hash="aa3",PreviousHash="aa3",Version=1,UUID="3"}\r
+                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,Hash="aa3",PreviousHash="aa3",Version=1,UUID="3"}\r
             };\r
 \r
             Comparison<ObjectInfo> comparer = (x, y) =>\r
             };\r
 \r
             Comparison<ObjectInfo> comparer = (x, y) =>\r
@@ -170,24 +171,38 @@ namespace Pithos.Core.Test
         {\r
             var d1 = new SnapshotDifferencer();\r
             var current = new[]{\r
         {\r
             var d1 = new SnapshotDifferencer();\r
             var current = new[]{\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,Hash="aa35",Version=1,UUID="3"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,Hash="aa35",Version=1,UUID="3"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},\r
+                            };\r
+            var unchanged = new[]{\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1",PreviousHash="aa1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2",PreviousHash="aa2"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4",PreviousHash="aa4"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5",PreviousHash="aa4"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6",PreviousHash="aa1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7",PreviousHash="aa2"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8",PreviousHash="aa1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9",PreviousHash="aa2"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10",PreviousHash="aa3"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11",PreviousHash="aa4"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12",PreviousHash="aa1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13",PreviousHash="aa2"},\r
                             };\r
 \r
             var differencer = d1.Post(_previous).Post(current);\r
             var moved = new[] { \r
                             };\r
 \r
             var differencer = d1.Post(_previous).Post(current);\r
             var moved = new[] { \r
-                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,Hash="aa35",PreviousHash="aa3",Version=1,UUID="3"}\r
+                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3a",Bytes=123,Hash="aa35",PreviousHash="aa3",Version=1,UUID="3"}\r
             };\r
 \r
             Comparison<ObjectInfo> comparer = (x, y) =>\r
             };\r
 \r
             Comparison<ObjectInfo> comparer = (x, y) =>\r
@@ -204,8 +219,7 @@ namespace Pithos.Core.Test
             Assert.That(differencer.Deleted, Is.Empty);\r
             Assert.That(differencer.Created, Is.Empty);\r
             Assert.That(differencer.Changed, Is.Empty);\r
             Assert.That(differencer.Deleted, Is.Empty);\r
             Assert.That(differencer.Created, Is.Empty);\r
             Assert.That(differencer.Changed, Is.Empty);\r
-            //Assert.That(differencer.Unchanged, Is.Empty);\r
-            Assert.That(differencer.Moved.ToList(), Is.EquivalentTo(moved).Using(comparer));\r
+            Assert.That(differencer.Unchanged, Is.EquivalentTo(unchanged).Using(comparer));\r
         }\r
 \r
         [Test]\r
         }\r
 \r
         [Test]\r
@@ -213,24 +227,24 @@ namespace Pithos.Core.Test
         {\r
             var d1 = new SnapshotDifferencer();\r
             var current = new[]{\r
         {\r
             var d1 = new SnapshotDifferencer();\r
             var current = new[]{\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Folder1/Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},\r
                             };\r
 \r
             var differencer=d1.Post(_previous).Post(current);\r
             var moved = new[] { \r
                             };\r
 \r
             var differencer=d1.Post(_previous).Post(current);\r
             var moved = new[] { \r
-                new ObjectInfo{Account="acc1",Container="Cont1",Name="Folder1/Name3",Bytes=123,Hash="aa3",PreviousHash="aa3",Version=1},\r
+                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name3",Bytes=123,Hash="aa3",PreviousHash="aa3",Version=1},\r
             };\r
 \r
             Comparison<ObjectInfo> comparer = (x, y) =>\r
             };\r
 \r
             Comparison<ObjectInfo> comparer = (x, y) =>\r
@@ -258,15 +272,15 @@ namespace Pithos.Core.Test
             var differencer=d1.Post(_previous).Post(_current);\r
             var unchanged = new[]\r
                                 {\r
             var differencer=d1.Post(_previous).Post(_current);\r
             var unchanged = new[]\r
                                 {\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},  \r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"},  \r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},                                    \r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},  \r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5"},  \r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},                                    \r
                                 };            \r
             Assert.That(differencer.Unchanged.ToList(), Is.EquivalentTo(unchanged)\r
                 .Using((IEqualityComparer)new ObjectInfoComparer()));\r
                                 };            \r
             Assert.That(differencer.Unchanged.ToList(), Is.EquivalentTo(unchanged)\r
                 .Using((IEqualityComparer)new ObjectInfoComparer()));\r
@@ -332,21 +346,21 @@ namespace Pithos.Core.Test
                                 };\r
             var deleted = new[]\r
                             {\r
                                 };\r
             var deleted = new[]\r
                             {\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="2"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="3"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="4"},\r
                             };\r
             var unchanged = new[]{\r
                             };\r
             var unchanged = new[]{\r
-                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="1"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10"},\r
-                                new ObjectInfo{Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12"},\r
-                                new ObjectInfo{Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont1",Name="Folder1/Name1",Bytes=123,Hash="aa4",Version=1,UUID="5",PreviousHash="aa4"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="6",PreviousHash="aa1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="7",PreviousHash="aa2"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="8",PreviousHash="aa1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="9",PreviousHash="aa2"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name3",Bytes=123,Hash="aa3",Version=1,UUID="10",PreviousHash="aa3"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc1",Container="Cont2",Name="Name4",Bytes=123,Hash="aa4",Version=1,UUID="11",PreviousHash="aa4"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name1",Bytes=123,Hash="aa1",Version=1,UUID="12",PreviousHash="aa1"},\r
+                                new ObjectInfo{StorageUri=_testUri,Account="acc2",Container="Cont2",Name="Name2",Bytes=123,Hash="aa2",Version=1,UUID="13",PreviousHash="aa2"},\r
                             };\r
             var differencer = d1.Post(_previous)\r
                 .Post(noModItems);\r
                             };\r
             var differencer = d1.Post(_previous)\r
                 .Post(noModItems);\r
@@ -356,7 +370,9 @@ namespace Pithos.Core.Test
             Assert.That(differencer.Created, Is.Empty,"should have no insertions");\r
             Assert.That(differencer.Changed, Is.Empty,"should have no changes");\r
             Assert.That(differencer.Moved, Is.Empty, "should have no moves");\r
             Assert.That(differencer.Created, Is.Empty,"should have no insertions");\r
             Assert.That(differencer.Changed, Is.Empty,"should have no changes");\r
             Assert.That(differencer.Moved, Is.Empty, "should have no moves");\r
-            Assert.That(differencer.Unchanged, Is.EquivalentTo(unchanged).Using(_comparer),"should be equivalent to previous except the direct leafs of acc1/cont1");\r
+            var actualUnchanged = differencer.Unchanged.OrderBy(i => i.Uri.ToString()).ToArray();\r
+            var expectedUnchanged = unchanged.OrderBy(i => i.Uri.ToString()).ToArray();\r
+            Assert.That(actualUnchanged, Is.EquivalentTo(expectedUnchanged).Using(_comparer),"should be equivalent to previous except the direct leafs of acc1/cont1");\r
             \r
         }\r
 \r
             \r
         }\r
 \r
index b507c04..87b7528 100644 (file)
@@ -55,14 +55,12 @@ namespace Pithos.Core.Agents
     {\r
         public override bool Equals(ObjectInfo x, ObjectInfo y)\r
         {\r
     {\r
         public override bool Equals(ObjectInfo x, ObjectInfo y)\r
         {\r
-            return (x.Account == y.Account &&\r
-                    x.Container == y.Container &&\r
-                    x.Name == y.Name);\r
+            return (x.UUID== y.UUID);\r
         }\r
 \r
         public override int GetHashCode(ObjectInfo obj)\r
         {\r
         }\r
 \r
         public override int GetHashCode(ObjectInfo obj)\r
         {\r
-            return String.Join("/", obj.Account, obj.Container, obj.Name).GetHashCode();\r
+            return obj.UUID.GetHashCode();\r
         }\r
     }\r
 \r
         }\r
     }\r
 \r
index 4f46174..7bd83b9 100644 (file)
@@ -106,8 +106,8 @@ namespace Pithos.Core.Agents
 \r
                 Common=new Lazy<IEnumerable<ObjectInfo>>(() =>\r
                     Current.Join(Previous,\r
 \r
                 Common=new Lazy<IEnumerable<ObjectInfo>>(() =>\r
                     Current.Join(Previous,\r
-                                outKey => new { outKey.Account, outKey.Container, outKey.Name },\r
-                                inKey => new { inKey.Account, inKey.Container, inKey.Name },\r
+                                outKey => outKey.UUID,\r
+                                inKey => inKey.UUID,\r
                                 (outer, inner) =>outer.SetPrevious(inner)));            \r
             }\r
         }\r
                                 (outer, inner) =>outer.SetPrevious(inner)));            \r
             }\r
         }\r
@@ -183,7 +183,9 @@ namespace Pithos.Core.Agents
 \r
         public IEnumerable<ObjectInfo> Changed\r
         {\r
 \r
         public IEnumerable<ObjectInfo> Changed\r
         {\r
-            get{return Common.Where(i=>i.PreviousHash!=i.Hash);}\r
+            get\r
+            {\r
+                return Common.Where(i => i.PreviousHash != i.Hash && (i.Previous == null ||  i.Uri == i.Previous.Uri));}\r
         }\r
         public IEnumerable<ObjectInfo> Unchanged\r
         {\r
         }\r
         public IEnumerable<ObjectInfo> Unchanged\r
         {\r