public ScenarioBuilder(Guid correlationId, ProcessManagerFactory factory, string name) { _correlationId = correlationId; _processId = typeof(TProcess).Name + "-" + correlationId; _name = name; _factory = factory ?? ((id, cid) => (TProcess)Activator.CreateInstance(typeof(TProcess), id, cid)); _given = new object[0]; _expectedCommands = new object[0]; _expectedEvents = new object[0]; _runGiven = process => _given.ForEach(process.ApplyEvent); _runWhen = process => { process.ClearUncommittedEvents(); process.ClearUndispatchedCommands(); process.ApplyEvent(_when); }; _checkCommands = _ => { }; _checkEvents = _ => { }; _runThen = process => { _checkCommands(process); _checkEvents(process); }; _timer = new Stopwatch(); }
protected override async Task <ExitCode> InvokeInternal(ILogger logger) { var processManager = ProcessManagerFactory.CreateProcessManager(); var engineBinary = _arguments.Engine switch { JavaScriptEngine.V8 => "v8", JavaScriptEngine.JavaScriptCore => "jsc", JavaScriptEngine.SpiderMonkey => "sm", _ => throw new ArgumentException() }; var engineArgs = new List <string>(); if (_arguments.Engine == JavaScriptEngine.V8) { // v8 needs this flag to enable WASM support engineArgs.Add("--expose_wasm"); } engineArgs.AddRange(_arguments.EngineArgs); engineArgs.Add(_arguments.JSFile); if (_arguments.Engine == JavaScriptEngine.V8 || _arguments.Engine == JavaScriptEngine.JavaScriptCore) { // v8/jsc want arguments to the script separated by "--", others don't engineArgs.Add("--"); } engineArgs.AddRange(PassThroughArguments); var xmlResultsFilePath = Path.Combine(_arguments.OutputDirectory, "testResults.xml"); File.Delete(xmlResultsFilePath); try { var logProcessor = new WasmTestMessagesProcessor(xmlResultsFilePath, logger); var result = await processManager.ExecuteCommandAsync( engineBinary, engineArgs, log : new CallbackLog(m => logger.LogInformation(m)), stdoutLog : new CallbackLog(logProcessor.Invoke) { Timestamp = false /* we need the plain XML string so disable timestamp */ }, stderrLog : new CallbackLog(m => logger.LogError(m)), _arguments.Timeout); return(result.Succeeded ? ExitCode.SUCCESS : (result.TimedOut ? ExitCode.TIMED_OUT : ExitCode.GENERAL_FAILURE)); } catch (Win32Exception e) when(e.NativeErrorCode == 2) { logger.LogCritical($"The engine binary `{engineBinary}` was not found"); return(ExitCode.APP_LAUNCH_FAILURE); } } }
public async Task ProcessShouldBeKilled() { var pm = ProcessManagerFactory.CreateProcessManager(); var process = new Process(); process.StartInfo.FileName = "ping"; process.StartInfo.Arguments = "-t 127.0.0.1"; var log = new MemoryLog(); var result = await pm.RunAsync(process, log, TimeSpan.FromSeconds(3)); Assert.True(result.TimedOut); }
public void ProcessWrapperFactoryCtorTest() { IProcessManagerFactory factory = null; try { factory = new ProcessManagerFactory(null); Assert.True(false, "Should fail on previous statement"); } catch (Exception ex) { Assert.IsType(typeof(ArgumentNullException), ex); Assert.Equal("Value cannot be null.\r\nParameter name: processProxy", ex.Message); } var proxy = new Mock <IProcessProxy>(); factory = new ProcessManagerFactory(proxy.Object); Assert.NotNull(factory); }
public void ProcessWrapperFactoryCreateTest() { var proxy = new Mock <IProcessProxy>(); ProcessStartInfo startInfo = null; var process = new Mock <IProcessWrapper>(); proxy.Setup(s => s.Start(It.IsAny <ProcessStartInfo>())) .Callback <ProcessStartInfo>(c => startInfo = c) .Returns(() => process.Object); IProcessManagerFactory factory = new ProcessManagerFactory(proxy.Object); var wrapper = factory.Create("bot.exe", "args"); Assert.NotNull(wrapper); Assert.NotNull(startInfo); Assert.Equal("bot.exe", startInfo.FileName); Assert.Equal("args", startInfo.Arguments); Assert.Equal(true, startInfo.RedirectStandardInput); Assert.Equal(true, startInfo.RedirectStandardOutput); Assert.Equal(false, startInfo.UseShellExecute); Assert.Equal(true, startInfo.CreateNoWindow); proxy.VerifyAll(); process.VerifyAll(); }
private IMediaInfo SetupInfo() { IProcessManagerFactory Factory = new ProcessManagerFactory(Properties.Settings.Default.FFmpegPath); return(new MediaInfo(Factory)); }