Skip to content

Commit cb5ccf7

Browse files
committed
Fix more failures
- Move type info to UnitTestsCommon - Handle registered action options in ActionDependencyAnalyzer
1 parent c3ef7e3 commit cb5ccf7

16 files changed

+1280
-1837
lines changed

src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTestCommon/TestHostHelper.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ public static IHost CreateHost(
127127
services.AddSingleton<IMetricsOperationFactory, MetricsOperationFactory>();
128128
services.AddSingleton<ITraceOperationFactory, TraceOperationFactory>();
129129
services.AddSingleton<IGCDumpOperationFactory, GCDumpOperationFactory>();
130+
TestValidatableTypes.AddValidation(services);
130131
servicesCallback?.Invoke(services);
131132
})
132133
.Build();

src/Tests/CollectionRuleActions.UnitTests/TestValidatableType.cs renamed to src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTestCommon/TestValidatableType.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
using Microsoft.AspNetCore.Http.Validation;
55
using Microsoft.AspNetCore.Http.Validation.Generated;
66
using Microsoft.Extensions.DependencyInjection;
7+
using Microsoft.Diagnostics.Tools.Monitor;
78
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options;
89
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Actions;
910
using Microsoft.Diagnostics.Monitoring.WebApi;
1011
using Microsoft.Diagnostics.Tools.Monitor.Egress.FileSystem;
12+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Triggers;
1113

12-
namespace Microsoft.Diagnostics.Tools.Monitor
14+
namespace Microsoft.Diagnostics.Monitoring.TestCommon
1315
{
1416
// The Validation source generator doesn't run for libraries that don't call AddValidation,
1517
// so we can't generate IValidatableInfo by using [ValidatableType] directly on types defined
@@ -34,6 +36,8 @@ internal sealed class TestValidatableTypes
3436

3537
public required CollectLiveMetricsOptions CollectLiveMetricsOptions { get; init; }
3638

39+
public required CollectStacksOptions CollectStacksOptions { get; init; }
40+
3741
public required RootOptions RootOptions { get; init; }
3842

3943
public required FileSystemEgressProviderOptions FileSystemEgressProviderOptions { get; init; }
@@ -42,6 +46,17 @@ internal sealed class TestValidatableTypes
4246

4347
public required LoadProfilerOptions LoadProfilerOptions { get; init; }
4448

49+
public required CollectExceptionsOptions CollectExceptionsOptions { get; init; }
50+
51+
// Triggers...
52+
public required AspNetRequestDurationOptions AspNetRequestDurationOptions { get; init; }
53+
public required AspNetRequestCountOptions AspNetRequestCountOptions { get; init; }
54+
public required AspNetResponseStatusOptions AspNetResponseStatusOptions { get; init; }
55+
56+
// TODO: only one resolver per project? Generate this for tests, for now. Maybe want to separate this one out
57+
// by test later.
58+
public required PassThroughOptions PassThroughOptions { get; init; }
59+
4560
public static void AddValidation(IServiceCollection services)
4661
{
4762
GeneratedServiceCollectionExtensions.AddValidation(services);

src/Tests/CollectionRuleActions.UnitTests/ValidatableInfoResolver.cs renamed to src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTestCommon/ValidatableInfoResolver.cs

Lines changed: 311 additions & 77 deletions
Large diffs are not rendered by default.

src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/ActionDependencyAnalyzerTests.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
136136
}, serviceCollection =>
137137
{
138138
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
139+
TestValidatableTypes.AddValidation(serviceCollection);
139140
});
140141
}
141142

@@ -157,6 +158,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
157158
CollectionRuleOptions ruleOptions = host.Services.GetRequiredService<IOptionsMonitor<CollectionRuleOptions>>().Get(DefaultRuleName);
158159
ILogger<CollectionRuleService> logger = host.Services.GetRequiredService<ILogger<CollectionRuleService>>();
159160
TimeProvider timeProvider = host.Services.GetRequiredService<TimeProvider>();
161+
ICollectionRuleActionOperations actionOperations = host.Services.GetRequiredService<ICollectionRuleActionOperations>();
160162

161163
const string processName = "actionProcess";
162164
const int processId = 123;
@@ -165,7 +167,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
165167
Guid instanceId = Guid.NewGuid();
166168
CollectionRuleContext context = new(DefaultRuleName, ruleOptions, new TestProcessInfo(instanceId, processId: processId, commandLine: commandLine), HostInfo.GetCurrent(timeProvider), logger);
167169

