/// <summary> /// Start the application. /// </summary> /// <param name="args"></param> /// <returns></returns> public int Run(string[] args, bool usesShadowCopying) { ConsoleRunnerArguments consoleArgs = new ConsoleRunnerArguments(); List<string> extra = new List<string>(); OptionSet opts = new OptionSet(); opts.Add("h|?|help", "display this help screen", delegate(string v) { consoleArgs.ShowHelp = v != null; }) .Add("c|config=", "the configuration file to use (defaults to ccnet.conf)", delegate(string v) { consoleArgs.ConfigFile = v; }) .Add("r|remoting=", "turn remoting on/off (defaults to on)", delegate(string v) { consoleArgs.UseRemoting = v == "on"; }) .Add("p|project=", "the project to integrate (???)", delegate(string v) { consoleArgs.Project = v; }) .Add("v|validate", "validate the configuration file and exit", delegate(string v) { consoleArgs.ValidateConfigOnly = v != null; }) .Add("l|logging=", "turn logging on/off (defaults to on)", delegate(string v) { consoleArgs.Logging = v == "on"; }) .Add("e|errorpause=", "turn pause on error on/off (defaults to on)", delegate(string v) {consoleArgs.PauseOnError = v == "on"; }); try { extra = opts.Parse(args); } catch (OptionException e) { System.Console.WriteLine(e.Message); System.Console.WriteLine(e.StackTrace); return 1; } if(consoleArgs.ShowHelp) { DisplayHelp(opts); return 0; } try { runner = new ConsoleRunner(consoleArgs, new CruiseServerFactory()); if (!usesShadowCopying) { Log.Warning("Shadow-copying has been turned off - hot-swapping will not work!"); } runner.Run(); return 0; } catch (Exception ex) { Log.Error(ex); if (consoleArgs.PauseOnError) { System.Console.WriteLine("An unexpected error has caused the console to crash, please press any key to continue..."); System.Console.ReadKey(); } return 1; } finally { runner = null; } }
public void ShowHelp() { ConsoleRunnerArguments consoleArgs = new ConsoleRunnerArguments(); consoleArgs.UseRemoting = true; consoleArgs.ShowHelp = true; Mock mockCruiseServerFactory = new DynamicMock(typeof(ICruiseServerFactory)); mockCruiseServerFactory.ExpectNoCall("Create", typeof(bool), typeof(string)); ConsoleRunner runner = new ConsoleRunner(consoleArgs, (ICruiseServerFactory)mockCruiseServerFactory.MockInstance); runner.Run(); // FIXME: should we care for the usage text and the logging implementation? // If yes read it from the embedded resource //Assert.AreEqual(1, listener.Traces.Count); //Assert.IsTrue(listener.Traces[0].ToString().IndexOf(ConsoleRunnerArguments.Usage) > 0, "Wrong message was logged."); mockCruiseServerFactory.Verify(); }
/// <summary> /// Starts the actual application. /// </summary> /// <param name="args">The arguments for the application.</param> /// <param name="usesShadowCopying">A flag indicating whether shadow copying should be used.</param> /// <returns> /// The return code for the application. /// </returns> public int Run(string[] args, bool usesShadowCopying) { // Parse the command line arguments var webOptions = new WebApiOptions(); var consoleArgs = new ConsoleRunnerArguments(); var opts = new OptionSet(); opts.Add("h|?|help", "display this help screen", v => consoleArgs.ShowHelp = v != null) .Add("c|config=", "the configuration file to use (defaults to ccnet.conf)", v => consoleArgs.ConfigFile = v) .Add("r|remoting=", "turn remoting on/off (defaults to on)", v => consoleArgs.UseRemoting = v == "on") .Add("p|project=", "the project to integrate (???)", v => consoleArgs.Project = v) .Add("v|validate", "validate the configuration file and exit", v => consoleArgs.ValidateConfigOnly = v != null) .Add("l|logging=", "turn logging on/off (defaults to on)", v => consoleArgs.Logging = v == "on") .Add("sc|shadowCopy=", "turn shadow copying on/off (defaults to on)", v => usesShadowCopying = v == "on") .Add("e|errorpause=", "turn pause on error on/off (defaults to on)", v => consoleArgs.PauseOnError = v == "on") .Add("we|webEndPoint=", "the base endpoint for the web API (default none)", v => webOptions.BaseEndpoint = v); try { opts.Parse(args); } catch (OptionException e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); return 1; } // Display the help if (consoleArgs.ShowHelp) { DisplayHelp(opts); return 0; } ICruiseServerFactory factory = null; try { // Start the actual console runner if (webOptions.IsConfigured) { var apiFactory = new WebApiServerFactory(); apiFactory.StartWebApi(apiFactory, webOptions); factory = apiFactory; } else { factory = new CruiseServerFactory(); } runner = new ConsoleRunner(consoleArgs, factory); if (!usesShadowCopying) { Log.Warning("Shadow-copying has been turned off - hot-swapping will not work!"); } runner.Run(); return 0; } catch (Exception ex) { Log.Error(ex); if (consoleArgs.PauseOnError) { Console.WriteLine("An unexpected error has caused the console to crash"); Console.ReadKey(); } return 2; } finally { // Clean up runner = null; var disposable = factory as IDisposable; if (disposable != null) { disposable.Dispose(); } } }