public static Task <int> Main(string[] args) { var parser = new CommandLineBuilder() .AddCommand(ReportCommandHandler.ReportCommand()) .AddCommand(ProcessStatusCommandHandler.ProcessStatusCommand("Lists the dotnet processes that traces can be collected")) .UseDefaults() .Build(); return(parser.InvokeAsync(args)); }
public async Task ReportsStacksCorrectly(string traceeFramework) { Command reportCommand = ReportCommandHandler.ReportCommand(); var console = new TestConsole(); var parser = new Parser(reportCommand); using TestRunner runner = new TestRunner(CommonHelper.GetTraceePathWithArgs(traceeName: "StackTracee", targetFramework: traceeFramework), output); runner.Start(); // Wait for tracee to get to readkey call await Task.Delay(TimeSpan.FromSeconds(1)); await parser.InvokeAsync($"report -p {runner.Pid}", console); string report = console.Out.ToString(); output.WriteLine($"REPORT_START\n{report}REPORT_END"); Assert.True(!string.IsNullOrEmpty(report)); string[] correctStackParts = correctStack.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); string[] stackParts = report.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); int partIdx = 0; while (stackParts[partIdx].StartsWith("#") || stackParts[partIdx].StartsWith("Thread") || stackParts[partIdx].StartsWith("Found")) { partIdx++; } Assert.True(stackParts.Length - partIdx == correctStackParts.Length, $"{stackParts.Length - partIdx} != {correctStackParts.Length}"); for (int i = partIdx, j = 0; i < stackParts.Length && j < correctStackParts.Length; i++, j++) { Assert.True(correctStackParts[j] == stackParts[i], $"{correctStackParts[j]} != {stackParts[i]}"); } }