168-
ActionOptionsDependencyAnalyzer analyzer = ActionOptionsDependencyAnalyzer.Create(context);
170+
ActionOptionsDependencyAnalyzer analyzer = ActionOptionsDependencyAnalyzer.Create(context, actionOperations);
169171
PassThroughOptions newSettings = (PassThroughOptions)analyzer.SubstituteOptionValues(new Dictionary<string, CollectionRuleActionResult>(), 1, actionOptions);
170172

171173
Assert.Equal(processName, newSettings.Input1);
@@ -175,6 +177,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
175177
}, serviceCollection =>
176178
{
177179
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
180+
TestValidatableTypes.AddValidation(serviceCollection);
178181
});
179182
}
180183

@@ -196,13 +199,14 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
196199
CollectionRuleOptions ruleOptions = host.Services.GetRequiredService<IOptionsMonitor<CollectionRuleOptions>>().Get(DefaultRuleName);
197200
ILogger<CollectionRuleService> logger = host.Services.GetRequiredService<ILogger<CollectionRuleService>>();
198201
MockTimeProvider timeProvider = host.Services.GetRequiredService<TimeProvider>() as MockTimeProvider;
202+
ICollectionRuleActionOperations actionOperations = host.Services.GetRequiredService<ICollectionRuleActionOperations>();
199203

200204
const string hostName = "exampleHost";
201205
Guid instanceId = Guid.NewGuid();
202206
HostInfo hostInfo = new HostInfo(hostName, timeProvider);
203207
CollectionRuleContext context = new(DefaultRuleName, ruleOptions, new TestProcessInfo(instanceId), hostInfo, logger);
204208

205-
ActionOptionsDependencyAnalyzer analyzer = ActionOptionsDependencyAnalyzer.Create(context);
209+
ActionOptionsDependencyAnalyzer analyzer = ActionOptionsDependencyAnalyzer.Create(context, actionOperations);
206210
PassThroughOptions newSettings = (PassThroughOptions)analyzer.SubstituteOptionValues(new Dictionary<string, CollectionRuleActionResult>(), 1, actionOptions);
207211

208212
Assert.Equal(hostName, newSettings.Input1);
@@ -212,6 +216,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
212216
{
213217
serviceCollection.AddSingleton<TimeProvider, MockTimeProvider>();
214218
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
219+
TestValidatableTypes.AddValidation(serviceCollection);
215220
});
216221
}
217222

@@ -239,11 +244,12 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
239244
CollectionRuleOptions ruleOptions = host.Services.GetRequiredService<IOptionsMonitor<CollectionRuleOptions>>().Get(DefaultRuleName);
240245
ILogger<CollectionRuleService> logger = host.Services.GetRequiredService<ILogger<CollectionRuleService>>();
241246
TimeProvider timeProvider = host.Services.GetRequiredService<TimeProvider>();
247+
ICollectionRuleActionOperations actionOperations = host.Services.GetRequiredService<ICollectionRuleActionOperations>();
242248

243249
Guid instanceId = Guid.NewGuid();
244250
CollectionRuleContext context = new(DefaultRuleName, ruleOptions, new TestProcessInfo(instanceId), HostInfo.GetCurrent(timeProvider), logger);
245251

246-
ActionOptionsDependencyAnalyzer analyzer = ActionOptionsDependencyAnalyzer.Create(context);
252+
ActionOptionsDependencyAnalyzer analyzer = ActionOptionsDependencyAnalyzer.Create(context, actionOperations);
247253
analyzer.GetActionDependencies(1);
248254
analyzer.SubstituteOptionValues(new Dictionary<string, CollectionRuleActionResult>(), 1, actionOptions);
249255

