public void ValidateUpgradeTest()
        {
            // Windows/ GMSA security <-> unsecure is not allowed.
            StandAloneInstallerJSONModelAugust2017 v1model   = Utility.CreateMockupStandAloneJsonModel("testCluster", "1.0.0", security: Utility.CreateGMSASecurity());
            StandAloneInstallerJSONModelAugust2017 v2model   = Utility.CreateMockupStandAloneJsonModel("testCluster", "2.0.0");
            StandaloneSettingsValidator            validator = new StandaloneSettingsValidator(v2model);

            Utility.ValidateExpectedValidationException(
                delegate
            {
                validator.ValidateUpdateFrom(v1model.GetUserConfig(), v1model.GetClusterTopology(), false).GetAwaiter().GetResult();
            },
                ClusterManagementErrorCode.AuthenticationTypeCannotBeChangedFromWindowsToUnsecured);

            // For the same nodename, node IP can't be changed.
            List <NodeDescriptionGA> nodelist   = new List <NodeDescriptionGA>();
            NodeDescriptionGA        node       = Utility.CreateNodeDescription("node1", "NodeType0", "machine1", "fd:/dc1/r0", "UD0");
            List <NodeDescriptionGA> nodelistV2 = new List <NodeDescriptionGA>();
            NodeDescriptionGA        nodeV2     = Utility.CreateNodeDescription("node1", "NodeType0", "machine2", "fd:/dc1/r0", "UD0");

            nodelist.Add(node);
            nodelistV2.Add(nodeV2);
            v1model   = Utility.CreateMockupStandAloneJsonModel("testCluster", "1.0.0", nodes: nodelist);
            v2model   = Utility.CreateMockupStandAloneJsonModel("testCluster", "2.0.0", nodes: nodelistV2);
            validator = new StandaloneSettingsValidator(v2model);

            Utility.ValidateExpectedValidationException(
                delegate
            {
                validator.ValidateUpdateFrom(v1model.GetUserConfig(), v1model.GetClusterTopology(), false).GetAwaiter().GetResult();
            },
                ClusterManagementErrorCode.NodeIPNodeTypeRefCantBeChanged);

            // Reverse proxy port change is allowed.
            v1model = Utility.CreateMockupStandAloneJsonModel("testCluster", "1.0.0");
            v2model = Utility.CreateMockupStandAloneJsonModel("testCluster", "2.0.0");
            foreach (var currentNodeType in v2model.Properties.NodeTypes)
            {
                currentNodeType.ReverseProxyEndpointPort = 19081;
            }
            validator = new StandaloneSettingsValidator(v2model);
            validator.ValidateUpdateFrom(v1model.GetUserConfig(), v1model.GetClusterTopology(), false).GetAwaiter().GetResult();
        }
