public async Task IsDisplayable_ManyDependencies() { var projectPath = SystemIOUtilities.ResolvePath("WebAppWithDockerFile"); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, new Orchestrator.OrchestratorSession()); var recommendations = await engine.ComputeRecommendations(projectPath, new ()); var fargateRecommendation = recommendations.First(r => r.Recipe.Id == Constants.ASPNET_CORE_ASPNET_CORE_FARGATE_RECIPE_ID); var isDefaultOptionSetting = fargateRecommendation.GetOptionSetting("Vpc.IsDefault"); var createNewOptionSetting = fargateRecommendation.GetOptionSetting("Vpc.CreateNew"); var vpcIdOptionSetting = fargateRecommendation.GetOptionSetting("Vpc.VpcId"); // Before dependency aren't satisfied Assert.False(fargateRecommendation.IsOptionSettingDisplayable(vpcIdOptionSetting)); // Satisfy dependencies isDefaultOptionSetting.SetValueOverride(false); Assert.False(fargateRecommendation.GetOptionSettingValue <bool>(isDefaultOptionSetting)); // Default value for Vpc.CreateNew already false, this is to show explicitly setting an override that satisfies Vpc Id option setting createNewOptionSetting.SetValueOverride(false); Assert.False(fargateRecommendation.GetOptionSettingValue <bool>(createNewOptionSetting)); // Verify Assert.True(fargateRecommendation.IsOptionSettingDisplayable(vpcIdOptionSetting)); }
public async Task PackageReferenceTest() { var projectPath = SystemIOUtilities.ResolvePath("MessageProcessingApp"); var projectDefinition = await new ProjectDefinitionParser(new FileManager(), new DirectoryManager()).Parse(projectPath); var test = new NuGetPackageReferenceTest(); Assert.True(await test.Execute(new RecommendationTestInput( new RuleTest( test.Name, new RuleCondition { NuGetPackageName = "AWSSDK.SQS" }), projectDefinition, _session))); Assert.False(await test.Execute(new RecommendationTestInput( new RuleTest( test.Name, new RuleCondition { NuGetPackageName = "AWSSDK.S3" }), projectDefinition, _session))); }
public async Task PackageReferenceTest() { var projectPath = SystemIOUtilities.ResolvePath("MessageProcessingApp"); var projectDefinition = new ProjectDefinition(projectPath); var test = new NuGetPackageReferenceTest(); Assert.True(await test.Execute(new RecommendationTestInput { Test = new RuleTest { Type = test.Name, Condition = new RuleCondition { NuGetPackageName = "AWSSDK.SQS" } }, ProjectDefinition = projectDefinition })); Assert.False(await test.Execute(new RecommendationTestInput { Test = new RuleTest { Type = test.Name, Condition = new RuleCondition { NuGetPackageName = "AWSSDK.S3" } }, ProjectDefinition = projectDefinition })); }
public SetOptionSettingTests() { var projectPath = SystemIOUtilities.ResolvePath("WebAppNoDockerFile"); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, new Orchestrator.OrchestratorSession()); var recommendations = engine.ComputeRecommendations(projectPath, new Dictionary <string, string>()).GetAwaiter().GetResult(); _recommendation = recommendations.First(r => r.Recipe.Id == Constants.ASPNET_CORE_BEANSTALK_RECIPE_ID); _optionSetting = _recommendation.Recipe.OptionSettings.First(x => x.Id.Equals("EnvironmentType")); }
public async Task ValueMappingWithDefaultValue() { var projectPath = SystemIOUtilities.ResolvePath("WebAppNoDockerFile"); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, new Orchestrator.OrchestratorSession()); var recommendations = await engine.ComputeRecommendations(projectPath, new Dictionary <string, string>()); var beanstalkRecommendation = recommendations.First(r => r.Recipe.Id == Constants.ASPNET_CORE_BEANSTALK_RECIPE_ID); var environmentTypeOptionSetting = beanstalkRecommendation.Recipe.OptionSettings.First(optionSetting => optionSetting.Id.Equals("EnvironmentType")); Assert.Equal("SingleInstance", beanstalkRecommendation.GetOptionSettingValue(environmentTypeOptionSetting, false)); }
public async Task PushDockerImage_RepositoryNameCheck() { var projectPath = SystemIOUtilities.ResolvePath("ConsoleAppTask"); var project = await _projectDefinitionParser.Parse(projectPath); var recommendation = new Recommendation(_recipeDefinition, project, new List <OptionSettingItem>(), 100, new Dictionary <string, string>()); var cloudApplication = new CloudApplication("ConsoleAppTask", String.Empty); await _deploymentBundleHandler.PushDockerImageToECR(cloudApplication, recommendation, "ConsoleAppTask:latest"); Assert.Equal(cloudApplication.StackName.ToLower(), recommendation.DeploymentBundle.ECRRepositoryName); }
public async Task GetOptionSettingTests_OptionSettingDoesNotExist(string jsonPath) { var projectPath = SystemIOUtilities.ResolvePath("WebAppNoDockerFile"); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, new Orchestrator.OrchestratorSession()); var recommendations = await engine.ComputeRecommendations(projectPath, new Dictionary <string, string>()); var beanstalkRecommendation = recommendations.First(r => r.Recipe.Id == Constants.ASPNET_CORE_BEANSTALK_RECIPE_ID); var optionSetting = beanstalkRecommendation.GetOptionSetting(jsonPath); Assert.Null(optionSetting); }
public async Task BlazorWasmTest(string projectName) { var projectPath = SystemIOUtilities.ResolvePath(projectName); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, new Orchestrator.OrchestratorSession()); var recommendations = await engine.ComputeRecommendations(projectPath, new Dictionary <string, string>()); var blazorRecommendation = recommendations.FirstOrDefault(r => r.Recipe.Id == Constants.BLAZOR_WASM); Assert.NotNull(blazorRecommendation); Assert.NotNull(blazorRecommendation.Recipe.DeploymentConfirmation.DefaultMessage); }
public async Task ObjectMappingWithDefaultValue() { var projectPath = SystemIOUtilities.ResolvePath("WebAppNoDockerFile"); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, new Orchestrator.OrchestratorSession()); var recommendations = await engine.ComputeRecommendations(projectPath, new Dictionary <string, string>()); var beanstalkRecommendation = recommendations.First(r => r.Recipe.Id == Constants.ASPNET_CORE_BEANSTALK_RECIPE_ID); var applicationIAMRoleOptionSetting = beanstalkRecommendation.Recipe.OptionSettings.First(optionSetting => optionSetting.Id.Equals("ApplicationIAMRole")); var iamRoleTypeHintResponse = beanstalkRecommendation.GetOptionSettingValue <IAMRoleTypeHintResponse>(applicationIAMRoleOptionSetting, false); Assert.Null(iamRoleTypeHintResponse.RoleArn); Assert.True(iamRoleTypeHintResponse.CreateNew); }
public async Task PushDockerImage_RepositoryNameCheck() { var projectPath = SystemIOUtilities.ResolvePath("ConsoleAppTask"); var projectDefinition = new ProjectDefinition(projectPath); var recipeDefinition = new Mock <RecipeDefinition>(); var recommendation = new Recommendation(recipeDefinition.Object, projectDefinition.ProjectPath, 100, new Dictionary <string, string>()); var cloudApplication = new CloudApplication { Name = "ConsoleAppTask" }; await _deploymentBundleHandler.PushDockerImageToECR(cloudApplication, recommendation, "ConsoleAppTask:latest"); Assert.Equal(cloudApplication.StackName.ToLower(), recommendation.DeploymentBundle.ECRRepositoryName); }
public async Task DockerExecutionDirectory_DockerfileLevel() { var projectPath = Path.Combine("docker", "WebAppNoSolution"); var engine = await BuildRecommendationEngine(projectPath); var recommendations = await engine.ComputeRecommendations(); var recommendation = recommendations.FirstOrDefault(x => x.Recipe.DeploymentBundle.Equals(DeploymentBundleTypes.Container)); var cloudApplication = new CloudApplication("WebAppNoSolution", String.Empty); var result = await _deploymentBundleHandler.BuildDockerImage(cloudApplication, recommendation); Assert.Equal(Path.GetFullPath(SystemIOUtilities.ResolvePath(projectPath)), recommendation.DeploymentBundle.DockerExecutionDirectory); }
public async Task ApplyApplicationIAMRolePreviousSettings(bool createNew, string roleArn) { var projectPath = SystemIOUtilities.ResolvePath("WebAppNoDockerFile"); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, new Orchestrator.OrchestratorSession()); var recommendations = await engine.ComputeRecommendations(projectPath, new Dictionary <string, string>()); var beanstalkRecommendation = recommendations.First(r => r.Recipe.Id == Constants.ASPNET_CORE_BEANSTALK_RECIPE_ID); var roleArnValue = roleArn == null ? "null" : $"\"{roleArn}\""; var serializedSettings = @$ " {{ " "ApplicationIAMRole" ": {{ " "RoleArn" ": {roleArnValue},
public async Task ApplyProjectNameToSettings() { var projectPath = SystemIOUtilities.ResolvePath("WebAppNoDockerFile"); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, new Orchestrator.OrchestratorSession()); var recommendations = await engine.ComputeRecommendations(projectPath, new Dictionary <string, string>()); var beanstalkRecommendation = recommendations.FirstOrDefault(r => r.Recipe.Id == Constants.ASPNET_CORE_BEANSTALK_RECIPE_ID); var beanstalEnvNameSetting = beanstalkRecommendation.Recipe.OptionSettings.FirstOrDefault(x => string.Equals("EnvironmentName", x.Id)); Assert.Equal("WebAppNoDockerFile-dev", beanstalkRecommendation.GetOptionSettingValue <string>(beanstalEnvNameSetting)); beanstalkRecommendation.OverrideProjectName("CustomName"); Assert.Equal("CustomName-dev", beanstalkRecommendation.GetOptionSettingValue <string>(beanstalEnvNameSetting)); }
public async Task WebAppWithDockerFileTest() { var projectPath = SystemIOUtilities.ResolvePath("WebAppWithDockerFile"); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, new Orchestrator.OrchestratorSession()); var recommendations = await engine.ComputeRecommendations(projectPath, new Dictionary <string, string>()); recommendations .Any(r => r.Recipe.Id == Constants.ASPNET_CORE_ASPNET_CORE_FARGATE_RECIPE_ID) .ShouldBeTrue("Failed to receive Recommendation: " + Constants.ASPNET_CORE_ASPNET_CORE_FARGATE_RECIPE_ID); recommendations .Any(r => r.Recipe.Id == Constants.ASPNET_CORE_BEANSTALK_RECIPE_ID) .ShouldBeTrue("Failed to receive Recommendation: " + Constants.ASPNET_CORE_BEANSTALK_RECIPE_ID); }
public async Task DockerExecutionDirectory_DockerfileLevel() { var projectPath = SystemIOUtilities.ResolvePath("docker\\WebAppNoSolution"); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, _session); var recommendations = await engine.ComputeRecommendations(projectPath, new()); var recommendation = recommendations.FirstOrDefault(x => x.Recipe.DeploymentBundle.Equals(DeploymentBundleTypes.Container)); var cloudApplication = new CloudApplication { Name = "WebAppNoSolution" }; var result = await _deploymentBundleHandler.BuildDockerImage(cloudApplication, recommendation); Assert.Equal(Path.GetFullPath(projectPath), recommendation.DeploymentBundle.DockerExecutionDirectory); }
public async Task MessageProcessingAppTest() { var projectPath = SystemIOUtilities.ResolvePath("MessageProcessingApp"); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, new Orchestrator.OrchestratorSession()); var recommendations = await engine.ComputeRecommendations(projectPath, new Dictionary <string, string>()); recommendations .Any(r => r.Recipe.Id == Constants.CONSOLE_APP_FARGATE_SERVICE_RECIPE_ID) .ShouldBeTrue("Failed to receive Recommendation: " + Constants.CONSOLE_APP_FARGATE_SERVICE_RECIPE_ID); recommendations .Any(r => r.Recipe.Id == Constants.CONSOLE_APP_FARGATE_SCHEDULE_TASK_RECIPE_ID) .ShouldBeTrue("Failed to receive Recommendation: " + Constants.CONSOLE_APP_FARGATE_SCHEDULE_TASK_RECIPE_ID); }
public async Task ParseProjectDefinitionWithAbsoluteProjectPath(string projectName, string csprojName) { //Arrange var projectDirectoryPath = SystemIOUtilities.ResolvePath(projectName); var absoluteProjectDirectoryPath = new DirectoryInfo(projectDirectoryPath).FullName; var absoluteProjectPath = Path.Combine(absoluteProjectDirectoryPath, csprojName); var projectSolutionPath = SystemIOUtilities.ResolvePathToSolution(); // Act var projectDefinition = await new ProjectDefinitionParser(new FileManager(), new DirectoryManager()).Parse(absoluteProjectDirectoryPath); // Assert projectDefinition.ShouldNotBeNull(); Assert.Equal(absoluteProjectPath, projectDefinition.ProjectPath); Assert.Equal(projectSolutionPath, projectDefinition.ProjectSolutionPath); }
public async Task MessageProcessingAppTest() { var projectPath = SystemIOUtilities.ResolvePath("MessageProcessingApp"); var engine = await BuildRecommendationEngine("MessageProcessingApp"); var recommendations = await engine.ComputeRecommendations(); recommendations .Any(r => r.Recipe.Id == Constants.CONSOLE_APP_FARGATE_SERVICE_RECIPE_ID) .ShouldBeTrue("Failed to receive Recommendation: " + Constants.CONSOLE_APP_FARGATE_SERVICE_RECIPE_ID); recommendations .Any(r => r.Recipe.Id == Constants.CONSOLE_APP_FARGATE_SCHEDULE_TASK_RECIPE_ID) .ShouldBeTrue("Failed to receive Recommendation: " + Constants.CONSOLE_APP_FARGATE_SCHEDULE_TASK_RECIPE_ID); }
private async Task <RecommendationEngine> BuildRecommendationEngine(string testProjectName) { var fullPath = SystemIOUtilities.ResolvePath(testProjectName); var parser = new ProjectDefinitionParser(new FileManager(), new DirectoryManager()); var awsCredentials = new Mock <AWSCredentials>(); var session = new OrchestratorSession( await parser.Parse(fullPath), awsCredentials.Object, "us-west-2", "123456789012") { AWSProfileName = "default" }; return(new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, session)); }
public async Task ParseProjectDefinitionWithRelativeProjectPath(string projectName, string csprojName) { //Arrange var currrentWorkingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var projectDirectoryPath = SystemIOUtilities.ResolvePath(projectName); var absoluteProjectDirectoryPath = new DirectoryInfo(projectDirectoryPath).FullName; var absoluteProjectPath = Path.Combine(absoluteProjectDirectoryPath, csprojName); var relativeProjectDirectoryPath = Path.GetRelativePath(currrentWorkingDirectory, absoluteProjectDirectoryPath); var projectSolutionPath = SystemIOUtilities.ResolvePathToSolution(); // Act var projectDefinition = await new ProjectDefinitionParser(new FileManager(), new DirectoryManager()).Parse(relativeProjectDirectoryPath); // Assert projectDefinition.ShouldNotBeNull(); Assert.Equal(absoluteProjectPath, projectDefinition.ProjectPath); Assert.Equal(projectSolutionPath, projectDefinition.ProjectSolutionPath); }
public async Task BuildDockerImage_DockerExecutionDirectoryNotSet() { var projectPath = SystemIOUtilities.ResolvePath("ConsoleAppTask"); var project = await _projectDefinitionParser.Parse(projectPath); var recommendation = new Recommendation(_recipeDefinition, project, new List <OptionSettingItem>(), 100, new Dictionary <string, string>()); var cloudApplication = new CloudApplication("ConsoleAppTask", String.Empty); var result = await _deploymentBundleHandler.BuildDockerImage(cloudApplication, recommendation); var dockerFile = Path.Combine(Path.GetDirectoryName(Path.GetFullPath(recommendation.ProjectPath)), "Dockerfile"); var dockerExecutionDirectory = Directory.GetParent(Path.GetFullPath(recommendation.ProjectPath)).Parent.Parent; Assert.Equal($"docker build -t {result} -f \"{dockerFile}\" .", _commandLineWrapper.CommandsToExecute.First().Command); Assert.Equal(dockerExecutionDirectory.FullName, _commandLineWrapper.CommandsToExecute.First().WorkingDirectory); }
public async Task BuildDockerImage_DockerExecutionDirectorySet() { var projectPath = SystemIOUtilities.ResolvePath("ConsoleAppTask"); var projectDefinition = new ProjectDefinition(projectPath); var recipeDefinition = new Mock <RecipeDefinition>(); var recommendation = new Recommendation(recipeDefinition.Object, projectDefinition.ProjectPath, 100, new Dictionary <string, string>()); recommendation.DeploymentBundle.DockerExecutionDirectory = projectPath; var cloudApplication = new CloudApplication { Name = "ConsoleAppTask" }; var result = await _deploymentBundleHandler.BuildDockerImage(cloudApplication, recommendation); var dockerFile = Path.Combine(Path.GetDirectoryName(Path.GetFullPath(recommendation.ProjectPath)), "Dockerfile"); Assert.Equal($"docker build -t {result} -f \"{dockerFile}\" .", _commandLineWrapper.CommandsToExecute.First().Command); Assert.Equal(projectPath, _commandLineWrapper.CommandsToExecute.First().WorkingDirectory); }
public async Task RecipeController_GetRecipe_WithProjectPath() { var directoryManager = new DirectoryManager(); var fileManager = new FileManager(); var projectDefinitionParser = new ProjectDefinitionParser(fileManager, directoryManager); var mockCustomRecipeLocator = new Mock <ICustomRecipeLocator>(); var sourceProjectDirectory = SystemIOUtilities.ResolvePath("WebAppWithDockerFile"); var customLocatorCalls = 0; mockCustomRecipeLocator .Setup(x => x.LocateCustomRecipePaths(It.IsAny <string>(), It.IsAny <string>())) .Callback <string, string>((csProjectPath, solutionPath) => { customLocatorCalls++; Assert.Equal(new DirectoryInfo(sourceProjectDirectory).FullName, Directory.GetParent(csProjectPath).FullName); }) .Returns(Task.FromResult(new HashSet <string>())); var projectDefinition = await projectDefinitionParser.Parse(sourceProjectDirectory); var recipeDefinitions = await RecipeHandler.GetRecipeDefinitions(mockCustomRecipeLocator.Object, projectDefinition); var recipe = recipeDefinitions.First(); Assert.NotEqual(0, customLocatorCalls); customLocatorCalls = 0; var recipeController = new RecipeController(mockCustomRecipeLocator.Object, projectDefinitionParser); var response = await recipeController.GetRecipe(recipe.Id, sourceProjectDirectory); Assert.NotEqual(0, customLocatorCalls); var result = Assert.IsType <OkObjectResult>(response); var resultRecipe = Assert.IsType <RecipeSummary>(result.Value); Assert.Equal(recipe.Id, resultRecipe.Id); }
public SetOptionSettingTests() { var projectPath = SystemIOUtilities.ResolvePath("WebAppNoDockerFile"); var parser = new ProjectDefinitionParser(new FileManager(), new DirectoryManager()); var awsCredentials = new Mock <AWSCredentials>(); var session = new OrchestratorSession( parser.Parse(projectPath).Result, awsCredentials.Object, "us-west-2", "123456789012") { AWSProfileName = "default" }; var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, session); var recommendations = engine.ComputeRecommendations().GetAwaiter().GetResult(); _recommendation = recommendations.First(r => r.Recipe.Id == Constants.ASPNET_CORE_BEANSTALK_RECIPE_ID); _optionSetting = _recommendation.Recipe.OptionSettings.First(x => x.Id.Equals("EnvironmentType")); }
public async Task CreateDotnetPublishZip_NotSelfContained() { var projectPath = SystemIOUtilities.ResolvePath("ConsoleAppTask"); var projectDefinition = new ProjectDefinition(projectPath); var recipeDefinition = new Mock <RecipeDefinition>(); var recommendation = new Recommendation(recipeDefinition.Object, projectDefinition.ProjectPath, 100, new Dictionary <string, string>()); recommendation.DeploymentBundle.DotnetPublishSelfContainedBuild = false; recommendation.DeploymentBundle.DotnetPublishBuildConfiguration = "Release"; recommendation.DeploymentBundle.DotnetPublishAdditionalBuildArguments = "--nologo"; await _deploymentBundleHandler.CreateDotnetPublishZip(recommendation); var expectedCommand = $"dotnet publish \"{projectDefinition.ProjectPath}\"" + $" -o \"{_directoryManager.CreatedDirectories.First()}\"" + " -c Release" + " " + " --nologo"; Assert.Equal(expectedCommand, _commandLineWrapper.CommandsToExecute.First().Command); }
public async Task CreateDotnetPublishZip_SelfContained() { var projectPath = SystemIOUtilities.ResolvePath("ConsoleAppTask"); var project = await _projectDefinitionParser.Parse(projectPath); var recommendation = new Recommendation(_recipeDefinition, project, new List <OptionSettingItem>(), 100, new Dictionary <string, string>()); recommendation.DeploymentBundle.DotnetPublishSelfContainedBuild = true; recommendation.DeploymentBundle.DotnetPublishBuildConfiguration = "Release"; recommendation.DeploymentBundle.DotnetPublishAdditionalBuildArguments = "--nologo"; await _deploymentBundleHandler.CreateDotnetPublishZip(recommendation); var expectedCommand = $"dotnet publish \"{project.ProjectPath}\"" + $" -o \"{_directoryManager.CreatedDirectories.First()}\"" + " -c Release" + " --runtime linux-x64" + " --nologo" + " --self-contained true"; Assert.Equal(expectedCommand, _commandLineWrapper.CommandsToExecute.First().Command); }
public async Task IsDisplayable_OneDependency() { var projectPath = SystemIOUtilities.ResolvePath("WebAppNoDockerFile"); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, new Orchestrator.OrchestratorSession()); var recommendations = await engine.ComputeRecommendations(projectPath, new()); var beanstalkRecommendation = recommendations.First(r => r.Recipe.Id == Constants.ASPNET_CORE_BEANSTALK_RECIPE_ID); var environmentTypeOptionSetting = beanstalkRecommendation.Recipe.OptionSettings.First(optionSetting => optionSetting.Id.Equals("EnvironmentType")); var loadBalancerTypeOptionSetting = beanstalkRecommendation.Recipe.OptionSettings.First(optionSetting => optionSetting.Id.Equals("LoadBalancerType")); Assert.Equal("SingleInstance", beanstalkRecommendation.GetOptionSettingValue(environmentTypeOptionSetting)); // Before dependency isn't satisfied Assert.False(beanstalkRecommendation.IsOptionSettingDisplayable(loadBalancerTypeOptionSetting)); // Satisfy dependency environmentTypeOptionSetting.SetValueOverride("LoadBalanced"); Assert.Equal("LoadBalanced", beanstalkRecommendation.GetOptionSettingValue(environmentTypeOptionSetting)); // Verify Assert.True(beanstalkRecommendation.IsOptionSettingDisplayable(loadBalancerTypeOptionSetting)); }
public async Task ClearOptionSettingValue_String() { var interactiveServices = new TestToolInteractiveServiceImpl(new List <string> { "<reset>" }); var consoleUtilities = new ConsoleUtilities(interactiveServices); var projectPath = SystemIOUtilities.ResolvePath("WebAppNoDockerFile"); var engine = new RecommendationEngine(new[] { RecipeLocator.FindRecipeDefinitionsPath() }, new Orchestrator.OrchestratorSession()); var recommendations = await engine.ComputeRecommendations(projectPath, new Dictionary <string, string>()); var fargateRecommendation = recommendations.First(r => r.Recipe.Id == Constants.ASPNET_CORE_ASPNET_CORE_FARGATE_RECIPE_ID); var ecsServiceNameOptionSetting = fargateRecommendation.Recipe.OptionSettings.First(optionSetting => optionSetting.Id.Equals("ECSServiceName")); var originalDefaultValue = fargateRecommendation.GetOptionSettingDefaultValue <string>(ecsServiceNameOptionSetting); ecsServiceNameOptionSetting.SetValueOverride("TestService"); Assert.Equal("TestService", fargateRecommendation.GetOptionSettingValue <string>(ecsServiceNameOptionSetting)); ecsServiceNameOptionSetting.SetValueOverride(consoleUtilities.AskUserForValue("Title", "TestService", true, originalDefaultValue)); Assert.Equal(originalDefaultValue, fargateRecommendation.GetOptionSettingValue <string>(ecsServiceNameOptionSetting)); }