public void InterruptWithAutoScaleUpgradeTest() { string jsonFilePath = "ClusterConfig.Unsecured.DevCluster.json"; MockupCluster cluster = Utility.PopulateClusterWithBaselineJson(jsonFilePath); Assert.IsTrue(cluster.RunStateMachine()); ClusterUpgradeStateBase upgradeState = cluster.Pending; Assert.IsInstanceOfType(upgradeState, typeof(MockupBaselineUpgradeState)); Assert.AreEqual(upgradeState.TargetCsmConfig, cluster.Current.CSMConfig); //User starts a auto scale cluster upgrade. Utility.UpdateCluster("ClusterConfig.Unsecured.DevCluster.AutoScale.V2.json", cluster); //Baseline upgrade can't be interrupted. Assert.IsFalse(cluster.RunStateMachine()); }
public void InterruptWithSimpleClusterUpgradeAtFirstIteration() { MockupCluster cluster = Utility.DoBaselineUpgrade("ClusterConfig.X509.DevCluster.Replace.V1.json"); Utility.UpdateCluster("ClusterConfig.X509.DevCluster.Replace.V2.json", cluster); // 1st iteration Assert.IsTrue(cluster.RunStateMachine()); MockupCertificateClusterUpgradeState upgradeState = (MockupCertificateClusterUpgradeState)cluster.Pending; //Interrupt with a simple cluster upgrade Utility.UpdateCluster("ClusterConfig.X509.DevCluster.Replace.V2.Interrupt.json", cluster); Assert.IsTrue(cluster.RunStateMachine()); Utility.RollForwardOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); Assert.AreEqual(ClusterCertificateUpgradeTest.InterruptedTargetConfigVersion, cluster.Current.CSMConfig.Version.Version); }
public void RollBackTest() { string jsonFilePath = "ClusterConfig.Unsecured.DevCluster.json"; MockupCluster cluster = Utility.PopulateClusterWithBaselineJson(jsonFilePath); Assert.IsTrue(cluster.RunStateMachine()); ClusterUpgradeStateBase upgradeState = cluster.Pending; Assert.IsInstanceOfType(upgradeState, typeof(MockupBaselineUpgradeState)); Assert.AreEqual(upgradeState.TargetCsmConfig, cluster.Current.CSMConfig); Utility.RollBackOneIteration(cluster); // baseline upgrade failure results in retry Assert.IsFalse(cluster.RunStateMachine()); Assert.IsNotNull(cluster.Pending); Assert.IsNotNull(cluster.Current); }
public void RollbackTest() { MockupCluster cluster = Utility.DoBaselineUpgrade("ClusterConfig.Unsecured.DevCluster.json"); Utility.UpdateCluster("ClusterConfig.Unsecured.DevCluster.AutoScale.V2.json", cluster); Assert.IsTrue(cluster.RunStateMachine()); ClusterUpgradeStateBase upgradeState = cluster.Pending; Utility.RollBackOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); Assert.IsNull(cluster.Pending); Assert.IsNotNull(cluster.Current); cluster.TargetCsmConfigUpgradeFailed = false; cluster.TargetCsmConfig = null; cluster.TargetNodeConfig = null; Utility.UpdateCluster("ClusterConfig.Unsecured.DevCluster.AutoScale.V2.json", cluster); Assert.IsTrue(cluster.RunStateMachine()); upgradeState = cluster.Pending; Utility.RollForwardOneIteration(cluster); upgradeState = cluster.Pending; var targetReplicaSetSize = new Dictionary <string, ReplicaSetSize>() { { "", new ReplicaSetSize() } }; MockupAutoScaleClusterUpgradeState scaleUpUpgradeState = (MockupAutoScaleClusterUpgradeState)upgradeState; scaleUpUpgradeState.TargetSystemServicesSize = new Dictionary <string, ReplicaSetSize>(); scaleUpUpgradeState.GetSystemServiceReplicaSetSize(targetReplicaSetSize); Utility.RollForwardOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); Assert.IsNull(cluster.Pending); Assert.IsNotNull(cluster.Current); Assert.AreEqual(AutoScaleClusterUpgradeTest.TargetVMInstanceCount, cluster.Current.CSMConfig.NodeTypes[0].VMInstanceCount); Assert.AreEqual(AutoScaleClusterUpgradeTest.BaselineConfigVersion, cluster.Current.CSMConfig.Version.Version); }
public void RollForwardTest() { string jsonFilePath = "ClusterConfig.Unsecured.DevCluster.json"; string expectedConfigVersion = "1.0.0"; MockupCluster cluster = Utility.PopulateClusterWithBaselineJson(jsonFilePath); Assert.IsTrue(cluster.RunStateMachine()); ClusterUpgradeStateBase upgradeState = cluster.Pending; Assert.IsInstanceOfType(upgradeState, typeof(MockupBaselineUpgradeState)); Assert.AreEqual(upgradeState.TargetCsmConfig, cluster.Current.CSMConfig); Utility.RollForwardOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); Assert.IsNull(cluster.Pending); Assert.IsNotNull(cluster.Current); Assert.AreEqual(expectedConfigVersion, cluster.Current.CSMConfig.Version.Version); }
public void SimpleConfigUpgradeInterruptWithSimpleCodeUpgrade() { MockupCluster cluster = Utility.DoBaselineUpgrade("ClusterConfig.Unsecured.DevCluster.json"); Utility.UpdateCluster("ClusterConfig.Unsecured.DevClusterV2.json", cluster); Assert.IsTrue(cluster.RunStateMachine()); ClusterUpgradeStateBase upgradeState = cluster.Pending; Assert.IsInstanceOfType(upgradeState, typeof(MockupSimpleClusterUpgradeState)); //Interrupt Utility.UpdateCluster(cluster, SimpleClusterUpgradeTest.TargetMsiVersion, SimpleClusterUpgradeTest.TargetClusterSettingsVersion); Assert.IsFalse(cluster.RunStateMachine()); upgradeState = cluster.Pending; Assert.IsInstanceOfType(upgradeState, typeof(MockupSimpleClusterUpgradeState)); Utility.RollForwardOneIteration(cluster); Assert.AreEqual(SimpleClusterUpgradeTest.TargetDataDeletionAgeInDays, cluster.Current.CSMConfig.DiagnosticsStoreInformation.DataDeletionAgeInDays); Assert.AreEqual(SimpleClusterUpgradeTest.TargetConfigVersion, cluster.Current.CSMConfig.Version.Version); Assert.IsFalse(cluster.RunStateMachine()); Utility.RollForwardOneIteration(cluster); Assert.IsNull(cluster.Pending); Assert.IsNotNull(cluster.Current); Assert.AreEqual(SimpleClusterUpgradeTest.TargetMsiVersion, cluster.Current.WRPConfig.Version.MsiVersion); Assert.AreEqual(SimpleClusterUpgradeTest.TargetClusterSettingsVersion, cluster.Current.WRPConfig.Version.ClusterSettingsVersion); Assert.AreEqual(cluster.TargetNodeConfig, null); Assert.AreEqual(cluster.TargetWrpConfig, null); Assert.AreEqual(cluster.TargetCsmConfig, null); Assert.AreEqual(cluster.TargetCsmConfigUpgradeFailed, false); Assert.AreEqual(cluster.TargetWrpConfigUpgradeFailed, false); }
public void InterruptWithSimpleCodeClusterUpgradeTest() { MockupCluster cluster = Utility.DoBaselineUpgrade("ClusterConfig.Unsecured.DevCluster.json"); Utility.UpdateCluster(cluster, SimpleClusterUpgradeTest.TargetMsiVersion, SimpleClusterUpgradeTest.TargetClusterSettingsVersion); ClusterUpgradeStateBase upgradeState = cluster.Pending; Utility.UpdateCluster(cluster, InterruptedTargetMsiVersion, InterruptedTargetClusterSettingsVersion); Assert.IsTrue(cluster.RunStateMachine()); Utility.RollForwardOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); Assert.IsNull(cluster.Pending); Assert.IsNotNull(cluster.Current); Assert.AreEqual(SimpleClusterUpgradeTest.InterruptedTargetMsiVersion, cluster.Current.WRPConfig.Version.MsiVersion); Assert.AreEqual(SimpleClusterUpgradeTest.InterruptedTargetClusterSettingsVersion, cluster.Current.WRPConfig.Version.ClusterSettingsVersion); Assert.AreEqual(cluster.TargetNodeConfig, null); Assert.AreEqual(cluster.TargetWrpConfig, null); Assert.AreEqual(cluster.TargetCsmConfig, null); Assert.AreEqual(cluster.TargetCsmConfigUpgradeFailed, false); Assert.AreEqual(cluster.TargetWrpConfigUpgradeFailed, false); }
internal void InternalReplaceCertRollbackTest(int maxSuccessIteration, bool rollbackSuccess) { Assert.IsTrue(maxSuccessIteration < 2); MockupCluster cluster = Utility.DoBaselineUpgrade("ClusterConfig.X509.DevCluster.Replace.V1.json"); Assert.AreEqual(ClusterCertificateUpgradeTest.BaselineConfigVersion, cluster.Current.CSMConfig.Version.Version); ClusterManifestType baselineClusterManifest = cluster.Current.ExternalState.ClusterManifest; Utility.UpdateCluster("ClusterConfig.X509.DevCluster.Replace.V2.json", cluster); Assert.IsTrue(cluster.RunStateMachine()); if (maxSuccessIteration < 0) { Utility.RollBackOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); Assert.IsNull(cluster.Pending); Assert.AreEqual(baselineClusterManifest, cluster.Current.ExternalState.ClusterManifest); } else { for (int i = 0; i <= maxSuccessIteration; i++) { Utility.RollForwardOneIteration(cluster); Assert.AreEqual(baselineClusterManifest, cluster.Current.ExternalState.ClusterManifest); Assert.IsFalse(cluster.RunStateMachine()); } Utility.RollBackOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); ClusterManifestType expectedManifest = maxSuccessIteration == 0 ? baselineClusterManifest : ((MultiphaseClusterUpgradeState)cluster.Pending).ClusterManifestList[maxSuccessIteration - 1]; Assert.AreEqual(expectedManifest, cluster.Pending.ExternalState.ClusterManifest); if (rollbackSuccess) { for (int i = 0; i <= maxSuccessIteration; i++) { Utility.RollForwardOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); } Assert.IsNull(cluster.Pending); } else { Utility.RollBackOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); Assert.IsNotNull(cluster.Pending); } Assert.AreEqual(baselineClusterManifest, cluster.Current.ExternalState.ClusterManifest); } }
internal void InternalTwoPhaseRollbackTest( string baselineJsonFile, string targetJsonFile, bool firstIterationSuccess, bool rollbackSuccess) { MockupCluster cluster = Utility.DoBaselineUpgrade(baselineJsonFile); Assert.AreEqual(ClusterCertificateUpgradeTest.BaselineConfigVersion, cluster.Current.CSMConfig.Version.Version); ClusterManifestType baselineClusterManifest = cluster.Current.ExternalState.ClusterManifest; Utility.UpdateCluster(targetJsonFile, cluster); Assert.IsTrue(cluster.RunStateMachine()); if (!firstIterationSuccess) { Utility.RollBackOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); Assert.IsNull(cluster.Pending); Assert.AreEqual(baselineClusterManifest, cluster.Current.ExternalState.ClusterManifest); } else { Utility.RollForwardOneIteration(cluster); Assert.AreEqual(baselineClusterManifest, cluster.Current.ExternalState.ClusterManifest); Assert.IsFalse(cluster.RunStateMachine()); Utility.RollBackOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); Assert.AreEqual(baselineClusterManifest, cluster.Pending.ExternalState.ClusterManifest); if (rollbackSuccess) { Utility.RollForwardOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); Assert.IsNull(cluster.Pending); } else { Utility.RollBackOneIteration(cluster); Assert.IsFalse(cluster.RunStateMachine()); Assert.IsNotNull(cluster.Pending); } Assert.AreEqual(baselineClusterManifest, cluster.Current.ExternalState.ClusterManifest); } }
public void RollForwardTest() { MockupCluster cluster = Utility.DoBaselineUpgrade("ClusterConfig.Unsecured.DevCluster.json"); Assert.AreEqual(AutoScaleClusterUpgradeTest.BaselineVMInstanceCount, cluster.Current.CSMConfig.NodeTypes[0].VMInstanceCount); Utility.UpdateCluster("ClusterConfig.Unsecured.DevCluster.AutoScale.V2.json", cluster); Assert.IsTrue(cluster.RunStateMachine()); ClusterUpgradeStateBase upgradeState = cluster.Pending; Assert.IsInstanceOfType(upgradeState, typeof(MockupAutoScaleClusterUpgradeState)); Assert.AreNotEqual(upgradeState.TargetCsmConfig, cluster.Current.CSMConfig); //Need to set targetReplicaSetSize to an empty dictionary, in order to get the system think the replica set size is updated. //Otherwise VerifyTargetSystemServicesReplicaSetSize() will fail. var targetReplicaSetSize = new Dictionary <string, ReplicaSetSize>() { { "", new ReplicaSetSize() } }; MockupAutoScaleClusterUpgradeState scaleUpUpgradeState = (MockupAutoScaleClusterUpgradeState)upgradeState; scaleUpUpgradeState.TargetSystemServicesSize = new Dictionary <string, ReplicaSetSize>(); scaleUpUpgradeState.GetSystemServiceReplicaSetSize(targetReplicaSetSize); Utility.RollForwardOneIteration(cluster); upgradeState = (MockupAutoScaleClusterUpgradeState)cluster.Pending; Utility.RollForwardOneIteration(cluster); Assert.IsNull(cluster.Pending); Assert.IsNotNull(cluster.Current); Assert.AreEqual(AutoScaleClusterUpgradeTest.TargetVMInstanceCount, cluster.Current.CSMConfig.NodeTypes[0].VMInstanceCount); Assert.AreEqual(AutoScaleClusterUpgradeTest.BaselineConfigVersion, cluster.Current.CSMConfig.Version.Version); }