forked from dotnet/sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGivenThatTheUserEnablesThePerfLog.cs
More file actions
81 lines (67 loc) · 2.57 KB
/
GivenThatTheUserEnablesThePerfLog.cs
File metadata and controls
81 lines (67 loc) · 2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Diagnostics.Tracing;
namespace Microsoft.DotNet.Tests
{
public class GivenThatTheUserEnablesThePerfLog : SdkTest
{
public GivenThatTheUserEnablesThePerfLog(ITestOutputHelper log) : base(log)
{
}
[Fact]
public void WhenPerfLogDisabledDotNetDoesNotWriteToThePerfLog()
{
var dir = _testAssetsManager.CreateTestDirectory();
var result = new DotnetCommand(Log, "--help")
.WithEnvironmentVariable("DOTNET_PERFLOG_DIR", dir.Path)
.Execute();
result.ExitCode.Should().Be(0);
Assert.Empty(new DirectoryInfo(dir.Path).GetFiles());
}
[Fact]
public void WhenPerfLogEnabledDotNetWritesToThePerfLog()
{
var dir = _testAssetsManager.CreateTestDirectory();
var result = new DotnetCommand(Log, "--help")
.WithEnvironmentVariable("DOTNET_CLI_PERF_LOG", "1")
.WithEnvironmentVariable("DOTNET_PERFLOG_DIR", dir.Path)
.Execute();
result.ExitCode.Should().Be(0);
DirectoryInfo logDir = new(dir.Path);
FileInfo[] logFiles = logDir.GetFiles();
Assert.NotEmpty(logFiles);
Assert.All(logFiles, f => Assert.StartsWith("perf-", f.Name));
Assert.All(logFiles, f => Assert.NotEqual(0, f.Length));
}
[Fact]
public void WhenPerfLogEnabledDotNetBuildWritesAPerfLog()
{
using (PerfLogTestEventListener listener = new())
{
int exitCode = Cli.Program.Main(new string[] { "--help" });
Assert.Equal(0, exitCode);
Assert.NotEqual(0, listener.EventCount);
}
}
}
internal sealed class PerfLogTestEventListener : EventListener
{
private const string PerfLogEventSourceName = "Microsoft-Dotnet-CLI-Performance";
public int EventCount
{
get; private set;
}
protected override void OnEventSourceCreated(EventSource eventSource)
{
if (eventSource.Name.Equals(PerfLogEventSourceName))
{
EnableEvents(eventSource, EventLevel.Verbose);
}
}
protected override void OnEventWritten(EventWrittenEventArgs eventData)
{
Assert.Equal(PerfLogEventSourceName, eventData.EventSource.Name);
EventCount++;
}
}
}