up
This commit is contained in:
@@ -246,13 +246,34 @@ public sealed class SurfaceManifestStageExecutorTests
|
||||
Span: null,
|
||||
Metadata: null);
|
||||
|
||||
var plan = new EntryTracePlan(
|
||||
ImmutableArray.Create("/bin/entry"),
|
||||
ImmutableDictionary<string, string>.Empty,
|
||||
WorkingDirectory: "/",
|
||||
User: "root",
|
||||
TerminalPath: "/bin/entry",
|
||||
Type: EntryTraceTerminalType.Native,
|
||||
Runtime: "native",
|
||||
Confidence: 92.5,
|
||||
Evidence: ImmutableDictionary<string, string>.Empty);
|
||||
|
||||
var terminal = new EntryTraceTerminal(
|
||||
Path: "/bin/entry",
|
||||
Type: EntryTraceTerminalType.Native,
|
||||
Runtime: "native",
|
||||
Confidence: 92.5,
|
||||
Evidence: ImmutableDictionary<string, string>.Empty,
|
||||
User: "root",
|
||||
WorkingDirectory: "/",
|
||||
Arguments: ImmutableArray.Create("/bin/entry"));
|
||||
|
||||
var graph = new EntryTraceGraph(
|
||||
Outcome: EntryTraceOutcome.Resolved,
|
||||
Nodes: ImmutableArray.Create(node),
|
||||
Edges: ImmutableArray<EntryTraceEdge>.Empty,
|
||||
Diagnostics: ImmutableArray<EntryTraceDiagnostic>.Empty,
|
||||
Plans: ImmutableArray<EntryTracePlan>.Empty,
|
||||
Terminals: ImmutableArray<EntryTraceTerminal>.Empty);
|
||||
Plans: ImmutableArray.Create(plan),
|
||||
Terminals: ImmutableArray.Create(terminal));
|
||||
|
||||
context.Analysis.Set(ScanAnalysisKeys.EntryTraceGraph, graph);
|
||||
|
||||
@@ -301,6 +322,44 @@ public sealed class SurfaceManifestStageExecutorTests
|
||||
Assert.NotEmpty(packageStore.LastInventory!.Packages);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ExecuteAsync_AddsBestEntryTraceMetadata()
|
||||
{
|
||||
var metrics = new ScannerWorkerMetrics();
|
||||
var publisher = new TestSurfaceManifestPublisher("tenant-a");
|
||||
var cache = new RecordingSurfaceCache();
|
||||
var environment = new TestSurfaceEnvironment("tenant-a");
|
||||
var hash = CreateCryptoHash();
|
||||
var packageStore = new RecordingRubyPackageStore();
|
||||
|
||||
var executor = new SurfaceManifestStageExecutor(
|
||||
publisher,
|
||||
cache,
|
||||
environment,
|
||||
metrics,
|
||||
NullLogger<SurfaceManifestStageExecutor>.Instance,
|
||||
hash,
|
||||
packageStore);
|
||||
|
||||
var context = CreateContext();
|
||||
PopulateAnalysis(context);
|
||||
|
||||
await executor.ExecuteAsync(context, CancellationToken.None);
|
||||
|
||||
var entrytracePayloads = publisher.LastRequest!.Payloads
|
||||
.Where(p => p.Kind.StartsWith("entrytrace", StringComparison.OrdinalIgnoreCase))
|
||||
.ToList();
|
||||
|
||||
Assert.NotEmpty(entrytracePayloads);
|
||||
foreach (var payload in entrytracePayloads)
|
||||
{
|
||||
Assert.Equal("/bin/entry", payload.Metadata!["best_terminal"]);
|
||||
Assert.Equal("92.5000", payload.Metadata!["best_confidence"]);
|
||||
Assert.Equal("root", payload.Metadata!["best_user"]);
|
||||
Assert.Equal("/", payload.Metadata!["best_workdir"]);
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task PopulateRubyAnalyzerResultsAsync(ScanJobContext context)
|
||||
{
|
||||
var fixturePath = Path.Combine(
|
||||
|
||||
Reference in New Issue
Block a user