/// <summary> /// This method handles most possible cases that user can do to create role /// </summary> /// <param name="webRole">Count of web roles to add</param> /// <param name="workerRole">Count of worker role to add</param> /// <param name="addWebBeforeWorker">Decides in what order to add roles. There are three options, note that value between brackets is the value to pass: /// 1. Web then, interleaving (0): interleave adding and start by adding web role first. /// 2. Worker then, interleaving (1): interleave adding and start by adding worker role first. /// 3. Web then worker (2): add all web roles then worker roles. /// 4. Worker then web (3): add all worker roles then web roles. /// By default this parameter is set to 0 /// </param> private void AddNodeRoleTest(int webRole, int workerRole, int order = 0) { using (FileSystemHelper files = new FileSystemHelper(this)) { AzureServiceWrapper wrappedService = new AzureServiceWrapper(files.RootPath, serviceName, null); AzureService service = new AzureService(Path.Combine(files.RootPath, serviceName), null); WebRoleInfo[] webRoles = null; if (webRole > 0) { webRoles = new WebRoleInfo[webRole]; for (int i = 0; i < webRoles.Length; i++) { webRoles[i] = new WebRoleInfo(string.Format("{0}{1}", Resources.WebRole, i + 1), 1); } } WorkerRoleInfo[] workerRoles = null; if (workerRole > 0) { workerRoles = new WorkerRoleInfo[workerRole]; for (int i = 0; i < workerRoles.Length; i++) { workerRoles[i] = new WorkerRoleInfo(string.Format("{0}{1}", Resources.WorkerRole, i + 1), 1); } } RoleInfo[] roles = (webRole + workerRole > 0) ? new RoleInfo[webRole + workerRole] : null; if (order == 0) { for (int i = 0, w = 0, wo = 0; i < webRole + workerRole;) { if (w++ < webRole) { roles[i++] = wrappedService.AddWebRole(Data.NodeWebRoleScaffoldingPath); } if (wo++ < workerRole) { roles[i++] = wrappedService.AddWorkerRole(Data.NodeWorkerRoleScaffoldingPath); } } } else if (order == 1) { for (int i = 0, w = 0, wo = 0; i < webRole + workerRole;) { if (wo++ < workerRole) { roles[i++] = wrappedService.AddWorkerRole(Data.NodeWorkerRoleScaffoldingPath); } if (w++ < webRole) { roles[i++] = wrappedService.AddWebRole(Data.NodeWebRoleScaffoldingPath); } } } else if (order == 2) { wrappedService.AddRole(Data.NodeWebRoleScaffoldingPath, Data.NodeWorkerRoleScaffoldingPath, webRole, workerRole); webRoles.CopyTo(roles, 0); Array.Copy(workerRoles, 0, roles, webRole, workerRoles.Length); } else if (order == 3) { wrappedService.AddRole(Data.NodeWebRoleScaffoldingPath, Data.NodeWorkerRoleScaffoldingPath, 0, workerRole); workerRoles.CopyTo(roles, 0); wrappedService.AddRole(Data.NodeWebRoleScaffoldingPath, Data.NodeWorkerRoleScaffoldingPath, webRole, 0); Array.Copy(webRoles, 0, roles, workerRole, webRoles.Length); } else { throw new ArgumentException("value for order parameter is unknown"); } AzureAssert.AzureServiceExists(Path.Combine(files.RootPath, serviceName), Resources.GeneralScaffolding, serviceName, webRoles: webRoles, workerRoles: workerRoles, webScaff: Data.NodeWebRoleScaffoldingPath, workerScaff: Data.NodeWorkerRoleScaffoldingPath, roles: roles); } }
/// <summary> /// Validates that given service definition is valid for a service. Validation steps: /// 1. Validates name element matches serviceName /// 2. Validates web role element has all webRoles with same configuration. /// 3. Validates worker role element has all workerRoles with same configuration. /// </summary> /// <param name="actual">Service definition to be checked</param> /// <param name="serviceName">New created service name</param> public static void IsValidServiceDefinition(ServiceDefinition actual, string serviceName, WebRoleInfo[] webRoles = null, WorkerRoleInfo[] workerRoles = null) { Assert.AreEqual<string>(serviceName, actual.name); if (webRoles != null) { Assert.AreEqual<int>(webRoles.Length, actual.WebRole.Length); int length = webRoles.Length; for (int i = 0; i < length; i++) { Assert.IsTrue(webRoles[i].Equals(actual.WebRole[i])); } } else { Assert.IsNull(actual.WebRole); } if (workerRoles != null) { Assert.AreEqual<int>(workerRoles.Length, actual.WorkerRole.Length); int length = workerRoles.Length; for (int i = 0; i < length; i++) { Assert.IsTrue(workerRoles[i].Equals(actual.WorkerRole[i])); } } else { Assert.IsNull(actual.WorkerRole); } }
public RoleInfo AddWebRole(string name = null, int instanceCount = 1) { name = GetRoleName(name, Resources.WebRole, Components.Definition.WebRole == null ? new String[0] : Components.Definition.WebRole.Select(wr => wr.name.ToLower())); WebRoleInfo role = new WebRoleInfo(name, instanceCount); AddRoleCore(role, RoleType.WebRole); return role; }
public static void AzureServiceExists(string serviceRootPath, string scaffoldFilePath, string serviceName, ServiceSettings settings = null, WebRoleInfo[] webRoles = null, WorkerRoleInfo[] workerRoles = null, string webScaff = null, string workerScaff = null, RoleInfo[] roles = null) { ServiceComponents components = new ServiceComponents(new ServicePathInfo(serviceRootPath)); ScaffoldingExists(serviceRootPath, scaffoldFilePath); if (webRoles != null) { for (int i = 0; i < webRoles.Length; i++) { ScaffoldingExists(Path.Combine(serviceRootPath, webRoles[i].Name), webScaff); } } if (workerRoles != null) { for (int i = 0; i < workerRoles.Length; i++) { ScaffoldingExists(Path.Combine(serviceRootPath, workerRoles[i].Name), workerScaff); } } AreEqualServiceConfiguration(components.LocalConfig, serviceName, roles); AreEqualServiceConfiguration(components.CloudConfig, serviceName, roles); IsValidServiceDefinition(components.Definition, serviceName, webRoles, workerRoles); AreEqualServiceSettings(settings ?? new ServiceSettings(), components.Settings); }
private void AddPHPRoleTest(int webRole, int workerRole, int order = 0) { using (FileSystemHelper files = new FileSystemHelper(this)) { AzureServiceWrapper wrappedService = new AzureServiceWrapper(files.RootPath, serviceName, null); AzureService service = new AzureService(Path.Combine(files.RootPath, serviceName), null); WebRoleInfo[] webRoles = null; if (webRole > 0) { webRoles = new WebRoleInfo[webRole]; for (int i = 0; i < webRoles.Length; i++) { webRoles[i] = new WebRoleInfo(string.Format("{0}{1}", Resources.WebRole, i + 1), 1); } } WorkerRoleInfo[] workerRoles = null; if (workerRole > 0) { workerRoles = new WorkerRoleInfo[workerRole]; for (int i = 0; i < workerRoles.Length; i++) { workerRoles[i] = new WorkerRoleInfo(string.Format("{0}{1}", Resources.WorkerRole, i + 1), 1); } } RoleInfo[] roles = (webRole + workerRole > 0) ? new RoleInfo[webRole + workerRole] : null; if (order == 0) { for (int i = 0, w = 0, wo = 0; i < webRole + workerRole; ) { if (w++ < webRole) roles[i++] = wrappedService.AddWebRole(Resources.PHPScaffolding); if (wo++ < workerRole) roles[i++] = wrappedService.AddWorkerRole(Resources.PHPScaffolding); } } else if (order == 1) { for (int i = 0, w = 0, wo = 0; i < webRole + workerRole; ) { if (wo++ < workerRole) roles[i++] = wrappedService.AddWorkerRole(Resources.PHPScaffolding); if (w++ < webRole) roles[i++] = wrappedService.AddWebRole(Resources.PHPScaffolding); } } else if (order == 2) { wrappedService.AddRole(Resources.PHPScaffolding, webRole, workerRole); webRoles.CopyTo(roles, 0); Array.Copy(workerRoles, 0, roles, webRole, workerRoles.Length); } else if (order == 3) { wrappedService.AddRole(Resources.PHPScaffolding, 0, workerRole); workerRoles.CopyTo(roles, 0); wrappedService.AddRole(Resources.PHPScaffolding, webRole, 0); Array.Copy(webRoles, 0, roles, workerRole, webRoles.Length); } else { throw new ArgumentException("value for order parameter is unknown"); } AzureAssert.AzureServiceExists(Path.Combine(files.RootPath, serviceName), Resources.GeneralScaffolding, serviceName, webRoles: webRoles, workerRoles: workerRoles, webScaff: Path.Combine(Resources.PHPScaffolding, Resources.WebRole), workerScaff: Path.Combine(Resources.PHPScaffolding, Resources.WorkerRole), roles: roles); } }