//public void DestroyAgent( ITestAgent agent ) //{ // AgentRecord r = agentData[agent.Id]; // if ( r != null ) // { // if( !r.Process.HasExited ) // r.Agent.Stop(); // agentData[r.Id] = null; // } //} #endregion #region Helper Methods private Guid LaunchAgentProcess(RuntimeFramework targetRuntime, bool enableDebug, string agentArgs, bool useX86Agent) { string agentExePath = GetTestAgentExePath(targetRuntime.ClrVersion, useX86Agent); if (agentExePath == null) { throw new ArgumentException( string.Format("NUnit components for version {0} of the CLR are not installed", targetRuntime.ClrVersion.ToString()), "targetRuntime"); } log.Debug("Using nunit-agent at " + agentExePath); Process p = new Process(); p.StartInfo.UseShellExecute = false; Guid agentId = Guid.NewGuid(); string arglist = agentId.ToString() + " " + ServerUrl + " " + agentArgs; switch (targetRuntime.Runtime) { case RuntimeType.Mono: p.StartInfo.FileName = NUnitConfiguration.MonoExePath; string monoOptions = "--runtime=v" + targetRuntime.ClrVersion.ToString(3); if (enableDebug) { monoOptions += " --debug"; } p.StartInfo.Arguments = string.Format("{0} \"{1}\" {2}", monoOptions, agentExePath, arglist); break; case RuntimeType.Net: p.StartInfo.FileName = agentExePath; if (targetRuntime.ClrVersion.Build < 0) { targetRuntime = RuntimeFramework.GetBestAvailableFramework(targetRuntime); } string envVar = "v" + targetRuntime.ClrVersion.ToString(3); p.StartInfo.EnvironmentVariables["COMPLUS_Version"] = envVar; p.StartInfo.Arguments = arglist; break; default: p.StartInfo.FileName = agentExePath; p.StartInfo.Arguments = arglist; break; } //p.Exited += new EventHandler(OnProcessExit); p.Start(); log.Info("Launched Agent process {0} - see nunit-agent_{0}.log", p.Id); log.Info("Command line: \"{0}\" {1}", p.StartInfo.FileName, p.StartInfo.Arguments); agentData.Add(new AgentRecord(agentId, p, null, AgentStatus.Starting)); return(agentId); }
private Guid LaunchAgentProcess(TestPackage package) { RuntimeFramework targetRuntime = RuntimeFramework.CurrentFramework; string runtimeSetting = package.GetSetting(EnginePackageSettings.RuntimeFramework, ""); if (runtimeSetting != "") { targetRuntime = RuntimeFramework.Parse(runtimeSetting); } if (targetRuntime.Runtime == RuntimeType.Any) { targetRuntime = new RuntimeFramework(RuntimeFramework.CurrentFramework.Runtime, targetRuntime.ClrVersion); } bool useX86Agent = package.GetSetting(EnginePackageSettings.RunAsX86, false); bool debugTests = package.GetSetting(EnginePackageSettings.DebugTests, false); bool debugAgent = package.GetSetting(EnginePackageSettings.DebugAgent, false); string traceLevel = package.GetSetting(EnginePackageSettings.InternalTraceLevel, "Off"); bool loadUserProfile = package.GetSetting(EnginePackageSettings.LoadUserProfile, false); // Set options that need to be in effect before the package // is loaded by using the command line. string agentArgs = "--pid=" + Process.GetCurrentProcess().Id.ToString(); if (debugAgent) { agentArgs += " --debug-agent"; } if (traceLevel != "Off") { agentArgs += " --trace:" + traceLevel; } log.Info("Getting {0} agent for use under {1}", useX86Agent ? "x86" : "standard", targetRuntime); if (!targetRuntime.IsAvailable) { throw new ArgumentException( string.Format("The {0} framework is not available", targetRuntime), "framework"); } string agentExePath = GetTestAgentExePath(useX86Agent); if (agentExePath == null) { throw new ArgumentException( string.Format("NUnit components for version {0} of the CLR are not installed", targetRuntime.ClrVersion.ToString()), "targetRuntime"); } log.Debug("Using nunit-agent at " + agentExePath); Process p = new Process(); p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = true; Guid agentId = Guid.NewGuid(); string arglist = agentId.ToString() + " " + ServerUrl + " " + agentArgs; targetRuntime = RuntimeFramework.GetBestAvailableFramework(targetRuntime); switch (targetRuntime.Runtime) { case RuntimeType.Mono: p.StartInfo.FileName = RuntimeFramework.MonoExePath; string monoOptions = "--runtime=v" + targetRuntime.ClrVersion.ToString(3); if (debugTests || debugAgent) { monoOptions += " --debug"; } p.StartInfo.Arguments = string.Format("{0} \"{1}\" {2}", monoOptions, agentExePath, arglist); break; case RuntimeType.Net: p.StartInfo.FileName = agentExePath; // Override the COMPLUS_Version env variable, this would cause CLR meta host to run a CLR of the specific version string envVar = "v" + targetRuntime.ClrVersion.ToString(3); p.StartInfo.EnvironmentVariables["COMPLUS_Version"] = envVar; // Leave a marker that we have changed this variable, so that the agent could restore it for any code or child processes running within the agent string cpvOriginal = Environment.GetEnvironmentVariable("COMPLUS_Version"); p.StartInfo.EnvironmentVariables["TestAgency_COMPLUS_Version_Original"] = string.IsNullOrEmpty(cpvOriginal) ? "NULL" : cpvOriginal; p.StartInfo.Arguments = arglist; p.StartInfo.LoadUserProfile = loadUserProfile; break; default: p.StartInfo.FileName = agentExePath; p.StartInfo.Arguments = arglist; break; } p.Start(); log.Debug("Launched Agent process {0} - see nunit-agent_{0}.log", p.Id); log.Debug("Command line: \"{0}\" {1}", p.StartInfo.FileName, p.StartInfo.Arguments); _agentData.Add(new AgentRecord(agentId, p, null, AgentStatus.Starting)); return(agentId); }
//public void DestroyAgent( ITestAgent agent ) //{ // AgentRecord r = agentData[agent.Id]; // if ( r != null ) // { // if( !r.Process.HasExited ) // r.Agent.Stop(); // agentData[r.Id] = null; // } //} #endregion #region Helper Methods private Guid LaunchAgentProcess(TestPackage package) { string runtimeSetting = package.GetSetting(PackageSettings.RuntimeFramework, ""); RuntimeFramework targetRuntime = RuntimeFramework.Parse( runtimeSetting != "" ? runtimeSetting : ServiceContext.RuntimeFrameworkService.SelectRuntimeFramework(package)); bool useX86Agent = package.GetSetting(PackageSettings.RunAsX86, false); bool enableDebug = package.GetSetting("AgentDebug", false); bool verbose = package.GetSetting("Verbose", false); string agentArgs = string.Empty; if (enableDebug) { agentArgs += " --pause"; } if (verbose) { agentArgs += " --verbose"; } log.Info("Getting {0} agent for use under {1}", useX86Agent ? "x86" : "standard", targetRuntime); if (!targetRuntime.IsAvailable) { throw new ArgumentException( string.Format("The {0} framework is not available", targetRuntime), "framework"); } string agentExePath = GetTestAgentExePath(targetRuntime.ClrVersion, useX86Agent); if (agentExePath == null) { throw new ArgumentException( string.Format("NUnit components for version {0} of the CLR are not installed", targetRuntime.ClrVersion.ToString()), "targetRuntime"); } log.Debug("Using nunit-agent at " + agentExePath); Process p = new Process(); p.StartInfo.UseShellExecute = false; Guid agentId = Guid.NewGuid(); string arglist = agentId.ToString() + " " + ServerUrl + " " + agentArgs; switch (targetRuntime.Runtime) { case RuntimeType.Mono: p.StartInfo.FileName = NUnitConfiguration.MonoExePath; string monoOptions = "--runtime=v" + targetRuntime.ClrVersion.ToString(3); if (enableDebug) { monoOptions += " --debug"; } p.StartInfo.Arguments = string.Format("{0} \"{1}\" {2}", monoOptions, agentExePath, arglist); break; case RuntimeType.Net: p.StartInfo.FileName = agentExePath; if (targetRuntime.ClrVersion.Build < 0) { targetRuntime = RuntimeFramework.GetBestAvailableFramework(targetRuntime); } string envVar = "v" + targetRuntime.ClrVersion.ToString(3); p.StartInfo.EnvironmentVariables["COMPLUS_Version"] = envVar; p.StartInfo.Arguments = arglist; break; default: p.StartInfo.FileName = agentExePath; p.StartInfo.Arguments = arglist; break; } //p.Exited += new EventHandler(OnProcessExit); p.Start(); log.Info("Launched Agent process {0} - see nunit-agent_{0}.log", p.Id); log.Info("Command line: \"{0}\" {1}", p.StartInfo.FileName, p.StartInfo.Arguments); agentData.Add(new AgentRecord(agentId, p, null, AgentStatus.Starting)); return(agentId); }
//public void DestroyAgent( ITestAgent agent ) //{ // AgentRecord r = agentData[agent.Id]; // if ( r != null ) // { // if( !r.Process.HasExited ) // r.Agent.Stop(); // agentData[r.Id] = null; // } //} #endregion #region Helper Methods private Guid LaunchAgentProcess(TestPackage package) { RuntimeFramework targetRuntime = RuntimeFramework.CurrentFramework; string runtimeSetting = package.GetSetting(PackageSettings.RuntimeFramework, ""); if (runtimeSetting != "") { targetRuntime = RuntimeFramework.Parse(runtimeSetting); } if (targetRuntime.Runtime == RuntimeType.Any) { targetRuntime = new RuntimeFramework(RuntimeFramework.CurrentFramework.Runtime, targetRuntime.ClrVersion); } bool useX86Agent = package.GetSetting(PackageSettings.RunAsX86, false); bool debugTests = package.GetSetting(PackageSettings.DebugTests, false); bool debugAgent = package.GetSetting(PackageSettings.DebugAgent, false); string traceLevel = package.GetSetting(PackageSettings.InternalTraceLevel, "Off"); // Set options that need to be in effect before the package // is loaded by using the command line. string agentArgs = string.Empty; if (debugAgent) { agentArgs += " --debug-agent"; } if (traceLevel != "Off") { agentArgs += " --trace:" + traceLevel; } log.Info("Getting {0} agent for use under {1}", useX86Agent ? "x86" : "standard", targetRuntime); if (!targetRuntime.IsAvailable) { throw new ArgumentException( string.Format("The {0} framework is not available", targetRuntime), "framework"); } string agentExePath = GetTestAgentExePath(targetRuntime.ClrVersion, useX86Agent); if (agentExePath == null) { throw new ArgumentException( string.Format("NUnit components for version {0} of the CLR are not installed", targetRuntime.ClrVersion.ToString()), "targetRuntime"); } log.Debug("Using nunit-agent at " + agentExePath); Process p = new Process(); p.StartInfo.UseShellExecute = false; Guid agentId = Guid.NewGuid(); string arglist = agentId.ToString() + " " + ServerUrl + " " + agentArgs; if (targetRuntime.ClrVersion.Build < 0) { targetRuntime = RuntimeFramework.GetBestAvailableFramework(targetRuntime); } switch (targetRuntime.Runtime) { case RuntimeType.Mono: p.StartInfo.FileName = NUnitConfiguration.MonoExePath; string monoOptions = "--runtime=v" + targetRuntime.ClrVersion.ToString(3); if (debugTests || debugAgent) { monoOptions += " --debug"; } p.StartInfo.Arguments = string.Format("{0} \"{1}\" {2}", monoOptions, agentExePath, arglist); break; case RuntimeType.Net: p.StartInfo.FileName = agentExePath; string envVar = "v" + targetRuntime.ClrVersion.ToString(3); p.StartInfo.EnvironmentVariables["COMPLUS_Version"] = envVar; p.StartInfo.Arguments = arglist; break; default: p.StartInfo.FileName = agentExePath; p.StartInfo.Arguments = arglist; break; } //p.Exited += new EventHandler(OnProcessExit); p.Start(); log.Info("Launched Agent process {0} - see nunit-agent_{0}.log", p.Id); log.Info("Command line: \"{0}\" {1}", p.StartInfo.FileName, p.StartInfo.Arguments); _agentData.Add(new AgentRecord(agentId, p, null, AgentStatus.Starting)); return(agentId); }