public void AddRun(TestCase testCase, Benchmark benchmark, string text) {
            if (string.IsNullOrEmpty(text)) return;
            var runEntry = new RunEntry() { TestCase = testCase, Benchmark = benchmark, RawLog = text };
            RunEntries.Add(runEntry);

            ParseInfolog(text, runEntry);
            if (testCase.BenchmarkArg > 0) ParseBenchmarkData(runEntry);
        }
 void TestedBatchOnRunCompleted(TestCase run, Benchmark benchmark, string arg3) {
     var stringToAppend = string.Format("== RUN {0} {1} ==\n", run, benchmark) + arg3;
                 InvokeIfNeeded(() => tbResults.AppendText(stringToAppend));
 }
 void btnAddTest_Click(object sender, EventArgs e) {
     var testCase = new TestCase(tbEngine.Text,
                                 tbGame.Text,
                                 tbMap.Text,
                                 cbConfigs.SelectedItem as Config,
                                 cmbScripts.SelectedItem as StartScript);
     int arg;
     int.TryParse(tbBenchmarkArg.Text, out arg);
     testCase.BenchmarkArg = arg;
     var ret = testCase.Validate(springDownloader);
     if (ret != null) MessageBox.Show(ret);
     else lbTestCases.Items.Add(testCase);
 }
        /// <summary>
        /// Modify modinfo to add or change dependencies. If mod already depends on game which starts with same word as testcase game, replace it, otherwise append it
        /// </summary>
        public void ModifyModInfo(TestCase testCase) {
            var orgFile = Path.Combine(BenchmarkPath, "modinfo.lua.org");
            var modFile = Path.Combine(BenchmarkPath, "modinfo.lua");
            File.Copy(modFile, orgFile, true);


            var deps = GetDependencies();

            if (!string.IsNullOrEmpty(testCase.Game)) {
                var firstWord = testCase.Game.Split(' ').First();
                var toReplace = deps.FirstOrDefault(x => x.StartsWith(firstWord + " "));
                if (toReplace != null) deps.Remove(toReplace);
                deps.Add(testCase.Game);
            }

            File.WriteAllText(Path.Combine(BenchmarkPath, "modinfo.lua"),
                              Regex.Replace(GetOrgModInfo(),
                                            "(depend[ ]*=[ ]*{)([^}]*)(})",
                                            m => m.Groups[1].Value + string.Join(",", deps.Select(x => string.Format("'{0}'", x))) + m.Groups[3],RegexOptions.IgnoreCase));
        }
        public string Start(SpringPaths paths, TestCase test, Benchmark benchmark) {
            LogLines = new StringBuilder();

            //paths.SetEnginePath(paths.GetEngineFolderByVersion(test.Engine));

            var optirun = Environment.GetEnvironmentVariable("OPTIRUN");
            
            process = new Process();
            process.StartInfo.CreateNoWindow = true;
            List<string> arg = new List<string>();

            if (string.IsNullOrEmpty(optirun)) {
                process.StartInfo.FileName = paths.GetSpringExecutablePath(test.Engine);
            }
            else {
                Trace.TraceInformation("Using optirun {0} to start the game (OPTIRUN env var defined)", optirun);
                process.StartInfo.FileName = optirun;
                arg.Add(string.Format("\"{0}\"", ( paths.GetSpringExecutablePath(test.Engine))));
            }



            process.StartInfo.WorkingDirectory = Path.GetDirectoryName(paths.GetSpringExecutablePath(test.Engine));

            arg.Add(string.Format("--config \"{0}\"", Path.Combine(test.Config.ConfigPath, "springsettings.cfg")));
            if (test.BenchmarkArg > 0) arg.Add("--benchmark " + test.BenchmarkArg);


            var dataDirList = new List<string>()
            {
                test.Config.ConfigPath,
                Directory.GetParent(benchmark.BenchmarkPath).Parent.FullName,
                paths.WritableDirectory,
            };
            dataDirList.AddRange(paths.DataDirectories);
            dataDirList.Add(Path.GetDirectoryName(paths.GetSpringExecutablePath(test.Engine)));

            if (Environment.OSVersion.Platform == PlatformID.Unix) dataDirList = dataDirList.Distinct().Select(x => x.Replace(" ", "\\ ")).ToList();
            else dataDirList = dataDirList.Distinct().ToList();

            var datadirs = string.Join(Environment.OSVersion.Platform == PlatformID.Unix ? ":" : ";", dataDirList);

            process.StartInfo.EnvironmentVariables["SPRING_DATADIR"] = datadirs;
            process.StartInfo.EnvironmentVariables["SPRING_ISOLATED"] = test.Config.ConfigPath;
            process.StartInfo.EnvironmentVariables["SPRING_WRITEDIR"] = test.Config.ConfigPath;

            var scriptPath = Path.GetTempFileName();
            File.WriteAllText(scriptPath, test.StartScript.GetScriptForTestCase(test, benchmark));
            arg.Add(string.Format("\"{0}\"", scriptPath));

            
            process.StartInfo.Arguments = string.Join(" ", arg);
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardError = true;

            process.ErrorDataReceived += (sender, args) =>
                {
                    LogLines.AppendLine(args.Data);
                    LineAdded(args.Data);
                };
            process.OutputDataReceived += (sender, args) =>
                {
                    LogLines.AppendLine(args.Data);
                    LineAdded(args.Data);
                };
            process.EnableRaisingEvents = true;

            try {
                process.Start();
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();

                process.WaitForExit();
            } catch (Exception ex) {
                Trace.TraceError("Error waiting for process: {0}", ex);
            }
            var lines = LogLines.ToString();

            File.Delete(scriptPath);

            return lines;
        }
 /// <summary>
 /// Gets modified startscript for starting the game
 /// </summary>
 public string GetScriptForTestCase(TestCase test, Benchmark benchmark) {
     var script = GetScript();
     script = Regex.Replace(script, "(gametype=)([^;]*)", m => m.Groups[1] + benchmark.Name, RegexOptions.IgnoreCase);
     if (!string.IsNullOrEmpty(test.Map)) script = Regex.Replace(script, "(mapname=)([^;]*)", m => m.Groups[1] + test.Map, RegexOptions.IgnoreCase);
     return script;
 }
