コード例 #1
0
        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());
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
            }
        }
コード例 #9
0
        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);
            }
        }
コード例 #10
0
        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);
        }