Ejemplo n.º 1
0
        //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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        //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);
        }
Ejemplo n.º 4
0
        //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);
        }