Ejemplo n.º 2
0
        internal static StandAloneInstallerJSONModelAugust2017 CreateMockupStandAloneJsonModel(
            string name,
            string clusterConfigurationVersion,
            List <SettingsSectionDescription> fabricSettings = null,
            SecurityMay2017 security = null,
            EncryptableDiagnosticStoreInformation diagnosticsStore = null,
            List <NodeDescriptionGA> nodes = null)
        {
            StandAloneInstallerJSONModelAugust2017 jsonModel = new StandAloneInstallerJSONModelAugust2017();

            jsonModel.Name = name;
            jsonModel.ClusterConfigurationVersion = clusterConfigurationVersion;
            jsonModel.ApiVersion = "08-2017";
            jsonModel.Nodes      = new List <NodeDescriptionGA>();

            jsonModel.Properties = new PropertyAugust2017();
            jsonModel.Properties.DiagnosticsStore = diagnosticsStore;
            jsonModel.Properties.FabricSettings   = fabricSettings;
            jsonModel.Properties.Security         = security;
            jsonModel.Properties.NodeTypes        = new List <NodeTypeDescriptionAugust2017>();

            for (int i = 0; i < 5; i++)
            {
                jsonModel.Properties.NodeTypes.Add(CreateNodeType("NodeType" + i, i == 0));

                if (nodes == null)
                {
                    jsonModel.Nodes.Add(CreateNodeDescription("Node" + i.ToString(), "NodeType" + i, "machine" + i, "fd:/dc1/r" + i, "UD" + i));
                }
            }

            if (nodes != null)
            {
                jsonModel.Nodes = nodes;
            }

            if (fabricSettings == null)
            {
                fabricSettings = new List <SettingsSectionDescription>();
            }

            return(jsonModel);
        }
        public void ValidateTopologyTest()
        {
            // Node name contains invalid characters.
            List <NodeDescriptionGA> nodelist = new List <NodeDescriptionGA>();
            NodeDescriptionGA        node     = Utility.CreateNodeDescription("<", "nodetype1", "machine1", "fd:/dc1/r0", "UD0");

            nodelist.Add(node);
            StandAloneInstallerJSONModelAugust2017 v1model           = Utility.CreateMockupStandAloneJsonModel("testCluster", "1.0.0", nodes: nodelist);
            StandaloneSettingsValidator            settingsValidator = new StandaloneSettingsValidator(v1model);

            Utility.ValidateExpectedValidationException(
                delegate
            {
                settingsValidator.ValidateTopology();
            },
                ClusterManagementErrorCode.NodeNameContainsInvalidChars);

            // Duplicate node name.
            List <NodeDescriptionGA> nodelist2 = new List <NodeDescriptionGA>();
            NodeDescriptionGA        node1     = Utility.CreateNodeDescription("node1", "nodetype1", "machine1", "fd:/dc1/r0", "UD0");
            NodeDescriptionGA        node2     = Utility.CreateNodeDescription("node1", "nodetype1", "machine2", "fd:/dc1/r1", "UD1");

            nodelist2.Add(node1);
            nodelist2.Add(node2);
            v1model = Utility.CreateMockupStandAloneJsonModel("testCluster", "1.0.0", nodes: nodelist2);

            Utility.ValidateExpectedValidationException(
                delegate
            {
                settingsValidator = new StandaloneSettingsValidator(v1model);
            },
                ClusterManagementErrorCode.NodeNameDuplicateDetected);

            // FD count needs to be greater than 2 for multi-box deployment.
            List <NodeDescriptionGA> nodelist4 = new List <NodeDescriptionGA>();

            node1 = Utility.CreateNodeDescription("node1", "nodetype1", "machine1", "fd:/dc1/r0", "UD0");
            node2 = Utility.CreateNodeDescription("node2", "nodetype1", "machine2", "fd:/dc1/r0", "UD1");
            NodeDescriptionGA node3 = Utility.CreateNodeDescription("node3", "nodetype1", "machine3", "fd:/dc1/r0", "UD2");

            nodelist4.Add(node1);
            nodelist4.Add(node2);
            nodelist4.Add(node3);
            v1model           = Utility.CreateMockupStandAloneJsonModel("testCluster", "1.0.0", nodes: nodelist4);
            settingsValidator = new StandaloneSettingsValidator(v1model);

            Utility.ValidateExpectedValidationException(
                delegate
            {
                settingsValidator.ValidateTopology();
            },
                ClusterManagementErrorCode.FDMustBeGreaterThan2);

            // Scale-min should be blocked for multi-box deployment
            List <NodeDescriptionGA> nodelistScaleMin = new List <NodeDescriptionGA>();

            node1 = Utility.CreateNodeDescription("node1", "nodetype1", "machine1", "fd:/dc1/r0", "UD0");
            node2 = Utility.CreateNodeDescription("node2", "nodetype1", "machine1", "fd:/dc1/r1", "UD1");
            node3 = Utility.CreateNodeDescription("node3", "nodetype1", "machine2", "fd:/dc2/r1", "UD2");
            nodelistScaleMin.Add(node1);
            nodelistScaleMin.Add(node2);
            nodelistScaleMin.Add(node3);
            v1model           = Utility.CreateMockupStandAloneJsonModel("testCluster", "1.0.0", nodes: nodelistScaleMin);
            settingsValidator = new StandaloneSettingsValidator(v1model);

            Utility.ValidateExpectedValidationException(
                delegate
            {
                settingsValidator.ValidateTopology();
            },
                ClusterManagementErrorCode.ScaleMinNotAllowed);
        }