/// <summary>Sets up StartupProgress to final state after startup sequence has completed.
        ///     </summary>
        /// <param name="prog">StartupProgress to set</param>
        public static void SetStartupProgressForFinalState(StartupProgress prog)
        {
            prog.BeginPhase(Phase.LoadingFsimage);
            Step loadingFsImageInodes = new Step(StepType.Inodes);

            prog.BeginStep(Phase.LoadingFsimage, loadingFsImageInodes);
            prog.SetTotal(Phase.LoadingFsimage, loadingFsImageInodes, 100L);
            IncrementCounter(prog, Phase.LoadingFsimage, loadingFsImageInodes, 100L);
            prog.EndStep(Phase.LoadingFsimage, loadingFsImageInodes);
            prog.EndPhase(Phase.LoadingFsimage);
            prog.BeginPhase(Phase.LoadingEdits);
            Step loadingEditsFile = new Step("file", 1000L);

            prog.BeginStep(Phase.LoadingEdits, loadingEditsFile);
            prog.SetTotal(Phase.LoadingEdits, loadingEditsFile, 200L);
            IncrementCounter(prog, Phase.LoadingEdits, loadingEditsFile, 200L);
            prog.EndStep(Phase.LoadingEdits, loadingEditsFile);
            prog.EndPhase(Phase.LoadingEdits);
            prog.BeginPhase(Phase.SavingCheckpoint);
            Step savingCheckpointInodes = new Step(StepType.Inodes);

            prog.BeginStep(Phase.SavingCheckpoint, savingCheckpointInodes);
            prog.SetTotal(Phase.SavingCheckpoint, savingCheckpointInodes, 300L);
            IncrementCounter(prog, Phase.SavingCheckpoint, savingCheckpointInodes, 300L);
            prog.EndStep(Phase.SavingCheckpoint, savingCheckpointInodes);
            prog.EndPhase(Phase.SavingCheckpoint);
            prog.BeginPhase(Phase.Safemode);
            Step awaitingBlocks = new Step(StepType.AwaitingReportedBlocks);

            prog.BeginStep(Phase.Safemode, awaitingBlocks);
            prog.SetTotal(Phase.Safemode, awaitingBlocks, 400L);
            IncrementCounter(prog, Phase.Safemode, awaitingBlocks, 400L);
            prog.EndStep(Phase.Safemode, awaitingBlocks);
            prog.EndPhase(Phase.Safemode);
        }
        /// <summary>Sets up StartupProgress to a state part-way through the startup sequence.
        ///     </summary>
        /// <param name="prog">StartupProgress to set</param>
        public static void SetStartupProgressForRunningState(StartupProgress prog)
        {
            prog.BeginPhase(Phase.LoadingFsimage);
            Step loadingFsImageInodes = new Step(StepType.Inodes);

            prog.BeginStep(Phase.LoadingFsimage, loadingFsImageInodes);
            prog.SetTotal(Phase.LoadingFsimage, loadingFsImageInodes, 100L);
            IncrementCounter(prog, Phase.LoadingFsimage, loadingFsImageInodes, 100L);
            prog.EndStep(Phase.LoadingFsimage, loadingFsImageInodes);
            prog.EndPhase(Phase.LoadingFsimage);
            prog.BeginPhase(Phase.LoadingEdits);
            Step loadingEditsFile = new Step("file", 1000L);

            prog.BeginStep(Phase.LoadingEdits, loadingEditsFile);
            prog.SetTotal(Phase.LoadingEdits, loadingEditsFile, 200L);
            IncrementCounter(prog, Phase.LoadingEdits, loadingEditsFile, 100L);
        }
        public virtual void TestCounter()
        {
            startupProgress.BeginPhase(Phase.LoadingFsimage);
            Step loadingFsImageInodes = new Step(StepType.Inodes);

            startupProgress.BeginStep(Phase.LoadingFsimage, loadingFsImageInodes);
            StartupProgressTestHelper.IncrementCounter(startupProgress, Phase.LoadingFsimage,
                                                       loadingFsImageInodes, 100L);
            startupProgress.EndStep(Phase.LoadingFsimage, loadingFsImageInodes);
            Step loadingFsImageDelegationKeys = new Step(StepType.DelegationKeys);

            startupProgress.BeginStep(Phase.LoadingFsimage, loadingFsImageDelegationKeys);
            StartupProgressTestHelper.IncrementCounter(startupProgress, Phase.LoadingFsimage,
                                                       loadingFsImageDelegationKeys, 200L);
            startupProgress.EndStep(Phase.LoadingFsimage, loadingFsImageDelegationKeys);
            startupProgress.EndPhase(Phase.LoadingFsimage);
            startupProgress.BeginPhase(Phase.LoadingEdits);
            Step loadingEditsFile = new Step("file", 1000L);

            startupProgress.BeginStep(Phase.LoadingEdits, loadingEditsFile);
            StartupProgressTestHelper.IncrementCounter(startupProgress, Phase.LoadingEdits, loadingEditsFile
                                                       , 5000L);
            StartupProgressView view = startupProgress.CreateView();

            NUnit.Framework.Assert.IsNotNull(view);
            NUnit.Framework.Assert.AreEqual(100L, view.GetCount(Phase.LoadingFsimage, loadingFsImageInodes
                                                                ));
            NUnit.Framework.Assert.AreEqual(200L, view.GetCount(Phase.LoadingFsimage, loadingFsImageDelegationKeys
                                                                ));
            NUnit.Framework.Assert.AreEqual(5000L, view.GetCount(Phase.LoadingEdits, loadingEditsFile
                                                                 ));
            NUnit.Framework.Assert.AreEqual(0L, view.GetCount(Phase.SavingCheckpoint, new Step
                                                                  (StepType.Inodes)));
            // Increment a counter again and check that the existing view was not
            // modified, but a new view shows the updated value.
            StartupProgressTestHelper.IncrementCounter(startupProgress, Phase.LoadingEdits, loadingEditsFile
                                                       , 1000L);
            startupProgress.EndStep(Phase.LoadingEdits, loadingEditsFile);
            startupProgress.EndPhase(Phase.LoadingEdits);
            NUnit.Framework.Assert.AreEqual(5000L, view.GetCount(Phase.LoadingEdits, loadingEditsFile
                                                                 ));
            view = startupProgress.CreateView();
            NUnit.Framework.Assert.IsNotNull(view);
            NUnit.Framework.Assert.AreEqual(6000L, view.GetCount(Phase.LoadingEdits, loadingEditsFile
                                                                 ));
        }