예제 #1
0
        private CorruptedMemosDbRecovery MarkFailureAndTryRecover()
        {
            BuildXLContext context;
            IConfiguration configuration;

            CreateContextAndConfiguration(out context, out configuration);

            WriteFakeMemosDb(context, configuration);

            FailureRecoveryAggregator recovery = FailureRecoveryFactory.Create(LoggingContext, context.PathTable, configuration);
            bool markFailure = recovery.TryMarkFailure(new BuildXLException(string.Empty), ExceptionRootCause.CorruptedCache);

            XAssert.IsTrue(markFailure);

            var corruptedMemosDbRecovery = new CorruptedMemosDbRecovery(context.PathTable, configuration);

            XAssert.IsTrue(corruptedMemosDbRecovery.ShouldRecover());

            CreateContextAndConfiguration(out context, out configuration);
            recovery = FailureRecoveryFactory.Create(LoggingContext, context.PathTable, configuration);

            bool tryRecover = recovery.TryRecoverIfNeeded();

            XAssert.IsTrue(tryRecover);

            corruptedMemosDbRecovery = new CorruptedMemosDbRecovery(context.PathTable, configuration);
            XAssert.IsFalse(File.Exists(GetMemosDbPath(context, configuration)));

            return(corruptedMemosDbRecovery);
        }
예제 #2
0
        public void TestCorruptedMemosDbRecoveryMultipleTimes()
        {
            CorruptedMemosDbRecovery corruptedMemosDbRecovery = null;

            for (int i = 0; i < 10; ++i)
            {
                corruptedMemosDbRecovery = MarkFailureAndTryRecover();
            }

            XAssert.AreEqual(5, corruptedMemosDbRecovery.GetAllCorruptedMemosDb().Count());
        }
예제 #3
0
        public void TestCorruptedMemosDbRecovery()
        {
            CorruptedMemosDbRecovery corruptedMemosDbRecovery = MarkFailureAndTryRecover();

            XAssert.AreEqual(1, corruptedMemosDbRecovery.GetAllCorruptedMemosDb().Count());
        }