Example #1
0
        public override void Execute(ExecutionContext context)
        {
            context.AssertRepositoryStarted();

            var path = Path;

            if (!string.IsNullOrEmpty(path))
            {
                path = path.Trim();
            }

            Logger.LogMessage((Recursive ? "Recursive integrity check. Scope: " : "Integrity check on: ") + (path ?? "/Root"));

            var diff = IntegrityChecker.Check(path, Recursive);

            Logger.LogMessage("Integrity check finished. Count of differences: " + diff.Count());

            var outputLimit = OutputLimit == 0 ? int.MaxValue : OutputLimit;
            var lines       = 0;

            foreach (var d in diff)
            {
                Logger.LogMessage("  " + d);
                if (++lines >= outputLimit)
                {
                    Logger.LogMessage("...truncated...");
                    break;
                }
            }
        }
Example #2
0
        public static void FinishAllTests()
        {
            var diff = IntegrityChecker.Check();

            Trace.WriteLine("&> Index integrity check after all tests. Count of differences: " + diff.Count());
            foreach (var d in diff)
            {
                Trace.WriteLine("&> " + d);
            }

            Repository.Shutdown();
        }
        public void __Indexing_IndexIntegrityCheck()
        {
            var content = Content.CreateNew("Folder", TestRoot, "1");
            var folder  = (Folder)content.ContentHandler;

            folder.InheritableVersioningMode = InheritableVersioningType.MajorOnly;
            content.Save();


            content = Content.CreateNew("Car", TestRoot, "Car_Indexing_IntegrityCheck_1");
            content.Save();
            var nodeId_1    = content.Id;
            var versionId_1 = content.ContentHandler.VersionId;

            content = Content.CreateNew("Car", TestRoot, "Car_Indexing_IntegrityCheck_2");
            content.Save();
            var nodeId_2    = content.Id;
            var versionId_2 = content.ContentHandler.VersionId;

            content = Content.CreateNew("Car", folder, "Car_Indexing_IntegrityCheck_3");
            content.Save();
            var nodeId_3    = content.Id;
            var versionId_3 = content.ContentHandler.VersionId;

            content = Content.CreateNew("Car", folder, "Car_Indexing_IntegrityCheck_4");
            content.Save();
            var gc          = (GenericContent)content.ContentHandler;
            var nodeId_4    = content.Id;
            var versionId_4 = content.ContentHandler.VersionId;
            var path_4      = gc.Path;

            gc.Index++;
            gc.Save();
            var versionId_5 = content.ContentHandler.VersionId;

            gc.Index++;
            gc.Save();
            var versionId_6 = content.ContentHandler.VersionId;


            var diff0 = IntegrityChecker.Check();

            if (diff0.Count() > 0)
            {
                Assert.Inconclusive("Cannot use this test if the initial state is inconsistent.");
            }

            AddFakeDocument(nodeId_1);
            DeleteDocument(versionId_2);
            Exec(String.Format("UPDATE Nodes SET [Index] = [Index] WHERE NodeId = {0}", nodeId_3));
            Exec(String.Format("UPDATE Versions SET [Status] = [Status] WHERE VersionId = {0}", versionId_4));

            //---- Total
            var diff1 = IntegrityChecker.Check().ToArray();

            Assert.IsTrue(diff1.Length == 4, String.Format("Count is {0}, expected: 4", diff1.Length));

            Assert.IsTrue(diff1[0].Kind == IndexDifferenceKind.NotInIndex, String.Format("diff1[0].Kind is {0}, expected: NotInIndex", diff1[0].Kind));
            Assert.IsTrue(diff1[0].VersionId == versionId_2, String.Format("diff1[0].Kind is {0}, expected: {1}", diff1[0].VersionId, versionId_2));

            Assert.IsTrue(diff1[1].Kind == IndexDifferenceKind.DifferentNodeTimestamp, String.Format("diff1[1].Kind is {0}, expected: NotInIndex", diff1[1].Kind));
            Assert.IsTrue(diff1[1].VersionId == versionId_3, String.Format("diff1[1].VersionId is {0}, expected: {1}", diff1[1].VersionId, versionId_3));
            Assert.IsTrue(diff1[1].DbNodeTimestamp != diff1[1].IxNodeTimestamp, "diff1[1].DbNodeTimestamp == diff1[1].IxNodeTimestamp, expected: different.");
            Assert.IsTrue(diff1[1].DbVersionTimestamp == diff1[1].IxVersionTimestamp, "diff1[1].DbVersionTimestamp != diff1[1].IxVersionTimestamp, expected: equal.");

            Assert.IsTrue(diff1[2].Kind == IndexDifferenceKind.DifferentVersionTimestamp, String.Format("diff1[2].Kind is {0}, expected: NotInIndex", diff1[2].Kind));
            Assert.IsTrue(diff1[2].VersionId == versionId_4, String.Format("diff1[2].VersionId is {0}, expected: {1}", diff1[2].VersionId, versionId_4));
            Assert.IsTrue(diff1[2].DbNodeTimestamp != diff1[2].IxNodeTimestamp, "diff1[2].DbNodeTimestamp == diff1[2].IxNodeTimestamp, expected: different."); // older version !
            Assert.IsTrue(diff1[2].DbVersionTimestamp != diff1[2].IxVersionTimestamp, "diff1[2].DbVersionTimestamp == diff1[2].IxVersionTimestamp, expected: different.");

            Assert.IsTrue(diff1[3].Kind == IndexDifferenceKind.NotInDatabase, String.Format("diff1[3].Kind is {0}, expected: NotInDatabase", diff1[3].Kind));
            Assert.IsTrue(diff1[3].VersionId == 99999, String.Format("diff1[3].VersionId is {0}, expected: 99999", diff1[3].VersionId));
            Assert.IsTrue(diff1[3].NodeId == 99999, String.Format("diff1[3].NodeId is {0}, expected: 99999", diff1[3].NodeId));
            Assert.IsTrue(diff1[3].Path == "/root/fakedocument", String.Format("diff1[3].Path is {0}, expected: /root/fakedocument", diff1[3].Path));

            //---- Subtree
            var diff2 = IntegrityChecker.Check(folder.Path, true).ToArray();

            Assert.IsTrue(diff2[0].Kind == IndexDifferenceKind.DifferentNodeTimestamp, String.Format("diff3[0].Kind is {0}, expected: NotInIndex", diff2[0].Kind));
            Assert.IsTrue(diff2[0].VersionId == versionId_3, String.Format("diff3[0].VersionId is {0}, expected: {1}", diff2[0].VersionId, versionId_3));
            Assert.IsTrue(diff2[0].DbNodeTimestamp != diff2[0].IxNodeTimestamp, "diff3[0].DbNodeTimestamp == diff3[0].IxNodeTimestamp, expected: different.");
            Assert.IsTrue(diff2[0].DbVersionTimestamp == diff2[0].IxVersionTimestamp, "diff3[0].DbVersionTimestamp != diff3[0].IxVersionTimestamp, expected: equal.");

            Assert.IsTrue(diff2[1].Kind == IndexDifferenceKind.DifferentVersionTimestamp, String.Format("diff3[1].Kind is {0}, expected: NotInIndex", diff2[1].Kind));
            Assert.IsTrue(diff2[1].VersionId == versionId_4, String.Format("diff3[1].VersionId is {0}, expected: {1}", diff2[1].VersionId, versionId_4));
            Assert.IsTrue(diff2[1].DbNodeTimestamp != diff2[1].IxNodeTimestamp, "diff3[1].DbNodeTimestamp == diff3[1].IxNodeTimestamp, expected: different."); // older version
            Assert.IsTrue(diff2[1].DbVersionTimestamp != diff2[1].IxVersionTimestamp, "diff3[1].DbVersionTimestamp == diff3[1].IxVersionTimestamp, expected: different.");

            //---- Node not recursive not changed
            var diff3 = IntegrityChecker.Check(folder.Path, false).ToArray();

            Assert.IsTrue(diff3.Length == 0, String.Format("diff3.Length is {0}, expected: 0.", diff3.Length));

            //---- Node not recursive an old version changed
            var diff4 = IntegrityChecker.Check(path_4, false).ToArray();

            Assert.IsTrue(diff4.Length == 1, String.Format("diff4.Length is {0}, expected: 1.", diff3.Length));

            Assert.IsTrue(diff4[0].Kind == IndexDifferenceKind.DifferentVersionTimestamp, String.Format("diff4[0].Kind is {0}, expected: NotInIndex", diff4[0].Kind));
            Assert.IsTrue(diff4[0].VersionId == versionId_4, String.Format("diff4[0].VersionId is {0}, expected: {1}", diff4[0].VersionId, versionId_4));
            Assert.IsTrue(diff4[0].DbNodeTimestamp != diff4[0].IxNodeTimestamp, "diff4[0].DbNodeTimestamp == diff4[0].IxNodeTimestamp, expected: different."); // older version
            Assert.IsTrue(diff4[0].DbVersionTimestamp != diff4[0].IxVersionTimestamp, "diff4[0].DbVersionTimestamp == diff4[0].IxVersionTimestamp, expected: different.");
        }