Example #7
0
        public string Start(SpringPaths paths, TestCase test, Benchmark benchmark)
        {
            LogLines = new StringBuilder();

            paths.SetEnginePath(paths.GetEngineFolderByVersion(test.Engine));

            var optirun = Environment.GetEnvironmentVariable("OPTIRUN");

            process = new Process();
            process.StartInfo.CreateNoWindow = true;
            List <string> arg = new List <string>();

            if (string.IsNullOrEmpty(optirun))
            {
                process.StartInfo.FileName = test.UseMultithreaded ? paths.MtExecutable : paths.Executable;
            }
            else
            {
                Trace.TraceInformation("Using optirun {0} to start the game (OPTIRUN env var defined)", optirun);
                process.StartInfo.FileName = optirun;
                arg.Add(string.Format("\"{0}\"", (test.UseMultithreaded ? paths.MtExecutable : paths.Executable)));
            }



            process.StartInfo.WorkingDirectory = Path.GetDirectoryName(paths.Executable);

            arg.Add(string.Format("--config \"{0}\"", Path.Combine(test.Config.ConfigPath, "springsettings.cfg")));
            if (test.BenchmarkArg > 0)
            {
                arg.Add("--benchmark " + test.BenchmarkArg);
            }


            var dataDirList = new List <string>()
            {
                test.Config.ConfigPath,
                Directory.GetParent(benchmark.BenchmarkPath).Parent.FullName,
                paths.WritableDirectory,
            };

            dataDirList.AddRange(paths.DataDirectories);
            dataDirList.Add(Path.GetDirectoryName(paths.Executable));

            if (Environment.OSVersion.Platform == PlatformID.Unix)
            {
                dataDirList = dataDirList.Distinct().Select(x => x.Replace(" ", "\\ ")).ToList();
            }
            else
            {
                dataDirList = dataDirList.Distinct().ToList();
            }

            var datadirs = string.Join(Environment.OSVersion.Platform == PlatformID.Unix ? ":" : ";", dataDirList);

            process.StartInfo.EnvironmentVariables["SPRING_DATADIR"]  = datadirs;
            process.StartInfo.EnvironmentVariables["SPRING_ISOLATED"] = test.Config.ConfigPath;
            process.StartInfo.EnvironmentVariables["SPRING_WRITEDIR"] = test.Config.ConfigPath;

            var scriptPath = Path.GetTempFileName();

            File.WriteAllText(scriptPath, test.StartScript.GetScriptForTestCase(test, benchmark));
            arg.Add(string.Format("\"{0}\"", scriptPath));


            process.StartInfo.Arguments              = string.Join(" ", arg);
            process.StartInfo.UseShellExecute        = false;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardError  = true;

            process.ErrorDataReceived += (sender, args) =>
            {
                LogLines.AppendLine(args.Data);
                LineAdded(args.Data);
            };
            process.OutputDataReceived += (sender, args) =>
            {
                LogLines.AppendLine(args.Data);
                LineAdded(args.Data);
            };
            process.EnableRaisingEvents = true;

            try {
                process.Start();
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();

                process.WaitForExit();
            } catch (Exception ex) {
                Trace.TraceError("Error waiting for process: {0}", ex);
            }
            var lines = LogLines.ToString();

            File.Delete(scriptPath);

            return(lines);
        }