public void Exception_ShouldNotBeRethrown() { var jobServer = new Mock <IJobServer>(); jobServer.Setup(s => s.GetStatus()).Throws <HttpRequestException>(); var option = new StatusOption(() => jobServer.Object); var result = option.Run(); result.IsSuccess.Should().BeFalse("because the task should fail when the server can't be connected to"); }
public static OptionGroup CreateRootGroup(IClientFactory clientFactory, ISchedulerWaiter schedulerWaiter, IFileSystemCommands fileSystemCommands, ProcessExecutor processExecutor, IFileSystem fileSystem, ServiceStatusWaiter serviceStatusWaiter, IEnvironment environment) { var root = new OptionGroup() .WithGroup("chef", chefGroup => { const string chefProduct = "Chef"; chefGroup.WithOption(new RunChefOption(clientFactory.RestClientForChefServer, schedulerWaiter), OptionValueSpecification.ForCommand("run"), OnNode()); chefGroup.WithOption( new DownloadProductOption <IChefServer, ChefStatus>(chefProduct, clientFactory.RestClientForChefServer, schedulerWaiter), CreateDownloadVersionSpecifications()); chefGroup.WithOption(new ShowChefStatusOption(clientFactory.RestClientForChefServer), OptionValueSpecification.ForCommand("status"), OnNode()); chefGroup.WithOption( new BootstrapChefRunListOption(clientFactory.RestClientForChefServer, schedulerWaiter, fileSystemCommands), OptionValueSpecification.ForCommand("bootstrap"), OptionValueSpecification.ForValue("run-list:", "the run list"), OptionValueSpecification.ForValue("config:", "the client.rb file"), OptionValueSpecification.ForValue("validator:", "the validator.pem file used to join the node"), OnNode()); chefGroup.WithOption( new BootstrapChefPolicyOption(clientFactory.RestClientForChefServer, schedulerWaiter, fileSystemCommands), OptionValueSpecification.ForCommand("bootstrap"), OptionValueSpecification.ForValue("policy:", "the policy name"), OptionValueSpecification.ForValue("group:", "the policy group"), OptionValueSpecification.ForValue("config:", "the client.rb file"), OptionValueSpecification.ForValue("validator:", "the validator.pem file used to join the node"), OnNode()); var installChefOption = new InstallOption <IChefServer, ChefStatus>(chefProduct, clientFactory.RestClientForChefServer, schedulerWaiter); chefGroup.WithOption(installChefOption, CreateInstallVersionSpecifications()); chefGroup.WithOption(installChefOption, OptionValueSpecification.ForCommand("upgrade"), OptionValueSpecification.ForVersion(), OnNode()); chefGroup.WithOption( ChangeChefRunningStatusOption.CreatePauseChefOption(clientFactory.RestClientForChefServer), OptionValueSpecification.ForCommand("pause"), OnNode()); chefGroup.WithOption( ChangeChefRunningStatusOption.CreateResumeChefOption(clientFactory.RestClientForChefServer), OptionValueSpecification.ForCommand("resume"), OnNode()); }) .WithGroup("inspec", inspecGroup => { const string inspecProduct = "InSpec"; inspecGroup.WithOption(new ShowInSpecStatusOption(clientFactory.RestClientForInspecServer), OptionValueSpecification.ForCommand("status"), OnNode()); inspecGroup.WithOption( new InstallOption <IProductServer <ProductStatus>, ProductStatus>(inspecProduct, clientFactory.RestClientForInspecServer, schedulerWaiter), CreateInstallVersionSpecifications()); inspecGroup.WithOption( new DownloadProductOption <IProductServer <ProductStatus>, ProductStatus>(inspecProduct, clientFactory.RestClientForInspecServer, schedulerWaiter), CreateDownloadVersionSpecifications()); }) .WithGroup("server", serverGroup => { serverGroup.WithDefaultOption(new ServerInteractiveOption()); serverGroup.WithOption(new ServerWindowsServiceOption(), "--run-as-service"); }) .WithGroup("service", serviceGroup => { serviceGroup.WithOption(new RegisterServerWindowsServiceOption(), "register"); serviceGroup.WithOption(new UnregisterServerWindowsServiceOption(), "unregister"); serviceGroup.WithOption(ChangeStateForCafeWindowsServiceOption.StartCafeWindowsServiceOption( processExecutor, fileSystem, serviceStatusWaiter), "start"); serviceGroup.WithOption(ChangeStateForCafeWindowsServiceOption.StopCafeWindowsServiceOption( processExecutor, fileSystem, serviceStatusWaiter), "stop"); serviceGroup.WithOption(new CafeWindowsServiceStatusOption(processExecutor, fileSystem), "status"); }) .WithGroup("job", statusGroup => { var statusOption = new StatusOption(clientFactory.RestClientForJobServer); statusGroup.WithDefaultOption(statusOption); statusGroup.WithOption(statusOption, OptionValueSpecification.ForCommand("status"), OnNode()); statusGroup.WithOption(new JobRunStatusOption(clientFactory.RestClientForJobServer), OptionValueSpecification.ForCommand("status"), OptionValueSpecification.ForValue("id:", "job run id"), OnNode()); }) .WithOption(new InitOption(AssemblyDirectory, environment), "init"); var helpOption = new HelpOption(root); root.WithOption(helpOption, "help"); root.WithDefaultOption(helpOption); return(root); }
public static OptionGroup CreateRootGroup(IClientFactory clientFactory, ISchedulerWaiter schedulerWaiter, IFileSystemCommands fileSystemCommands, ProcessExecutor processExecutor, IFileSystem fileSystem, ServiceStatusWaiter serviceStatusWaiter, IEnvironment environment) { var root = new OptionGroup() .WithGroup("chef", chefGroup => { const string chefProduct = "Chef"; Func <IChefServer> restClientForChefServerFactory = clientFactory.RestClientForChefServer; chefGroup.WithOption(new RunChefOption(restClientForChefServerFactory, schedulerWaiter), OptionValueSpecification.ForCommand("run"), OnNode()); chefGroup.WithOption( new DownloadProductOption <IChefServer, ChefStatus>(chefProduct, restClientForChefServerFactory, schedulerWaiter), CreateDownloadVersionSpecifications()); chefGroup.WithOption(new ShowChefStatusOption(restClientForChefServerFactory), OptionValueSpecification.ForCommand("status"), OnNode()); chefGroup.WithOption( new BootstrapChefRunListOption(restClientForChefServerFactory, schedulerWaiter, fileSystemCommands), OptionValueSpecification.ForCommand("bootstrap"), OptionValueSpecification.ForValue("run-list:", "the run list"), OptionValueSpecification.ForValue("config:", "the client.rb file"), OptionValueSpecification.ForValue("validator:", "the validator.pem file used to join the node"), OnNode()); chefGroup.WithOption( new BootstrapChefPolicyOption(restClientForChefServerFactory, schedulerWaiter, fileSystemCommands), OptionValueSpecification.ForCommand("bootstrap"), OptionValueSpecification.ForValue("policy:", "the policy name"), OptionValueSpecification.ForValue("group:", "the policy group"), OptionValueSpecification.ForValue("config:", "the client.rb file"), OptionValueSpecification.ForValue("validator:", "the validator.pem file used to join the node"), OnNode()); var installChefOption = new InstallOption <IChefServer, ChefStatus>(chefProduct, restClientForChefServerFactory, schedulerWaiter); chefGroup.WithOption(installChefOption, CreateInstallVersionSpecifications()); chefGroup.WithOption(installChefOption, OptionValueSpecification.ForCommand("upgrade"), OptionValueSpecification.ForVersion(), OnNode(), ReturnImmediatelyOrDelayed()); chefGroup.WithOption( ChangeChefRunningStatusOption.CreatePauseChefOption(restClientForChefServerFactory), OptionValueSpecification.ForCommand("pause"), OnNode()); chefGroup.WithOption( ChangeChefRunningStatusOption.CreateResumeChefOption(restClientForChefServerFactory), OptionValueSpecification.ForCommand("resume"), OnNode()); chefGroup.WithOption( new CheckProductVersionOption("chef", clientFactory.GenericRestClientForChefServer), OptionValueSpecification.ForCommand("version?"), OptionValueSpecification.ForVersion(), OnNode()); }) .WithGroup("inspec", inspecGroup => { const string inspecProduct = "inspec"; Func <IProductServer <ProductStatus> > productServerFactory = clientFactory.RestClientForInspecServer; AddProductOptionsTo(inspecGroup, inspecProduct, productServerFactory, schedulerWaiter); }) .WithGroup("server", serverGroup => { const string application = "cafe"; Func <IWin32Service> serviceCreator = () => new CafeServerWindowsService(); serverGroup.WithDefaultOption(new ServerInteractiveOption(application, serviceCreator)); serverGroup.WithOption(new ServerWindowsServiceOption(application, serviceCreator), "--run-as-service"); }) .WithGroup("service", serviceGroup => { ServiceOptionInitializer.AddServiceOptionsTo(serviceGroup, serviceStatusWaiter, processExecutor, fileSystem, CafeServerWindowsServiceOptions.ServiceName, CafeServerWindowsServiceOptions.ServiceDisplayName, CafeServerWindowsServiceOptions.ServiceDescription); }) .WithGroup("job", statusGroup => { var statusOption = new StatusOption(clientFactory.RestClientForJobServer); statusGroup.WithDefaultOption(statusOption); statusGroup.WithOption(statusOption, OptionValueSpecification.ForCommand("status"), OnNode()); statusGroup.WithOption(new JobRunStatusOption(clientFactory.RestClientForJobServer), OptionValueSpecification.ForCommand("status"), OptionValueSpecification.ForValue("id:", "job run id"), OnNode()); }) .WithOption(new InitOption(AssemblyDirectory, environment), "init"); AddProductOptionsTo(root, "cafe", clientFactory.RestClientForCafeProductServer, schedulerWaiter); var helpOption = new HelpOption(root); root.WithOption(helpOption, "help"); root.WithDefaultOption(helpOption); return(root); }