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(); }
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); }