public void RollForwardTest() { int totalIterations = 5; ICluster cluster = this.InitializeCluster(); MockUpMultiphaseClusterUpgradeState upgradeState = new MockUpMultiphaseClusterUpgradeState(totalIterations, cluster); Assert.IsTrue(upgradeState.StartProcessing()); Assert.IsNotNull(upgradeState.ExternalState); Assert.IsNotNull(upgradeState.PreviousExternalState); Assert.AreNotEqual(upgradeState.ExternalState, upgradeState.PreviousExternalState); Assert.AreEqual(totalIterations, upgradeState.ClusterManifestList.Count()); Assert.AreEqual(0, upgradeState.CurrentListIndex); Assert.IsNull(upgradeState.ClusterUpgradeStarted()); for (int i = 0; i < totalIterations; i++) { ClusterExternalState currentState = upgradeState.ExternalState; ClusterState finalState = upgradeState.RollForwardOneIteration(); Assert.AreEqual(currentState, upgradeState.PreviousExternalState); Assert.AreEqual(i == totalIterations - 1, finalState != null); Assert.IsNotNull(upgradeState.ExternalState); Assert.IsNotNull(upgradeState.PreviousExternalState); Assert.AreNotSame(upgradeState.ExternalState, upgradeState.PreviousExternalState); Assert.AreEqual(totalIterations, upgradeState.ClusterManifestList.Count()); if (i < totalIterations - 1) { Assert.AreEqual(i + 1, upgradeState.CurrentListIndex); } else { Assert.AreEqual(i, upgradeState.CurrentListIndex); } } }
public void InterruptTest() { int totalIterations = 5; ICluster cluster = this.InitializeCluster(); MockUpMultiphaseClusterUpgradeState upgradeState = new MockUpMultiphaseClusterUpgradeState(totalIterations, cluster); Assert.IsTrue(upgradeState.CanInterruptUpgrade()); upgradeState.StartProcessing(); Assert.IsTrue(upgradeState.CanInterruptUpgrade()); upgradeState.ClusterUpgradeStarted(); Assert.IsTrue(upgradeState.CanInterruptUpgrade()); for (int i = 0; i < totalIterations; i++) { upgradeState.RollForwardOneIteration(); Assert.IsFalse(upgradeState.CanInterruptUpgrade()); } Assert.IsFalse(upgradeState.CanInterruptUpgrade()); }
internal void InternalRollBackTest(int totalIterations, int successfulRollForwardIteration, int?unsuccessfulRollBackIteration) { Assert.IsTrue(totalIterations > successfulRollForwardIteration + 1); ICluster cluster = this.InitializeCluster(); MockUpMultiphaseClusterUpgradeState upgradeState = new MockUpMultiphaseClusterUpgradeState(totalIterations, cluster); Assert.IsTrue(upgradeState.StartProcessing()); Assert.IsNull(upgradeState.ClusterUpgradeStarted()); // roll forward for (int i = 0; i <= successfulRollForwardIteration; i++) { upgradeState.RollForwardOneIteration(); } // prepare roll back ClusterExternalState currentState = upgradeState.ExternalState; int currentIndex = upgradeState.CurrentListIndex; ClusterState targetState = upgradeState.RollBackOneIteration(); Assert.AreEqual(successfulRollForwardIteration < 0, targetState != null); if (targetState == null) { Assert.AreEqual(upgradeState.PreviousExternalState, currentState); Assert.AreEqual(currentIndex, upgradeState.CurrentListIndex); } // successful roll back int totalSuccessfulRollbackIterations = unsuccessfulRollBackIteration.HasValue ? successfulRollForwardIteration - unsuccessfulRollBackIteration.Value + 1: successfulRollForwardIteration + 1; for (int i = 0; i < totalSuccessfulRollbackIterations; i++) { currentState = upgradeState.ExternalState; targetState = upgradeState.RollForwardOneIteration(); Assert.AreEqual(currentState, upgradeState.PreviousExternalState); Assert.AreEqual(i == successfulRollForwardIteration, targetState != null); Assert.IsNotNull(upgradeState.ExternalState); Assert.IsNotNull(upgradeState.PreviousExternalState); Assert.AreNotSame(upgradeState.ExternalState, upgradeState.PreviousExternalState); Assert.AreEqual(totalIterations, upgradeState.ClusterManifestList.Count()); if (i < totalSuccessfulRollbackIterations - 1 || unsuccessfulRollBackIteration.HasValue) { Assert.AreEqual(successfulRollForwardIteration - i, upgradeState.CurrentListIndex); } else { Assert.AreEqual(successfulRollForwardIteration - i + 1, upgradeState.CurrentListIndex); } } // unsuccessful rollback if (unsuccessfulRollBackIteration.HasValue) { currentIndex = upgradeState.CurrentListIndex; targetState = upgradeState.RollBackOneIteration(); Assert.AreEqual(currentIndex, upgradeState.CurrentListIndex); Assert.IsNull(targetState); } else { Assert.AreEqual(successfulRollForwardIteration > 0 ? 1 : 0, upgradeState.CurrentListIndex); } }