@@ -255,6 +261,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
255261
}, serviceCollection =>
256262
{
257263
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
264+
TestValidatableTypes.AddValidation(serviceCollection);
258265
}, loggingBuilder =>
259266
{
260267
loggingBuilder.AddProvider(new TestLoggerProvider(record));
@@ -279,18 +286,20 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
279286
CollectionRuleOptions ruleOptions = host.Services.GetRequiredService<IOptionsMonitor<CollectionRuleOptions>>().Get(DefaultRuleName);
280287
ILogger<CollectionRuleService> logger = host.Services.GetRequiredService<ILogger<CollectionRuleService>>();
281288
TimeProvider timeProvider = host.Services.GetRequiredService<TimeProvider>();
289+
ICollectionRuleActionOperations actionOperations = host.Services.GetRequiredService<ICollectionRuleActionOperations>();
282290

283291
Guid instanceId = Guid.NewGuid();
284292
CollectionRuleContext context = new(DefaultRuleName, ruleOptions, new TestProcessInfo(instanceId), HostInfo.GetCurrent(timeProvider), logger);
285293

286-
ActionOptionsDependencyAnalyzer analyzer = ActionOptionsDependencyAnalyzer.Create(context);
294+
ActionOptionsDependencyAnalyzer analyzer = ActionOptionsDependencyAnalyzer.Create(context, actionOperations);
287295
PassThroughOptions newSettings = (PassThroughOptions)analyzer.SubstituteOptionValues(new Dictionary<string, CollectionRuleActionResult>(), 1, actionOptions);
288296

289297
Assert.Equal(instanceId.ToString("D"), newSettings.Input1);
290298

291299
}, serviceCollection =>
292300
{
293301
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
302+
TestValidatableTypes.AddValidation(serviceCollection);
294303
});
295304
}
296305

@@ -353,6 +362,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
353362
}, serviceCollection =>
354363
{
355364
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
365+
TestValidatableTypes.AddValidation(serviceCollection);
356366
});
357367
}
358368
}

src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/CollectionRuleDescriptionPipelineTests.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ public Task CollectionRuleDescriptionPipeline_StartupTriggerTest(TargetFramework
9292
services =>
9393
{
9494
services.RegisterTestAction(callbackService);
95+
TestValidatableTypes.AddValidation(services);
9596
});
9697
}
9798

@@ -292,6 +293,7 @@ await CollectionRulePipelineTestsHelper.ManualTriggerAsync(
292293
services.AddSingleton<TimeProvider>(timeProvider);
293294
services.RegisterManualTrigger(triggerService);
294295
services.RegisterTestAction(callbackService);
296+
TestValidatableTypes.AddValidation(services);
295297
});
296298
}
297299

@@ -408,6 +410,7 @@ await CollectionRulePipelineTestsHelper.ManualTriggerAsync(
408410
services.AddSingleton<TimeProvider>(timeProvider);
409411
services.RegisterManualTrigger(triggerService);
410412
services.RegisterTestAction(callbackService);
413+
TestValidatableTypes.AddValidation(services);
411414
});
412415
}
413416

src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/CollectionRulePipelineTests.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Microsoft.Diagnostics.Monitoring.TestCommon.Runners;
77
using Microsoft.Diagnostics.Monitoring.Tool.UnitTests.CollectionRules.Triggers;
88
using Microsoft.Diagnostics.Monitoring.WebApi;
9+
using Microsoft.Diagnostics.Tools.Monitor;
910
using Microsoft.Extensions.DependencyInjection;
1011
using System;
1112
using System.Collections.Generic;
@@ -94,6 +95,7 @@ public Task CollectionRulePipeline_StartupTriggerTest(TargetFrameworkMoniker app
9495
services =>
9596
{
9697
services.RegisterTestAction(callbackService);
98+
TestValidatableTypes.AddValidation(services);
9799
});
98100
}
99101

@@ -223,6 +225,7 @@ public Task CollectionRulePipeline_EventMeterTriggerTest_Gauge(TargetFrameworkMo
223225
services =>
224226
{
225227
services.RegisterTestAction(callbackService);
228+
TestValidatableTypes.AddValidation(services);
226229
});
227230
}
228231

@@ -398,6 +401,7 @@ public Task CollectionRulePipeline_DurationLimitTest(TargetFrameworkMoniker appT
398401
{
399402
services.RegisterManualTrigger(triggerService);
400403
services.RegisterTestAction(callbackService);
404+
TestValidatableTypes.AddValidation(services);
401405
});
402406
}
403407

@@ -461,6 +465,7 @@ await CollectionRulePipelineTestsHelper.ManualTriggerAsync(
461465
services.AddSingleton<TimeProvider>(timeProvider);
462466
services.RegisterManualTrigger(triggerService);
463467
services.RegisterTestAction(callbackService);
468+
TestValidatableTypes.AddValidation(services);
464469
});
465470
}
466471

src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/TestValidatableTypes.cs

Lines changed: 0 additions & 51 deletions
This file was deleted.

0 commit comments

Comments
 (0)