private static int RunProcess(string cwd, string tool, string arguments, Output output, string writeBatchFile = null) { ProcessStartInfo i = new ProcessStartInfo(tool, arguments); output.WriteLine("Running '{0}'", i.FileName); output.WriteLine(" {0}", i.Arguments); i.RedirectStandardOutput = true; i.RedirectStandardError = true; i.UseShellExecute = false; i.CreateNoWindow = true; i.WorkingDirectory = cwd; i.ErrorDialog = false; if (writeBatchFile != null) { var file = new StreamWriter(Path.Combine(cwd, writeBatchFile + ".bat")); file.WriteLine("\"{0}\" {1} %1 %2 %3 %4 %5", i.FileName, i.Arguments); file.Close(); } using (Process p = Process.Start(i)) { p.OutputDataReceived += output.OutputDataReceivedEventHandler; p.ErrorDataReceived += output.ErrDataReceivedEventHandler; p.BeginOutputReadLine(); p.BeginErrorReadLine(); Assert.True(p.WaitForExit(200000), string.Format("{0} timed out", i.FileName)); if (p.ExitCode != 0) { Assert.Equal(0, p.ExitCode); } return p.ExitCode; } }
internal static void Clousot1Slicing(string absoluteSourceDir, string absoluteBinary, Options options, Output output) { var referencedir = options.MakeAbsolute(Path.Combine(ReferenceDirRoot, options.BuildFramework)); var contractreferencedir = options.MakeAbsolute(Path.Combine(ContractReferenceDirRoot, options.ContractFramework)); var absoluteBinaryDir = Path.GetDirectoryName(absoluteBinary); var absoluteSource = absoluteBinary; var libPathsString = FormLibPaths(contractreferencedir, options) + " /libpaths:."; var args = String.Format("{0} -cci1 /regression /define:cci1only;clousot1 -framework:{4} -libpaths:{2} {3} {1}", options.ClousotOptions, absoluteSource, referencedir, libPathsString, options.Framework); if (options.Fast || System.Diagnostics.Debugger.IsAttached) { output.WriteLine("Calling NewCCI2Driver.Main with: {0}", args); // Use output to avoid Clousot from closing the Console Assert.AreEqual(0, Microsoft.Research.CodeAnalysis.NewCCI2Driver.Main(args.Split(' '), output)); } else RunProcess(absoluteBinaryDir, options.GetFullExecutablePath(Clousot2SlicingExe), args, output); }
internal static void Clousot(string absoluteSourceDir, string absoluteBinary, Options options, string testName, int testindex, Output output) { var referencedir = options.MakeAbsolute(Path.Combine(ReferenceDirRoot, options.BuildFramework)); var contractreferencedir = options.MakeAbsolute(Path.Combine(ContractReferenceDirRoot, options.ContractFramework)); var absoluteBinaryDir = Path.GetDirectoryName(absoluteBinary); var absoluteSource = absoluteBinary; var libPathsString = FormLibPaths(contractreferencedir, options); var args = string.Format("{0} /regression /define:cci1only;clousot1 -framework:{4} -libpaths:{2} {3} {1}", options.ClousotOptions, absoluteSource, referencedir, libPathsString, options.Framework); WriteRSPFile(absoluteBinaryDir, testName, args); if (options.Fast || Debugger.IsAttached) { output.WriteLine("Calling CCI1Driver.Main with: {0}", args); // Use output to avoid Clousot from closing the Console Assert.Equal(0, Microsoft.Research.CodeAnalysis.CCI1Driver.Main(args.Split(' '), output)); } else { RunProcess(absoluteBinaryDir, options.GetFullExecutablePath(ClousotExe), args, output, testName); } }
private static Process StartServiceProcess(string cwd, string tool, string arguments, Output output, string writeBatchFile = null) { ProcessStartInfo i = new ProcessStartInfo(tool, arguments); output.WriteLine("Running '{0}'", i.FileName); output.WriteLine(" {0}", i.Arguments); i.RedirectStandardInput = true; i.RedirectStandardOutput = true; i.RedirectStandardError = true; i.UseShellExecute = false; i.CreateNoWindow = true; i.WorkingDirectory = cwd; i.ErrorDialog = false; if (writeBatchFile != null) { var file = new StreamWriter(Path.Combine(cwd, writeBatchFile + ".bat")); file.WriteLine("\"{0}\" {1} %1 %2 %3 %4 %5", i.FileName, i.Arguments); file.Close(); } var p = Process.Start(i); p.OutputDataReceived += output.OutputDataReceivedEventHandler; p.ErrorDataReceived += output.ErrDataReceivedEventHandler; p.BeginOutputReadLine(); p.BeginErrorReadLine(); Assert.IsFalse(p.WaitForExit(1000), "{0} exited too quickly", i.FileName); return p; }