48 lines
1.6 KiB
C#
48 lines
1.6 KiB
C#
using StellaOps.Scanner.CallGraph;
|
|
using StellaOps.Scanner.CallGraph.Node;
|
|
using Xunit;
|
|
|
|
using StellaOps.TestKit;
|
|
namespace StellaOps.Scanner.CallGraph.Tests;
|
|
|
|
public class BenchmarkIntegrationTests
|
|
{
|
|
[Trait("Category", TestCategories.Unit)]
|
|
[Theory]
|
|
[InlineData("unsafe-eval", true)]
|
|
[InlineData("guarded-eval", false)]
|
|
public async Task NodeTraceExtractor_AlignsWithBenchmarkReachability(string caseName, bool expectSinkReachable)
|
|
{
|
|
var repoRoot = FindRepoRoot();
|
|
var caseDir = Path.Combine(repoRoot, "bench", "reachability-benchmark", "cases", "js", caseName);
|
|
|
|
var extractor = new NodeCallGraphExtractor();
|
|
var snapshot = await extractor.ExtractAsync(new CallGraphExtractionRequest(
|
|
ScanId: $"bench-{caseName}",
|
|
Language: "node",
|
|
TargetPath: caseDir), TestContext.Current.CancellationToken);
|
|
|
|
var analyzer = new ReachabilityAnalyzer();
|
|
var result = analyzer.Analyze(snapshot);
|
|
|
|
Assert.Equal(expectSinkReachable, result.ReachableSinkIds.Length > 0);
|
|
}
|
|
|
|
private static string FindRepoRoot()
|
|
{
|
|
var directory = new DirectoryInfo(AppContext.BaseDirectory);
|
|
while (directory is not null)
|
|
{
|
|
if (Directory.Exists(Path.Combine(directory.FullName, "bench", "reachability-benchmark")))
|
|
{
|
|
return directory.FullName;
|
|
}
|
|
|
|
directory = directory.Parent;
|
|
}
|
|
|
|
throw new InvalidOperationException("Unable to locate repository root for benchmark integration tests.");
|
|
}
|
|
}
|
|
|