Skip to content

Commit a25783f

Browse files
AaronRobinsonMSFTtmds
authored andcommitted
Reduce process count for ETW manifest test (dotnet#96950)
* Reduce process count for ETW manifest test Remove the launch process and instead run within the test host. Launch the ETW session prior to launching the process - removes the race window between ETW session spin up and process start.
1 parent f365173 commit a25783f

File tree

1 file changed

+73
-78
lines changed

1 file changed

+73
-78
lines changed

src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/TestsManifestGeneration.Etw.cs

Lines changed: 73 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -33,117 +33,112 @@ public partial class TestsManifestGeneration
3333
[SkipOnCoreClr("Test should only be run in non-stress modes", ~RuntimeTestModes.RegularRun)]
3434
public void Test_EventSource_EtwManifestGeneration()
3535
{
36-
RemoteInvokeOptions options = new RemoteInvokeOptions { TimeOut = 300_000 /* ms */ };
37-
RemoteExecutor.Invoke(() =>
38-
{
39-
RemoteInvokeOptions localOptions = new RemoteInvokeOptions { TimeOut = 300_000 /* ms */ };
40-
using (RemoteInvokeHandle handle = RemoteExecutor.Invoke(() =>
41-
{
42-
var es = new SimpleEventSource();
43-
for (var i = 0; i < 100; i++)
44-
{
45-
es.WriteSimpleInt(i);
46-
Thread.Sleep(100);
47-
}
48-
}, localOptions))
49-
{
50-
var etlFileName = @"file.etl";
51-
var tracesession = new TraceEventSession("testname", etlFileName);
36+
var pid = Process.GetCurrentProcess().Id;
37+
var etlFileName = $"file.{pid}.etl";
38+
var tracesession = new TraceEventSession("testname", etlFileName);
5239

53-
tracesession.EnableProvider("SimpleEventSource");
40+
tracesession.EnableProvider(nameof(SimpleEventSource));
5441

55-
Thread.Sleep(TimeSpan.FromSeconds(5));
42+
RemoteInvokeOptions localOptions = new RemoteInvokeOptions { TimeOut = 300_000 /* ms */ };
43+
using (RemoteInvokeHandle handle = RemoteExecutor.Invoke(() =>
44+
{
45+
var es = new SimpleEventSource();
46+
for (var i = 0; i < 100; i++)
47+
{
48+
es.WriteSimpleInt(i);
49+
Thread.Sleep(100);
50+
}
51+
}, localOptions))
52+
{
53+
Thread.Sleep(TimeSpan.FromSeconds(5));
5654

57-
tracesession.Flush();
55+
tracesession.Flush();
5856

59-
tracesession.DisableProvider("SimpleEventSource");
60-
tracesession.Dispose();
57+
tracesession.DisableProvider(nameof(SimpleEventSource));
58+
tracesession.Dispose();
6159

62-
var manifestExists = false;
63-
var max_retries = 50;
60+
var manifestExists = false;
61+
var max_retries = 50;
6462

65-
for (int i = 0; i < max_retries; i++)
63+
for (int i = 0; i < max_retries; i++)
64+
{
65+
if (VerifyManifestAndRemoveFile(etlFileName))
6666
{
67-
if (VerifyManifestAndRemoveFile(etlFileName))
68-
{
69-
manifestExists = true;
70-
break;
71-
}
72-
Thread.Sleep(1000);
67+
manifestExists = true;
68+
break;
7369
}
74-
Assert.True(manifestExists);
70+
Thread.Sleep(1000);
7571
}
76-
}, options).Dispose();
72+
Assert.True(manifestExists);
73+
}
7774
}
7875

7976
[ConditionalFact(nameof(IsProcessElevatedAndNotWindowsNanoServerAndRemoteExecutorSupported))]
8077
[SkipOnCoreClr("Test should only be run in non-stress modes", ~RuntimeTestModes.RegularRun)]
8178
public void Test_EventSource_EtwManifestGenerationRollover()
8279
{
83-
RemoteExecutor.Invoke(() =>
84-
{
85-
using (RemoteInvokeHandle handle = RemoteExecutor.Invoke(() =>
86-
{
87-
var es = new SimpleEventSource();
88-
for (var i = 0; i < 100; i++)
89-
{
90-
es.WriteSimpleInt(i);
91-
Thread.Sleep(100);
92-
}
93-
}))
94-
{
95-
var initialFileName = @"initialFile.etl";
96-
var rolloverFileName = @"rolloverFile.etl";
97-
var tracesession = new TraceEventSession("testname", initialFileName);
98-
var max_retries = 50;
80+
var pid = Process.GetCurrentProcess().Id;
81+
var initialFileName = $"initialFile.{pid}.etl";
82+
var rolloverFileName = $"rolloverFile.{pid}.etl";
83+
var tracesession = new TraceEventSession("testname", initialFileName);
9984

100-
tracesession.EnableProvider("SimpleEventSource");
85+
tracesession.EnableProvider(nameof(SimpleEventSource));
10186

102-
Thread.Sleep(TimeSpan.FromSeconds(5));
87+
using (RemoteInvokeHandle handle = RemoteExecutor.Invoke(() =>
88+
{
89+
var es = new SimpleEventSource();
90+
for (var i = 0; i < 100; i++)
91+
{
92+
es.WriteSimpleInt(i);
93+
Thread.Sleep(100);
94+
}
95+
}))
96+
{
97+
Thread.Sleep(TimeSpan.FromSeconds(5));
10398

104-
tracesession.Flush();
99+
tracesession.Flush();
105100

106-
tracesession.SetFileName(rolloverFileName);
101+
tracesession.SetFileName(rolloverFileName);
107102

108-
Thread.Sleep(TimeSpan.FromSeconds(5));
103+
Thread.Sleep(TimeSpan.FromSeconds(5));
109104

110-
tracesession.Flush();
105+
tracesession.Flush();
111106

112-
tracesession.DisableProvider("SimpleEventSource");
113-
tracesession.Dispose();
107+
tracesession.DisableProvider(nameof(SimpleEventSource));
108+
tracesession.Dispose();
114109

115-
bool initialFileHasManifest = false;
116-
bool rollOverFileHasManifest = false;
110+
bool initialFileHasManifest = false;
111+
bool rollOverFileHasManifest = false;
117112

118-
for (int i = 0; i < max_retries; i++)
113+
var max_retries = 50;
114+
for (int i = 0; i < max_retries; i++)
115+
{
116+
if (VerifyManifestAndRemoveFile(initialFileName))
119117
{
120-
if (VerifyManifestAndRemoveFile(initialFileName))
121-
{
122-
initialFileHasManifest = true;
123-
break;
124-
}
125-
Thread.Sleep(1000);
118+
initialFileHasManifest = true;
119+
break;
126120
}
127-
for (int i = 0; i < max_retries; i++)
121+
Thread.Sleep(1000);
122+
}
123+
for (int i = 0; i < max_retries; i++)
124+
{
125+
if (VerifyManifestAndRemoveFile(rolloverFileName))
128126
{
129-
if (VerifyManifestAndRemoveFile(rolloverFileName))
130-
{
131-
rollOverFileHasManifest = true;
132-
break;
133-
}
134-
Thread.Sleep(1000);
127+
rollOverFileHasManifest = true;
128+
break;
135129
}
136-
Assert.True(initialFileHasManifest);
137-
Assert.True(rollOverFileHasManifest);
130+
Thread.Sleep(1000);
138131
}
139-
}).Dispose();
132+
Assert.True(initialFileHasManifest);
133+
Assert.True(rollOverFileHasManifest);
134+
}
140135
}
141136

142137
private bool VerifyManifestAndRemoveFile(string fileName)
143138
{
144139
Assert.True(File.Exists(fileName));
145140

146-
ETWTraceEventSource source = new ETWTraceEventSource(fileName);
141+
using var source = new ETWTraceEventSource(fileName);
147142

148143
Dictionary<string, int> providers = new Dictionary<string, int>();
149144
int eventCount = 0;
@@ -157,7 +152,7 @@ private bool VerifyManifestAndRemoveFile(string fileName)
157152
}
158153
providers[eventData.ProviderName]++;
159154

160-
if (eventData.ProviderName.Equals("SimpleEventSource") && eventData.EventName.Equals("ManifestData"))
155+
if (eventData.ProviderName.Equals(nameof(SimpleEventSource)) && eventData.EventName.Equals("ManifestData"))
161156
{
162157
sawManifestData = true;
163158
}
@@ -167,7 +162,7 @@ private bool VerifyManifestAndRemoveFile(string fileName)
167162

168163
if (!sawManifestData)
169164
{
170-
Console.WriteLine("Did not see ManifestData event from SimpleEventSource, test will fail. Additional info:");
165+
Console.WriteLine($"Did not see ManifestData event from {nameof(SimpleEventSource)}, test will fail. Additional info:");
171166
Console.WriteLine($" file name {fileName}");
172167
Console.WriteLine($" total event count {eventCount}");
173168
Console.WriteLine($" total providers {providers.Count}");

0 commit comments

Comments
 (0)