Merge all changes
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Bun;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.Harness;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.TestUtilities;
|
||||
|
||||
@@ -9,7 +10,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task StandardInstallProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "standard");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -28,7 +29,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task IsolatedLinkerInstallIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "isolated");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -47,7 +48,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockfileOnlyIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "lockfile-only");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -66,7 +67,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task BinaryLockfileEmitsRemediationAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "binary-lockfile");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -85,7 +86,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task WorkspacesAreParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "workspaces");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -104,7 +105,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SymlinkSafetyIsEnforcedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "symlinks");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -123,7 +124,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ScopedPackagesAreParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "scoped-packages");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -142,7 +143,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task GitDependenciesAreParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "git-dependencies");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -161,7 +162,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task CustomRegistryIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "custom-registry");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -180,7 +181,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PatchedPackagesAreParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "patched-packages");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -199,7 +200,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PatchedMultiVersionIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "patched-multi-version");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -218,7 +219,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DeepDependencyTreeIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "deep-tree");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -237,7 +238,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task MultiWorkspaceIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "multi-workspace");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -256,7 +257,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task JsoncLockfileIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "jsonc-lockfile");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -275,7 +276,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ContainerLayersAreDiscoveredAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "container-layers");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -294,7 +295,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task BunfigOnlyEmitsDeclaredOnlyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "bunfig-only");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -313,7 +314,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockfileDevClassificationIsDeterministicAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "lockfile-dev-classification");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -332,7 +333,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task NonConcreteVersionsUseExplicitKeyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "non-concrete-versions");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Bun.Internal;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Bun.Tests.ErrorHandling;
|
||||
|
||||
@@ -88,7 +89,7 @@ public sealed class BunAnalyzerErrorHandlingTests : IDisposable
|
||||
{
|
||||
var nonExistentPath = Path.Combine(_tempDir, "nonexistent", "bun.lock");
|
||||
|
||||
var result = await BunLockParser.ParseAsync(nonExistentPath, CancellationToken.None);
|
||||
var result = await BunLockParser.ParseAsync(nonExistentPath, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Empty(result.AllEntries);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Fixtures;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Internal;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Tests.TestFixtures;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Tests.TestUtilities;
|
||||
@@ -14,7 +15,7 @@ public sealed class BundleInspectorTests
|
||||
try
|
||||
{
|
||||
var eszipPath = BundleFixtureBuilder.CreateSampleEszip(temp);
|
||||
var result = DenoBundleInspector.TryInspect(eszipPath, CancellationToken.None);
|
||||
var result = DenoBundleInspector.TryInspect(eszipPath, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("eszip", result!.BundleType);
|
||||
@@ -36,7 +37,7 @@ public sealed class BundleInspectorTests
|
||||
try
|
||||
{
|
||||
var binaryPath = BundleFixtureBuilder.CreateSampleCompiledBinary(temp);
|
||||
var result = DenoCompileInspector.TryInspect(binaryPath, CancellationToken.None);
|
||||
var result = DenoCompileInspector.TryInspect(binaryPath, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("deno-compile", result!.BundleType);
|
||||
@@ -60,7 +61,7 @@ public sealed class BundleInspectorTests
|
||||
Assert.True(File.Exists(eszip));
|
||||
Assert.True(File.Exists(binary));
|
||||
|
||||
var scan = DenoBundleScanner.Scan(temp, CancellationToken.None);
|
||||
var scan = DenoBundleScanner.Scan(temp, TestContext.Current.CancellationToken);
|
||||
var observations = DenoBundleScanner.ToObservations(scan);
|
||||
|
||||
Assert.Single(scan.EszipBundles);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Linq;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Internal;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Tests.TestFixtures;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Tests.TestUtilities;
|
||||
@@ -15,8 +16,8 @@ public sealed class ContainerAdapterTests
|
||||
{
|
||||
Environment.SetEnvironmentVariable("DENO_DIR", envDir);
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = await DenoWorkspaceNormalizer.NormalizeAsync(context, CancellationToken.None);
|
||||
var bundleScan = DenoBundleScanner.Scan(root, CancellationToken.None);
|
||||
var workspace = await DenoWorkspaceNormalizer.NormalizeAsync(context, TestContext.Current.CancellationToken);
|
||||
var bundleScan = DenoBundleScanner.Scan(root, TestContext.Current.CancellationToken);
|
||||
var observations = DenoBundleScanner.ToObservations(bundleScan);
|
||||
|
||||
var inputs = DenoContainerAdapter.CollectInputs(workspace, observations);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Text;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno;
|
||||
using StellaOps.Scanner.Core.Contracts;
|
||||
@@ -22,14 +23,14 @@ public sealed class DenoLanguageAnalyzerRuntimeTests
|
||||
.AppendLine("{\"type\":\"deno.npm.resolution\",\"ts\":\"2025-11-18T00:00:03Z\",\"specifier\":\"npm:chalk@5\",\"package\":\"chalk\",\"version\":\"5.3.0\",\"resolved\":\"file:///cache/chalk\",\"exists\":true}")
|
||||
.ToString();
|
||||
|
||||
await File.WriteAllTextAsync(runtimePath, ndjson, CancellationToken.None);
|
||||
await File.WriteAllTextAsync(runtimePath, ndjson, TestContext.Current.CancellationToken);
|
||||
|
||||
var store = new ScanAnalysisStore();
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System, usageHints: null, services: null, analysisStore: store);
|
||||
|
||||
var analyzer = new DenoLanguageAnalyzer();
|
||||
var engine = new LanguageAnalyzerEngine(new[] { analyzer });
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(store.TryGet(ScanAnalysisKeys.DenoRuntimePayload, out AnalyzerObservationPayload runtimePayload));
|
||||
Assert.Equal("deno.runtime.v1", runtimePayload.Kind);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Internal.Runtime;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Deno.Tests.Deno;
|
||||
|
||||
@@ -10,10 +11,10 @@ public sealed class DenoRuntimeShimTests
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
try
|
||||
{
|
||||
var path = await DenoRuntimeShim.WriteAsync(root, CancellationToken.None);
|
||||
var path = await DenoRuntimeShim.WriteAsync(root, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(File.Exists(path));
|
||||
var content = await File.ReadAllTextAsync(path, CancellationToken.None);
|
||||
var content = await File.ReadAllTextAsync(path, TestContext.Current.CancellationToken);
|
||||
Assert.Contains("deno-runtime.ndjson", content);
|
||||
Assert.Contains("deno.module.load", content);
|
||||
Assert.Contains("deno.permission.use", content);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Internal.Runtime;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Tests.TestUtilities;
|
||||
@@ -16,7 +17,7 @@ public sealed class DenoRuntimeTraceRunnerTests
|
||||
try
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var result = await DenoRuntimeTraceRunner.TryExecuteAsync(context, logger: null, CancellationToken.None);
|
||||
var result = await DenoRuntimeTraceRunner.TryExecuteAsync(context, logger: null, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.False(result);
|
||||
Assert.False(File.Exists(Path.Combine(root, "deno-runtime.ndjson")));
|
||||
@@ -37,7 +38,7 @@ public sealed class DenoRuntimeTraceRunnerTests
|
||||
using var env = new EnvironmentVariableScope("STELLA_DENO_ENTRYPOINT", "app/main.ts");
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
|
||||
var result = await DenoRuntimeTraceRunner.TryExecuteAsync(context, logger: null, CancellationToken.None);
|
||||
var result = await DenoRuntimeTraceRunner.TryExecuteAsync(context, logger: null, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.False(result);
|
||||
Assert.False(File.Exists(Path.Combine(root, DenoRuntimeShim.FileName)));
|
||||
@@ -57,13 +58,13 @@ public sealed class DenoRuntimeTraceRunnerTests
|
||||
try
|
||||
{
|
||||
var entrypoint = Path.Combine(root, "main.ts");
|
||||
await File.WriteAllTextAsync(entrypoint, "console.log('hi')", CancellationToken.None);
|
||||
await File.WriteAllTextAsync(entrypoint, "console.log('hi')", TestContext.Current.CancellationToken);
|
||||
|
||||
using var entryEnv = new EnvironmentVariableScope("STELLA_DENO_ENTRYPOINT", entrypoint);
|
||||
using var binaryEnv = new EnvironmentVariableScope("STELLA_DENO_BINARY", Guid.NewGuid().ToString("N"));
|
||||
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var result = await DenoRuntimeTraceRunner.TryExecuteAsync(context, logger: null, CancellationToken.None);
|
||||
var result = await DenoRuntimeTraceRunner.TryExecuteAsync(context, logger: null, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.False(result);
|
||||
Assert.True(File.Exists(Path.Combine(root, DenoRuntimeShim.FileName)));
|
||||
@@ -90,14 +91,14 @@ public sealed class DenoRuntimeTraceRunnerTests
|
||||
using var denoDirEnv = new EnvironmentVariableScope("DENO_DIR", Path.Combine(root, ".deno-cache"));
|
||||
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var result = await DenoRuntimeTraceRunner.TryExecuteAsync(context, logger: null, CancellationToken.None);
|
||||
var result = await DenoRuntimeTraceRunner.TryExecuteAsync(context, logger: null, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(result);
|
||||
|
||||
var runtimePath = Path.Combine(root, "deno-runtime.ndjson");
|
||||
Assert.True(File.Exists(runtimePath));
|
||||
|
||||
var content = await File.ReadAllTextAsync(runtimePath, CancellationToken.None);
|
||||
var content = await File.ReadAllTextAsync(runtimePath, TestContext.Current.CancellationToken);
|
||||
Assert.Contains("deno.runtime.start", content);
|
||||
Assert.Contains("deno.module.load", content);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Linq;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Internal;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Tests.TestFixtures;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Deno.Tests.TestUtilities;
|
||||
@@ -19,7 +20,7 @@ public sealed class DenoWorkspaceNormalizerTests
|
||||
Environment.SetEnvironmentVariable("DENO_DIR", envDenoDir);
|
||||
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = await DenoWorkspaceNormalizer.NormalizeAsync(context, CancellationToken.None);
|
||||
var workspace = await DenoWorkspaceNormalizer.NormalizeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
var config = Assert.Single(workspace.Configurations);
|
||||
Assert.EndsWith("deno.jsonc", config.AbsolutePath, StringComparison.OrdinalIgnoreCase);
|
||||
@@ -65,12 +66,12 @@ public sealed class DenoWorkspaceNormalizerTests
|
||||
Environment.SetEnvironmentVariable("DENO_DIR", envDenoDir);
|
||||
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = await DenoWorkspaceNormalizer.NormalizeAsync(context, CancellationToken.None);
|
||||
var workspace = await DenoWorkspaceNormalizer.NormalizeAsync(context, TestContext.Current.CancellationToken);
|
||||
var lockFile = workspace.LockFiles.Single(lf => string.Equals(lf.RelativePath, "deno.lock", StringComparison.OrdinalIgnoreCase));
|
||||
Assert.Contains(lockFile.RemoteEntries, entry => entry.Key.Contains("server.ts", StringComparison.Ordinal));
|
||||
|
||||
var graph = DenoModuleGraphResolver.Resolve(workspace, CancellationToken.None);
|
||||
var compatibility = DenoNpmCompatibilityAdapter.Analyze(workspace, graph, CancellationToken.None);
|
||||
var graph = DenoModuleGraphResolver.Resolve(workspace, TestContext.Current.CancellationToken);
|
||||
var compatibility = DenoNpmCompatibilityAdapter.Analyze(workspace, graph, TestContext.Current.CancellationToken);
|
||||
var cacheSummary = string.Join(";", workspace.CacheLocations.Select(cache => $"{cache.Kind}:{cache.AbsolutePath}"));
|
||||
|
||||
Assert.NotEmpty(graph.Nodes);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Linq;
|
||||
using Xunit;
|
||||
using System.Text.Encodings.Web;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Nodes;
|
||||
@@ -17,7 +18,7 @@ public sealed class DenoAnalyzerGoldenTests
|
||||
var fixtureRoot = TestPaths.ResolveFixture("lang", "deno", "full");
|
||||
var golden = Path.Combine(fixtureRoot, "expected.json");
|
||||
var analyzers = new ILanguageAnalyzer[] { new DenoLanguageAnalyzer() };
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var (workspaceRoot, envDir) = DenoWorkspaceTestFixture.Create();
|
||||
var previousDenoDir = Environment.GetEnvironmentVariable("DENO_DIR");
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Linq;
|
||||
using Xunit;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@@ -36,7 +37,7 @@ public sealed class DenoLanguageAnalyzerObservationTests
|
||||
|
||||
var analyzer = new DenoLanguageAnalyzer();
|
||||
var engine = new LanguageAnalyzerEngine(new[] { analyzer });
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(store.TryGet(ScanAnalysisKeys.DenoObservationPayload, out AnalyzerObservationPayload payload));
|
||||
Assert.Equal("deno.observation", payload.Kind);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Internal.Bundling;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Tests.TestUtilities;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.DotNet.Tests.DotNet.Bundling;
|
||||
@@ -139,7 +140,7 @@ public sealed class ILMergedAssemblyDetectorTests
|
||||
|
||||
var results = ILMergedAssemblyDetector.AnalyzeMany(
|
||||
[mergedPath, normalPath],
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(results);
|
||||
Assert.True(results[0].IsMerged);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Internal.Bundling;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Tests.TestUtilities;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.DotNet.Tests.DotNet.Bundling;
|
||||
@@ -115,7 +116,7 @@ public sealed class SingleFileAppDetectorTests
|
||||
|
||||
var results = SingleFileAppDetector.AnalyzeMany(
|
||||
[bundlePath, normalPath],
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(results);
|
||||
Assert.True(results[0].IsSingleFile);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Internal.Config;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Tests.TestUtilities;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.DotNet.Tests.DotNet.Config;
|
||||
@@ -117,7 +118,7 @@ public sealed class GlobalJsonParserTests
|
||||
[Fact]
|
||||
public async Task HandlesNonExistentFileAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var result = await GlobalJsonParser.ParseAsync("/nonexistent/global.json", cancellationToken);
|
||||
|
||||
Assert.Equal(GlobalJsonResult.Empty, result);
|
||||
@@ -217,7 +218,7 @@ public sealed class GlobalJsonParserTests
|
||||
[Fact]
|
||||
public async Task ParsesFileAsyncSuccessfullyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = DotNetFixtureBuilder.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Internal.Config;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Tests.TestUtilities;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.DotNet.Tests.DotNet.Config;
|
||||
@@ -352,7 +353,7 @@ public sealed class NuGetConfigParserTests
|
||||
[Fact]
|
||||
public async Task ParsesFileAsyncSuccessfullyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = DotNetFixtureBuilder.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Internal.BuildMetadata;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Internal.Parsing;
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Tests.TestUtilities;
|
||||
|
||||
@@ -377,7 +378,7 @@ public sealed class MsBuildProjectParserTests
|
||||
[Fact]
|
||||
public async Task HandlesFileNotFoundAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var result = await MsBuildProjectParser.ParseAsync("/nonexistent/path.csproj", cancellationToken);
|
||||
|
||||
Assert.Equal(MsBuildProjectParser.Empty, result);
|
||||
@@ -455,7 +456,7 @@ public sealed class MsBuildProjectParserTests
|
||||
[Fact]
|
||||
public async Task ParsesFileAsyncSuccessfullyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = DotNetFixtureBuilder.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Internal.BuildMetadata;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Internal.Parsing;
|
||||
using StellaOps.Scanner.Analyzers.Lang.DotNet.Tests.TestUtilities;
|
||||
|
||||
@@ -116,7 +117,7 @@ public sealed class PackagesConfigParserTests
|
||||
[Fact]
|
||||
public async Task HandlesNonExistentFileAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var result = await PackagesConfigParser.ParseAsync("/nonexistent/packages.config", cancellationToken);
|
||||
|
||||
Assert.Equal(PackagesConfigResult.Empty, result);
|
||||
@@ -189,7 +190,7 @@ public sealed class PackagesConfigParserTests
|
||||
[Fact]
|
||||
public async Task ParsesFileAsyncSuccessfullyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = DotNetFixtureBuilder.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using Xunit;
|
||||
using System.Diagnostics.Metrics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@@ -13,7 +14,7 @@ public sealed class GoLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task BuildInfoFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "go", "basic");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -32,7 +33,7 @@ public sealed class GoLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DwarfOnlyFixtureFallsBackToMetadataAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "go", "dwarf-only");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -51,7 +52,7 @@ public sealed class GoLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task StrippedBinaryFallsBackToHeuristicBinHashAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "go", "stripped");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -70,7 +71,7 @@ public sealed class GoLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParallelRunsRemainDeterministicAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "go", "basic");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -93,7 +94,7 @@ public sealed class GoLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task HeuristicMetricCounterIncrementsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "go", "stripped");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using Xunit;
|
||||
using System.IO.Compression;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
@@ -20,8 +21,8 @@ public sealed class JavaClassPathBuilderTests
|
||||
JavaFixtureBuilder.CreateSampleJar(root, "libs/simple.jar");
|
||||
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, CancellationToken.None);
|
||||
var analysis = JavaClassPathBuilder.Build(workspace, CancellationToken.None);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, TestContext.Current.CancellationToken);
|
||||
var analysis = JavaClassPathBuilder.Build(workspace, TestContext.Current.CancellationToken);
|
||||
|
||||
var segment = Assert.Single(analysis.Segments);
|
||||
Assert.Equal("libs/simple.jar", segment.Identifier.Replace('\\', '/'));
|
||||
@@ -54,8 +55,8 @@ public sealed class JavaClassPathBuilderTests
|
||||
CreateJarWithClasses(root, "libs/spi.jar", new[] { "com.example.DriverImpl" }, services);
|
||||
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, CancellationToken.None);
|
||||
var analysis = JavaClassPathBuilder.Build(workspace, CancellationToken.None);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, TestContext.Current.CancellationToken);
|
||||
var analysis = JavaClassPathBuilder.Build(workspace, TestContext.Current.CancellationToken);
|
||||
|
||||
var segment = Assert.Single(analysis.Segments);
|
||||
var providers = Assert.Single(segment.ServiceDefinitions);
|
||||
@@ -77,8 +78,8 @@ public sealed class JavaClassPathBuilderTests
|
||||
JavaFixtureBuilder.CreateSpringBootFatJar(root, "apps/app-fat.jar");
|
||||
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, CancellationToken.None);
|
||||
var analysis = JavaClassPathBuilder.Build(workspace, CancellationToken.None);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, TestContext.Current.CancellationToken);
|
||||
var analysis = JavaClassPathBuilder.Build(workspace, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(2, analysis.Segments.Length);
|
||||
|
||||
@@ -106,8 +107,8 @@ public sealed class JavaClassPathBuilderTests
|
||||
CreateJarWithClasses(root, "libs/b.jar", "com.example.Demo", "com.example.Other");
|
||||
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, CancellationToken.None);
|
||||
var analysis = JavaClassPathBuilder.Build(workspace, CancellationToken.None);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, TestContext.Current.CancellationToken);
|
||||
var analysis = JavaClassPathBuilder.Build(workspace, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(2, analysis.Segments.Length);
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Immutable;
|
||||
using Xunit;
|
||||
using System.IO.Compression;
|
||||
using System.Text;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal;
|
||||
@@ -24,7 +25,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
ImmutableArray<JavaModuleDescriptor>.Empty,
|
||||
ImmutableArray<JavaClassDuplicate>.Empty,
|
||||
ImmutableArray<JavaSplitPackage>.Empty);
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var resolution = JavaEntrypointResolver.Resolve(
|
||||
classPath,
|
||||
@@ -58,7 +59,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
writer.Write("\r\n");
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -107,7 +108,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
writer.Write("\r\n");
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -155,7 +156,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
writer.Write("\r\n");
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -204,7 +205,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
Details: "System.loadLibrary(\"mylib\")"));
|
||||
|
||||
var jniAnalysis = new JavaJniAnalysis(jniEdges, ImmutableArray<JavaJniWarning>.Empty);
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var resolution = JavaEntrypointResolver.Resolve(
|
||||
classPath,
|
||||
@@ -243,7 +244,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
Details: "Class.forName(\"com.example.Plugin\")"));
|
||||
|
||||
var reflectionAnalysis = new JavaReflectionAnalysis(reflectEdges, ImmutableArray<JavaReflectionWarning>.Empty);
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var resolution = JavaEntrypointResolver.Resolve(
|
||||
classPath,
|
||||
@@ -278,7 +279,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
writer.Write("\r\n");
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -324,7 +325,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
writer.Write("\r\n");
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -383,7 +384,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
Warnings: ImmutableArray<JavaResolutionWarning>.Empty);
|
||||
|
||||
using var stream = new MemoryStream();
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
await JavaEntrypointAocWriter.WriteNdjsonAsync(
|
||||
resolution,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.IO.Compression;
|
||||
using Xunit;
|
||||
using System.Threading;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.ClassPath;
|
||||
@@ -28,7 +29,7 @@ public sealed class JavaJniAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -65,7 +66,7 @@ public sealed class JavaJniAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -101,7 +102,7 @@ public sealed class JavaJniAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -146,7 +147,7 @@ public sealed class JavaJniAnalyzerTests
|
||||
}
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -168,7 +169,7 @@ public sealed class JavaJniAnalyzerTests
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
try
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -198,7 +199,7 @@ public sealed class JavaJniAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.IO.Compression;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
@@ -14,7 +15,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ExtractsMavenArtifactFromJarAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
try
|
||||
{
|
||||
@@ -39,7 +40,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ExtractsMavenArtifactsFromSpringBootFatJarEmbeddedLibrariesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
try
|
||||
{
|
||||
@@ -64,7 +65,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ExtractsMavenArtifactsFromWarEmbeddedLibrariesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
try
|
||||
{
|
||||
@@ -89,7 +90,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ExtractsMavenArtifactsFromPomXmlOnlyJarAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
try
|
||||
{
|
||||
@@ -114,7 +115,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockfilesProduceDeclaredOnlyComponentsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -149,7 +150,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task CapturesFrameworkConfigurationHintsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -219,7 +220,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task CapturesJniHintsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -272,7 +273,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ExtractsMavenArtifactFromEmbeddedJarAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -334,7 +335,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ExtractsMavenArtifactFromPomXmlWhenPomPropertiesMissingAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -389,7 +390,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PomXmlWithIncompleteCoordinatesEmitsUnresolvedComponentAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -460,7 +461,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesGradleGroovyBuildFileAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "gradle-groovy");
|
||||
var goldenPath = TestPaths.ResolveFixture("java", "gradle-groovy", "expected.json");
|
||||
|
||||
@@ -471,9 +472,9 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
var components = document.RootElement.EnumerateArray().ToArray();
|
||||
|
||||
// Verify key dependencies are detected
|
||||
Assert.True(components.Any(c => c.GetProperty("name").GetString() == "guava"));
|
||||
Assert.True(components.Any(c => c.GetProperty("name").GetString() == "commons-lang3"));
|
||||
Assert.True(components.Any(c => c.GetProperty("name").GetString() == "slf4j-api"));
|
||||
Assert.Contains(components, c => c.GetProperty("name").GetString() == "guava");
|
||||
Assert.Contains(components, c => c.GetProperty("name").GetString() == "commons-lang3");
|
||||
Assert.Contains(components, c => c.GetProperty("name").GetString() == "slf4j-api");
|
||||
|
||||
// Verify declaredOnly flag is set for build file dependencies
|
||||
var guava = components.First(c => c.GetProperty("name").GetString() == "guava");
|
||||
@@ -484,7 +485,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesGradleKotlinBuildFileAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "gradle-kotlin");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -494,17 +495,17 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
var components = document.RootElement.EnumerateArray().ToArray();
|
||||
|
||||
// Verify Kotlin DSL dependencies are detected
|
||||
Assert.True(components.Any(c => c.GetProperty("name").GetString() == "kotlin-stdlib"));
|
||||
Assert.True(components.Any(c => c.GetProperty("name").GetString() == "jackson-databind"));
|
||||
Assert.Contains(components, c => c.GetProperty("name").GetString() == "kotlin-stdlib");
|
||||
Assert.Contains(components, c => c.GetProperty("name").GetString() == "jackson-databind");
|
||||
|
||||
// Verify kapt/ksp dependencies are detected
|
||||
Assert.True(components.Any(c => c.GetProperty("name").GetString() == "mapstruct-processor"));
|
||||
Assert.Contains(components, c => c.GetProperty("name").GetString() == "mapstruct-processor");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ParsesGradleVersionCatalogAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "gradle-catalog");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -513,7 +514,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
using var document = JsonDocument.Parse(json);
|
||||
var components = document.RootElement.EnumerateArray().ToArray();
|
||||
|
||||
Assert.True(components.Any(c => c.GetProperty("name").GetString() == "logback-classic"));
|
||||
Assert.Contains(components, c => c.GetProperty("name").GetString() == "logback-classic");
|
||||
var logback = components.First(c => c.GetProperty("name").GetString() == "logback-classic");
|
||||
Assert.Equal("1.4.14", logback.GetProperty("version").GetString());
|
||||
}
|
||||
@@ -521,7 +522,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesMavenParentPomAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "maven-parent");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -531,8 +532,8 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
var components = document.RootElement.EnumerateArray().ToArray();
|
||||
|
||||
// Verify dependencies with inherited versions are detected
|
||||
Assert.True(components.Any(c => c.GetProperty("name").GetString() == "slf4j-api"));
|
||||
Assert.True(components.Any(c => c.GetProperty("name").GetString() == "spring-core"));
|
||||
Assert.Contains(components, c => c.GetProperty("name").GetString() == "slf4j-api");
|
||||
Assert.Contains(components, c => c.GetProperty("name").GetString() == "spring-core");
|
||||
|
||||
// Verify version is inherited from parent
|
||||
var springCore = components.First(c => c.GetProperty("name").GetString() == "spring-core");
|
||||
@@ -542,7 +543,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesMavenBomImportsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "maven-bom");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -551,8 +552,8 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
using var document = JsonDocument.Parse(json);
|
||||
var components = document.RootElement.EnumerateArray().ToArray();
|
||||
|
||||
Assert.True(components.Any(c => c.GetProperty("name").GetString() == "commons-lang3"));
|
||||
Assert.True(components.Any(c => c.GetProperty("name").GetString() == "lombok"));
|
||||
Assert.Contains(components, c => c.GetProperty("name").GetString() == "commons-lang3");
|
||||
Assert.Contains(components, c => c.GetProperty("name").GetString() == "lombok");
|
||||
|
||||
var commonsLang = components.First(c => c.GetProperty("name").GetString() == "commons-lang3");
|
||||
Assert.Equal("3.14.0", commonsLang.GetProperty("version").GetString());
|
||||
@@ -561,7 +562,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesMavenPropertyPlaceholdersAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "maven-properties");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -584,7 +585,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesMavenScopesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "maven-scopes");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -615,7 +616,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DetectsVersionConflictsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "version-conflict");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -650,7 +651,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task MultiModuleGradleLockFilesEmitLockModulePathMetadataAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -729,7 +730,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task RuntimeImageEmitsExplicitKeyComponentAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -798,7 +799,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DuplicateRuntimeImagesAreDeduplicatedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.IO.Compression;
|
||||
using Xunit;
|
||||
using System.Threading;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.ClassPath;
|
||||
@@ -25,7 +26,7 @@ public sealed class JavaReflectionAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -59,7 +60,7 @@ public sealed class JavaReflectionAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -84,7 +85,7 @@ public sealed class JavaReflectionAnalyzerTests
|
||||
{
|
||||
JavaFixtureBuilder.CreateSpringBootFatJar(root, "apps/app-fat.jar");
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -116,13 +117,13 @@ public sealed class JavaReflectionAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
var analysis = JavaReflectionAnalyzer.Analyze(classPath, cancellationToken);
|
||||
|
||||
var edge = Assert.Single(analysis.Edges.Where(edge => edge.Reason == JavaReflectionReason.ResourceLookup));
|
||||
var edge = Assert.Single(analysis.Edges, edge => edge.Reason == JavaReflectionReason.ResourceLookup);
|
||||
Assert.Equal("com.example.Resources", edge.SourceClass);
|
||||
Assert.Equal("/META-INF/plugin.properties", edge.TargetType);
|
||||
Assert.Equal(JavaReflectionConfidence.High, edge.Confidence);
|
||||
|
||||
@@ -32,7 +32,7 @@ public sealed class JavaServiceProviderScannerTests
|
||||
CreateJarWithClasses(root, "libs/a.jar", new[] { "com.example.ADriver" }, servicesA);
|
||||
CreateJarWithClasses(root, "libs/b.jar", new[] { "com.example.BDriver" }, servicesB);
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -41,7 +41,7 @@ public sealed class JavaServiceProviderScannerTests
|
||||
var service = Assert.Single(analysis.Services, record => record.ServiceId == "java.sql.Driver");
|
||||
Assert.Equal("jdk", service.Category);
|
||||
|
||||
var selected = Assert.Single(service.Candidates.Where(candidate => candidate.IsSelected));
|
||||
var selected = Assert.Single(service.Candidates, candidate => candidate.IsSelected);
|
||||
Assert.Equal("com.example.ADriver", selected.ProviderClass);
|
||||
Assert.Empty(service.Warnings);
|
||||
}
|
||||
@@ -65,7 +65,7 @@ public sealed class JavaServiceProviderScannerTests
|
||||
CreateJarWithClasses(root, "libs/a.jar", new[] { "com.example.DuplicateDriver" }, services);
|
||||
CreateJarWithClasses(root, "libs/b.jar", new[] { "com.example.Other" }, services);
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -89,14 +89,14 @@ public sealed class JavaServiceProviderScannerTests
|
||||
{
|
||||
JavaFixtureBuilder.CreateSpringBootFatJar(root, "apps/app-fat.jar");
|
||||
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
var analysis = JavaServiceProviderScanner.Scan(classPath, JavaSpiCatalog.Default, cancellationToken);
|
||||
|
||||
var service = Assert.Single(analysis.Services, record => record.ServiceId == "java.sql.Driver");
|
||||
var selected = Assert.Single(service.Candidates.Where(candidate => candidate.IsSelected));
|
||||
var selected = Assert.Single(service.Candidates, candidate => candidate.IsSelected);
|
||||
Assert.Equal("com.example.AppDriver", selected.ProviderClass);
|
||||
Assert.Contains(service.Candidates.Select(candidate => candidate.ProviderClass), provider => provider == "com.example.LibDriver");
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.IO.Compression;
|
||||
using Xunit;
|
||||
using System.Text;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.Signature;
|
||||
@@ -31,7 +32,7 @@ public sealed class JavaSignatureManifestAnalyzerTests
|
||||
}
|
||||
|
||||
var javaArchive = JavaArchive.Load(jarPath, "libs/app.jar");
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var attributes = JavaSignatureManifestAnalyzer.ExtractLoaderAttributes(javaArchive, cancellationToken);
|
||||
|
||||
@@ -69,7 +70,7 @@ public sealed class JavaSignatureManifestAnalyzerTests
|
||||
}
|
||||
|
||||
var javaArchive = JavaArchive.Load(jarPath, "libs/boot.jar");
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var attributes = JavaSignatureManifestAnalyzer.ExtractLoaderAttributes(javaArchive, cancellationToken);
|
||||
|
||||
@@ -103,7 +104,7 @@ public sealed class JavaSignatureManifestAnalyzerTests
|
||||
}
|
||||
|
||||
var javaArchive = JavaArchive.Load(jarPath, "libs/agent.jar");
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var attributes = JavaSignatureManifestAnalyzer.ExtractLoaderAttributes(javaArchive, cancellationToken);
|
||||
|
||||
@@ -138,7 +139,7 @@ public sealed class JavaSignatureManifestAnalyzerTests
|
||||
}
|
||||
|
||||
var javaArchive = JavaArchive.Load(jarPath, "libs/mrjar.jar");
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var attributes = JavaSignatureManifestAnalyzer.ExtractLoaderAttributes(javaArchive, cancellationToken);
|
||||
|
||||
@@ -172,7 +173,7 @@ public sealed class JavaSignatureManifestAnalyzerTests
|
||||
}
|
||||
|
||||
var javaArchive = JavaArchive.Load(jarPath, "libs/empty.jar");
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var attributes = JavaSignatureManifestAnalyzer.ExtractLoaderAttributes(javaArchive, cancellationToken);
|
||||
|
||||
@@ -294,7 +295,7 @@ public sealed class JavaSignatureManifestAnalyzerTests
|
||||
}
|
||||
|
||||
var javaArchive = JavaArchive.Load(jarPath, "libs/app.jar");
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var analysis = JavaSignatureManifestAnalyzer.Analyze(javaArchive, cancellationToken);
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.Linq;
|
||||
using System.Threading;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.TestUtilities;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Java.Tests;
|
||||
|
||||
@@ -18,7 +19,7 @@ public sealed class JavaWorkspaceNormalizerTests
|
||||
JavaFixtureBuilder.CreateWarArchive(root, "apps/sample.war");
|
||||
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, CancellationToken.None);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, TestContext.Current.CancellationToken);
|
||||
|
||||
var archivesByPath = workspace.Archives.ToDictionary(
|
||||
archive => archive.RelativePath.Replace('\\', '/'),
|
||||
@@ -52,7 +53,7 @@ public sealed class JavaWorkspaceNormalizerTests
|
||||
JavaFixtureBuilder.CreateMultiReleaseJar(root, "libs/mr.jar");
|
||||
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, CancellationToken.None);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, TestContext.Current.CancellationToken);
|
||||
|
||||
var archive = Assert.Single(workspace.Archives);
|
||||
|
||||
@@ -78,7 +79,7 @@ public sealed class JavaWorkspaceNormalizerTests
|
||||
JavaFixtureBuilder.CreateRuntimeImage(root, "runtime/jre");
|
||||
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, CancellationToken.None);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, TestContext.Current.CancellationToken);
|
||||
|
||||
var runtime = Assert.Single(workspace.RuntimeImages);
|
||||
Assert.Equal("17.0.8", runtime.JavaVersion);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Immutable;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.Gradle;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Java.Tests.Parsers;
|
||||
@@ -8,7 +9,7 @@ public sealed class GradleGroovyParserTests
|
||||
[Fact]
|
||||
public async Task ParsesStringNotationDependenciesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation 'org.slf4j:slf4j-api:1.7.36'
|
||||
@@ -50,7 +51,7 @@ public sealed class GradleGroovyParserTests
|
||||
[Fact]
|
||||
public async Task ParsesMapNotationDependenciesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
// Parser supports map notation without parentheses
|
||||
var content = """
|
||||
dependencies {
|
||||
@@ -86,7 +87,7 @@ public sealed class GradleGroovyParserTests
|
||||
[Fact]
|
||||
public async Task ResolvesPropertyPlaceholdersAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation "org.slf4j:slf4j-api:${slf4jVersion}"
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Immutable;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.Gradle;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Java.Tests.Parsers;
|
||||
@@ -8,7 +9,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesStringNotationDependenciesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation("org.slf4j:slf4j-api:1.7.36")
|
||||
@@ -49,7 +50,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesNamedArgumentsNotationAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation(group = "org.apache.commons", name = "commons-lang3", version = "3.12.0")
|
||||
@@ -82,7 +83,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesPlatformDependencyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation(platform("org.springframework.boot:spring-boot-dependencies:3.1.0"))
|
||||
@@ -112,7 +113,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesEnforcedPlatformDependencyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
dependencies {
|
||||
api(enforcedPlatform("org.springframework.cloud:spring-cloud-dependencies:2022.0.3"))
|
||||
@@ -139,7 +140,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task TracksVersionCatalogReferencesAsUnresolvedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation(libs.guava)
|
||||
@@ -166,7 +167,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesAllConfigurationTypesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation("com.example:impl:1.0")
|
||||
@@ -205,7 +206,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesPluginsBlockAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
plugins {
|
||||
id("org.springframework.boot") version "3.1.0"
|
||||
@@ -240,7 +241,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ExtractsGroupAndVersionAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
group = "com.example"
|
||||
version = "1.0.0-SNAPSHOT"
|
||||
@@ -267,7 +268,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesClassifierAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation("com.example:library:1.0.0:sources")
|
||||
@@ -303,7 +304,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task HandlesNonExistentFileAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var result = await GradleKotlinParser.ParseAsync("/nonexistent/path/build.gradle.kts", null, cancellationToken);
|
||||
|
||||
@@ -313,7 +314,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ResolvesPropertyPlaceholderAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
// The Kotlin parser treats any coordinate containing $ as unresolved
|
||||
// because string interpolation happens at Gradle evaluation time.
|
||||
// Use a coordinate without $ to test basic parsing
|
||||
@@ -342,7 +343,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task TracksUnresolvedStringInterpolationAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation("$myGroup:$myArtifact:$myVersion")
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.Gradle;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Java.Tests.Parsers;
|
||||
|
||||
@@ -175,7 +176,7 @@ public sealed class GradlePropertiesParserTests
|
||||
[Fact]
|
||||
public async Task HandlesNonExistentFileAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var result = await GradlePropertiesParser.ParseAsync("/nonexistent/gradle.properties", cancellationToken);
|
||||
|
||||
@@ -185,7 +186,7 @@ public sealed class GradlePropertiesParserTests
|
||||
[Fact]
|
||||
public async Task ParsesFileAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
group=com.example
|
||||
version=1.0.0
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.Gradle;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Java.Tests.Parsers;
|
||||
|
||||
@@ -7,7 +8,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesVersionSectionAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
[versions]
|
||||
guava = "31.1-jre"
|
||||
@@ -33,7 +34,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesLibrariesSectionAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
[libraries]
|
||||
guava = "com.google.guava:guava:31.1-jre"
|
||||
@@ -62,7 +63,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesModuleNotationAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
[versions]
|
||||
guava = "31.1-jre"
|
||||
@@ -93,7 +94,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesGroupNameNotationAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
[versions]
|
||||
commons = "3.12.0"
|
||||
@@ -124,7 +125,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ResolvesVersionRefAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
[versions]
|
||||
slf4j = "2.0.7"
|
||||
@@ -159,7 +160,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task HandlesInlineVersionAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
[libraries]
|
||||
junit = { module = "junit:junit", version = "4.13.2" }
|
||||
@@ -185,7 +186,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesRichVersionsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
[versions]
|
||||
guava = { strictly = "31.1-jre" }
|
||||
@@ -212,7 +213,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesBundlesSectionAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
[libraries]
|
||||
guava = "com.google.guava:guava:31.1-jre"
|
||||
@@ -249,7 +250,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesPluginsSectionAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
[versions]
|
||||
kotlin = "1.9.0"
|
||||
@@ -286,7 +287,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task GetLibraryByAliasAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
[libraries]
|
||||
guava = "com.google.guava:guava:31.1-jre"
|
||||
@@ -321,7 +322,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ToDependenciesConvertsAllLibrariesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
[versions]
|
||||
guava = "31.1-jre"
|
||||
@@ -361,7 +362,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task HandlesNonExistentFileAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var result = await GradleVersionCatalogParser.ParseAsync("/nonexistent/libs.versions.toml", cancellationToken);
|
||||
|
||||
@@ -371,7 +372,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesCompleteVersionCatalogAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
[versions]
|
||||
kotlin = "1.9.0"
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.Maven;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Java.Tests.Parsers;
|
||||
|
||||
@@ -7,7 +8,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task ImportsSimpleBomAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -71,7 +72,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task ReturnsNullForMissingBomAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -91,7 +92,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task CachesImportedBomsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -141,7 +142,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task HandlesNestedBomImportsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -200,7 +201,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task ChildBomOverridesParentVersionsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -283,7 +284,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task RespectsMaxDepthLimitAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -346,7 +347,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task HandlesCircularBomReferencesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -435,7 +436,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task ExtractsBomPropertiesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.BuildMetadata;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.Maven;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.TestUtilities;
|
||||
|
||||
@@ -9,7 +10,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task BuildsEffectivePomWithParentPropertiesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -73,7 +74,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task MergesParentDependencyManagementAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -152,7 +153,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task ChildDependencyManagementOverridesParentAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -224,7 +225,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task HandlesStandalonePomAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -266,7 +267,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task ResolvesPropertyInDependencyManagementVersionAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -315,7 +316,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task TracksVersionSourceCorrectlyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -404,7 +405,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task CollectsAllLicensesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -458,7 +459,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task GetsUnresolvedDependenciesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -502,7 +503,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task PopulatesManagedVersionsIndexAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.Maven;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Java.Tests.Parsers;
|
||||
|
||||
@@ -308,7 +309,7 @@ public sealed class MavenLocalRepositoryTests
|
||||
[Fact]
|
||||
public async Task ReadPomAsyncReturnsNullForMissingPomAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -329,7 +330,7 @@ public sealed class MavenLocalRepositoryTests
|
||||
[Fact]
|
||||
public async Task ReadPomAsyncReturnsParsedPomAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
|
||||
try
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.Maven;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.TestUtilities;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Java.Tests.Parsers;
|
||||
@@ -8,7 +9,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ResolvesRelativePathParentAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -63,7 +64,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ResolvesDefaultRelativePathAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -111,7 +112,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ResolvesMultiLevelParentChainAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -182,7 +183,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ReturnsUnresolvedForMissingParentAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -218,7 +219,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task HandlesNoParentAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -251,7 +252,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task InheritsGroupIdFromParentAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -298,7 +299,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task InheritsVersionFromParentAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -343,7 +344,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ResolvesDependencyVersionFromManagementAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -407,7 +408,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ResolvesPropertyInDependencyVersionAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -449,7 +450,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task CollectsLicensesFromChainAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -503,7 +504,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ChildPropertyOverridesParentPropertyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.Maven;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Java.Tests.Parsers;
|
||||
|
||||
@@ -7,7 +8,7 @@ public sealed class MavenPomParserTests
|
||||
[Fact]
|
||||
public async Task ParsesDependenciesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0">
|
||||
@@ -59,7 +60,7 @@ public sealed class MavenPomParserTests
|
||||
[Fact]
|
||||
public async Task ParsesPropertiesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project>
|
||||
@@ -99,7 +100,7 @@ public sealed class MavenPomParserTests
|
||||
[Fact]
|
||||
public async Task ParsesLicensesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project>
|
||||
@@ -136,7 +137,7 @@ public sealed class MavenPomParserTests
|
||||
[Fact]
|
||||
public async Task ParsesParentReferenceAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project>
|
||||
@@ -169,7 +170,7 @@ public sealed class MavenPomParserTests
|
||||
[Fact]
|
||||
public async Task ParsesDependencyManagementAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var content = """
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.IO.Compression;
|
||||
using Xunit;
|
||||
using System.Text;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Java.Internal.Shading;
|
||||
|
||||
@@ -9,7 +10,7 @@ public sealed class ShadedJarDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectsMultiplePomPropertiesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var jarPath = Path.Combine(Path.GetTempPath(), $"shaded-{Guid.NewGuid()}.jar");
|
||||
|
||||
try
|
||||
@@ -36,7 +37,7 @@ public sealed class ShadedJarDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectsDependencyReducedPomAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var jarPath = Path.Combine(Path.GetTempPath(), $"shade-plugin-{Guid.NewGuid()}.jar");
|
||||
|
||||
try
|
||||
@@ -63,7 +64,7 @@ public sealed class ShadedJarDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectsRelocatedPackagesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var jarPath = Path.Combine(Path.GetTempPath(), $"relocated-{Guid.NewGuid()}.jar");
|
||||
|
||||
try
|
||||
@@ -91,7 +92,7 @@ public sealed class ShadedJarDetectorTests
|
||||
[Fact]
|
||||
public async Task ReturnsNotShadedForRegularJarAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var jarPath = Path.Combine(Path.GetTempPath(), $"regular-{Guid.NewGuid()}.jar");
|
||||
|
||||
try
|
||||
|
||||
@@ -11,7 +11,7 @@ public class Phase22SmokeTests
|
||||
[Fact]
|
||||
public async Task Phase22_Fixture_Matches_Golden()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var baseDir = AppContext.BaseDirectory;
|
||||
var repoRoot = Path.GetFullPath(Path.Combine(baseDir,
|
||||
"..", "..", "..", "..", "..", "..", ".."));
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Text.Json;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Node;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.Harness;
|
||||
|
||||
@@ -427,7 +428,7 @@ public sealed class NodeDeterminismTests : IDisposable
|
||||
return await LanguageAnalyzerTestHarness.RunToJsonAsync(
|
||||
_tempDir,
|
||||
analyzers,
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
private static List<string> ExtractPackageNames(string json)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Text;
|
||||
using Xunit;
|
||||
using System.Text.Json;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Node;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Node.Internal;
|
||||
@@ -609,6 +610,6 @@ public sealed class NodeEdgeCaseAndErrorTests : IDisposable
|
||||
return await LanguageAnalyzerTestHarness.RunToJsonAsync(
|
||||
_tempDir,
|
||||
analyzers,
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Text.Json;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Node;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.Harness;
|
||||
|
||||
@@ -552,8 +553,8 @@ public sealed class NodeEntrypointDetectionTests : IDisposable
|
||||
.Where(e => e.TryGetProperty("source", out var src) && src.GetString() == "package.json:entrypoint")
|
||||
.ToList();
|
||||
// Should have entrypoint evidence with normalized path (starts with dist/, not ./dist/)
|
||||
Assert.True(evidence.Any(e => e.TryGetProperty("value", out var val) &&
|
||||
val.GetString()!.StartsWith("dist/", StringComparison.Ordinal)));
|
||||
Assert.Contains(evidence, e => e.TryGetProperty("value", out var val) &&
|
||||
val.GetString()!.StartsWith("dist/", StringComparison.Ordinal));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -680,6 +681,6 @@ public sealed class NodeEntrypointDetectionTests : IDisposable
|
||||
return await LanguageAnalyzerTestHarness.RunToJsonAsync(
|
||||
_tempDir,
|
||||
analyzers,
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Node;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.Harness;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.TestUtilities;
|
||||
|
||||
@@ -9,7 +10,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task WorkspaceFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "workspaces");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -28,7 +29,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task VersionTargetsAreCapturedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "version-targets");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -47,7 +48,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task TarballPackageIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "version-targets");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -66,7 +67,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task YarnPnpCachePackagesAreParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "yarn-pnp");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -85,7 +86,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task YarnPnpFlagIsEmittedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "yarn-pnp");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -104,7 +105,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task EntrypointsAreCapturedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "entrypoints");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -123,7 +124,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ShebangEntrypointsAreCapturedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "shebang");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -142,7 +143,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task Phase22BundleNativeWasmObservationAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "phase22");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -161,7 +162,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ContainerLayersAreScannedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "container-layers");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -177,7 +178,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DynamicImportsEmitEvidenceAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "imports-dynamic");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -193,7 +194,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockOnlyPackageLockEmitsDeclaredOnlyComponentsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "lock-only-package-lock");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -209,7 +210,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockOnlyYarnBerryEmitsDeclaredOnlyComponentsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "lock-only-yarn-berry");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -225,7 +226,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockOnlyPnpmEmitsDeclaredOnlyComponentsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "lock-only-pnpm");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -241,7 +242,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PnpmVirtualStoreIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "pnpm-store");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -257,7 +258,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task RuntimeEvidenceIsIngestedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "runtime-evidence");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -273,7 +274,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DockerfileNodeOptionsWarningIsEmittedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "container-env");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -289,7 +290,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PackageJsonDeclaredOnlyDependenciesUseExplicitKeyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "declared-only-package-json");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Node.Internal;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Node.Tests.Node;
|
||||
|
||||
@@ -33,7 +34,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
public async Task LoadAsync_NoLockfiles_ReturnsEmpty()
|
||||
{
|
||||
// No lockfiles, no package.json
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Empty(result.DeclaredPackages);
|
||||
}
|
||||
@@ -56,7 +57,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
|
||||
Environment.CurrentDirectory = tempDirectory;
|
||||
|
||||
var result = await NodeLockData.LoadAsync(string.Empty, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(string.Empty, TestContext.Current.CancellationToken);
|
||||
Assert.Empty(result.DeclaredPackages);
|
||||
}
|
||||
finally
|
||||
@@ -79,7 +80,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
var entry = result.DeclaredPackages.First();
|
||||
@@ -101,7 +102,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
var names = result.DeclaredPackages.Select(x => x.Name).ToArray();
|
||||
Assert.Equal(["alpha", "beta", "zeta"], names);
|
||||
@@ -131,7 +132,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
var entry = result.DeclaredPackages.First();
|
||||
@@ -179,7 +180,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
var entry = result.DeclaredPackages.First();
|
||||
@@ -203,7 +204,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.Equal("express", result.DeclaredPackages.First().Name);
|
||||
@@ -226,7 +227,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(2, result.DeclaredPackages.Count);
|
||||
Assert.Contains(result.DeclaredPackages, e => e.Name == "@angular/core" && e.Version == "17.0.0");
|
||||
@@ -251,7 +252,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.Equal("valid", result.DeclaredPackages.First().Name);
|
||||
@@ -274,7 +275,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(2, result.DeclaredPackages.Count);
|
||||
Assert.Contains(result.DeclaredPackages, e => e.Name == "parent");
|
||||
@@ -302,7 +303,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(2, result.DeclaredPackages.Count);
|
||||
Assert.Contains(result.DeclaredPackages, e => e.Name == "parent");
|
||||
@@ -328,7 +329,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.Equal("actual-package", result.DeclaredPackages.First().Name);
|
||||
@@ -354,7 +355,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
var entry = result.DeclaredPackages.First();
|
||||
@@ -381,7 +382,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(2, result.DeclaredPackages.Count);
|
||||
Assert.Contains(result.DeclaredPackages, e => e.Name == "parent");
|
||||
@@ -402,7 +403,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.Equal("@babel/core", result.DeclaredPackages.First().Name);
|
||||
@@ -420,7 +421,7 @@ public sealed class NodeLockDataTests : IDisposable
|
||||
""");
|
||||
|
||||
// Should continue with yarn.lock parsing
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.Equal("lodash", result.DeclaredPackages.First().Name);
|
||||
@@ -443,7 +444,7 @@ lodash@^4.17.21:
|
||||
integrity ""sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ""
|
||||
");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
var entry = result.DeclaredPackages.First();
|
||||
@@ -464,7 +465,7 @@ lodash@^4.17.21:
|
||||
version ""20.10.0""
|
||||
");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(2, result.DeclaredPackages.Count);
|
||||
Assert.Contains(result.DeclaredPackages, e => e.Name == "@babel/core");
|
||||
@@ -479,7 +480,7 @@ lodash@^4.17.21:
|
||||
version ""4.17.21""
|
||||
");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.Equal("lodash", result.DeclaredPackages.First().Name);
|
||||
@@ -493,7 +494,7 @@ lodash@^4.17.21:
|
||||
version ""4.18.2""
|
||||
");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.Equal("express", result.DeclaredPackages.First().Name);
|
||||
@@ -506,7 +507,7 @@ lodash@^4.17.21:
|
||||
await File.WriteAllTextAsync(Path.Combine(_tempDir, "yarn.lock"),
|
||||
"lodash@^4.17.21:\n version \"4.17.21\"\n resolved \"https://example.com/lodash.tgz\"\n integrity \"sha512-abc\"");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.Equal("lodash", result.DeclaredPackages.First().Name);
|
||||
@@ -526,7 +527,7 @@ axios@^1.6.0:
|
||||
version ""1.6.2""
|
||||
");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(3, result.DeclaredPackages.Count);
|
||||
Assert.Contains(result.DeclaredPackages, e => e.Name == "express");
|
||||
@@ -546,7 +547,7 @@ valid@^2.0.0:
|
||||
version ""2.0.0""
|
||||
");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(2, result.DeclaredPackages.Count);
|
||||
Assert.Contains(result.DeclaredPackages, e => e.Name == "@scope/package");
|
||||
@@ -566,7 +567,7 @@ valid@^2.0.0:
|
||||
checksum: 10c0deadbeef
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.DoesNotContain(result.DeclaredPackages, e => e.Name == "__metadata");
|
||||
@@ -598,7 +599,7 @@ valid@^2.0.0:
|
||||
" resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ}\n";
|
||||
await File.WriteAllTextAsync(Path.Combine(_tempDir, "pnpm-lock.yaml"), content);
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
var entry = result.DeclaredPackages.First();
|
||||
@@ -621,7 +622,7 @@ valid@^2.0.0:
|
||||
" resolution: {integrity: sha512-def456}\n";
|
||||
await File.WriteAllTextAsync(Path.Combine(_tempDir, "pnpm-lock.yaml"), content);
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(2, result.DeclaredPackages.Count);
|
||||
Assert.Contains(result.DeclaredPackages, e => e.Name == "@angular/core");
|
||||
@@ -638,7 +639,7 @@ valid@^2.0.0:
|
||||
" resolution: {integrity: sha512-xyz}\n";
|
||||
await File.WriteAllTextAsync(Path.Combine(_tempDir, "pnpm-lock.yaml"), content);
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.Equal("4.18.2", result.DeclaredPackages.First().Version);
|
||||
@@ -653,7 +654,7 @@ valid@^2.0.0:
|
||||
" resolution: {integrity: sha512-xyz}\n";
|
||||
await File.WriteAllTextAsync(Path.Combine(_tempDir, "pnpm-lock.yaml"), content);
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
var entry = result.DeclaredPackages.Single();
|
||||
@@ -672,7 +673,7 @@ valid@^2.0.0:
|
||||
" resolution: {tarball: https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz, integrity: sha512-abc}\n";
|
||||
await File.WriteAllTextAsync(Path.Combine(_tempDir, "pnpm-lock.yaml"), content);
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.Contains("lodash-4.17.21.tgz", result.DeclaredPackages.First().Resolved);
|
||||
@@ -687,7 +688,7 @@ valid@^2.0.0:
|
||||
" resolution: {tarball: file:../local-file-1.0.0.tgz}\n";
|
||||
await File.WriteAllTextAsync(Path.Combine(_tempDir, "pnpm-lock.yaml"), content);
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
var entry = result.DeclaredPackages.Single();
|
||||
@@ -706,7 +707,7 @@ valid@^2.0.0:
|
||||
" resolution: {integrity: sha512-snap}\n";
|
||||
await File.WriteAllTextAsync(Path.Combine(_tempDir, "pnpm-lock.yaml"), content);
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
var entry = result.DeclaredPackages.Single();
|
||||
@@ -725,7 +726,7 @@ valid@^2.0.0:
|
||||
" integrity: sha512-separate-line-integrity\n";
|
||||
await File.WriteAllTextAsync(Path.Combine(_tempDir, "pnpm-lock.yaml"), content);
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.Equal("sha512-separate-line-integrity", result.DeclaredPackages.First().Integrity);
|
||||
@@ -743,7 +744,7 @@ valid@^2.0.0:
|
||||
" resolution: {integrity: sha512-valid}\n";
|
||||
await File.WriteAllTextAsync(Path.Combine(_tempDir, "pnpm-lock.yaml"), content);
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(2, result.DeclaredPackages.Count);
|
||||
|
||||
@@ -776,7 +777,7 @@ valid@^2.0.0:
|
||||
" resolution: {integrity: sha512-axios}\n";
|
||||
await File.WriteAllTextAsync(Path.Combine(_tempDir, "pnpm-lock.yaml"), content);
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(3, result.DeclaredPackages.Count);
|
||||
}
|
||||
@@ -799,7 +800,7 @@ valid@^2.0.0:
|
||||
}
|
||||
""");
|
||||
|
||||
var lockData = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var lockData = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(lockData.TryGet("node_modules/lodash", "lodash", out var entry));
|
||||
Assert.NotNull(entry);
|
||||
@@ -814,7 +815,7 @@ valid@^2.0.0:
|
||||
version "4.17.21"
|
||||
""");
|
||||
|
||||
var lockData = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var lockData = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(lockData.TryGet("", "lodash", out var entry));
|
||||
Assert.NotNull(entry);
|
||||
@@ -835,7 +836,7 @@ valid@^2.0.0:
|
||||
}
|
||||
""");
|
||||
|
||||
var lockData = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var lockData = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.False(lockData.TryGet("node_modules/express", "express", out var entry));
|
||||
Assert.Null(entry);
|
||||
@@ -855,7 +856,7 @@ valid@^2.0.0:
|
||||
}
|
||||
""");
|
||||
|
||||
var lockData = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var lockData = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(lockData.TryGet("node_modules\\lodash", "lodash", out var entry));
|
||||
Assert.NotNull(entry);
|
||||
@@ -892,7 +893,7 @@ valid@^2.0.0:
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
var lodash = result.DeclaredPackages.First(e => e.Name == "lodash");
|
||||
Assert.Equal(NodeDependencyScope.Production, lodash.Scope);
|
||||
@@ -918,7 +919,7 @@ valid@^2.0.0:
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(result.DependencyIndex.TryGetScope("express", out var scope));
|
||||
Assert.Equal(NodeDependencyScope.Production, scope);
|
||||
@@ -938,7 +939,7 @@ valid@^2.0.0:
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Empty(result.DeclaredPackages);
|
||||
}
|
||||
@@ -963,7 +964,7 @@ valid@^2.0.0:
|
||||
" resolution: {integrity: sha512-pnpm}\n";
|
||||
await File.WriteAllTextAsync(Path.Combine(_tempDir, "pnpm-lock.yaml"), pnpmContent);
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(3, result.DeclaredPackages.Count);
|
||||
Assert.Contains(result.DeclaredPackages, e => e.Name == "from-npm");
|
||||
@@ -983,7 +984,7 @@ valid@^2.0.0:
|
||||
}
|
||||
""");
|
||||
|
||||
var lockData = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var lockData = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(lockData.TryGet("node_modules/lodash", "lodash", out var entry));
|
||||
Assert.NotNull(entry);
|
||||
@@ -1005,7 +1006,7 @@ valid@^2.0.0:
|
||||
version "4.0.0"
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
// Both entries are kept in DeclaredPackages with different version keys
|
||||
Assert.Equal(2, result.DeclaredPackages.Count(e => e.Name == "lodash"));
|
||||
@@ -1039,7 +1040,7 @@ valid@^2.0.0:
|
||||
}
|
||||
""");
|
||||
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, CancellationToken.None);
|
||||
var result = await NodeLockData.LoadAsync(_tempDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DeclaredPackages);
|
||||
Assert.Equal("日本語", result.DeclaredPackages.First().Name);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.IO.Compression;
|
||||
using Xunit;
|
||||
using System.Text.Json;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Node;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.Harness;
|
||||
@@ -838,6 +839,6 @@ public sealed class NodePackageCollectorTraversalTests : IDisposable
|
||||
return await LanguageAnalyzerTestHarness.RunToJsonAsync(
|
||||
_tempDir,
|
||||
analyzers,
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ public class NodePhase22SampleLoaderTests
|
||||
public async Task TryLoadAsync_ReadsComponentsFromNdjson()
|
||||
{
|
||||
var root = Path.Combine("Fixtures");
|
||||
var records = await NodePhase22SampleLoader.TryLoadAsync(root, CancellationToken.None);
|
||||
var records = await NodePhase22SampleLoader.TryLoadAsync(root, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(3, records.Count);
|
||||
var native = records.Single(r => r.Type == "node:native");
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Php.Internal;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Php.Tests.Internal;
|
||||
|
||||
@@ -31,7 +32,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
public async Task LoadAsync_NoLockFile_ReturnsEmpty()
|
||||
{
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(result.IsEmpty);
|
||||
Assert.Empty(result.Packages);
|
||||
@@ -56,7 +57,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.False(result.IsEmpty);
|
||||
Assert.Single(result.Packages);
|
||||
@@ -82,7 +83,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.DevPackages);
|
||||
Assert.Equal("phpunit/phpunit", result.DevPackages[0].Name);
|
||||
@@ -100,7 +101,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal("a1b2c3d4e5f6", result.ContentHash);
|
||||
Assert.Equal("2.3.0", result.PluginApiVersion);
|
||||
@@ -125,7 +126,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.Packages);
|
||||
Assert.Equal("git", result.Packages[0].SourceType);
|
||||
@@ -151,7 +152,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.Packages);
|
||||
Assert.Equal("sha256hashhere", result.Packages[0].DistSha256);
|
||||
@@ -177,7 +178,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.Packages);
|
||||
Assert.NotEmpty(result.Packages[0].Autoload.Psr4);
|
||||
@@ -204,7 +205,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.Packages);
|
||||
Assert.Equal(2, result.Packages[0].Autoload.Classmap.Count);
|
||||
@@ -232,7 +233,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.Packages);
|
||||
Assert.Equal(2, result.Packages[0].Autoload.Files.Count);
|
||||
@@ -255,7 +256,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(3, result.Packages.Count);
|
||||
Assert.Single(result.DevPackages);
|
||||
@@ -268,7 +269,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result.LockSha256);
|
||||
Assert.Equal(64, result.LockSha256.Length); // SHA256 hex string length
|
||||
@@ -283,7 +284,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(lockPath, lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(lockPath, result.LockPath);
|
||||
}
|
||||
@@ -301,7 +302,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.Packages);
|
||||
Assert.Equal("valid/package", result.Packages[0].Name);
|
||||
@@ -340,7 +341,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.Packages);
|
||||
Assert.Equal(2, result.Packages[0].Autoload.Psr4.Count);
|
||||
@@ -363,7 +364,7 @@ public sealed class ComposerLockReaderTests : IDisposable
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.lock"), lockContent);
|
||||
|
||||
var context = CreateContext(_testDir);
|
||||
var result = await ComposerLockData.LoadAsync(context, CancellationToken.None);
|
||||
var result = await ComposerLockData.LoadAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(result.Packages);
|
||||
Assert.Contains("src/helpers.php", result.Packages[0].Autoload.Files);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Php.Internal;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Php.Tests.Internal;
|
||||
|
||||
@@ -32,7 +33,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
[Fact]
|
||||
public async Task LoadAsync_NullPath_ReturnsNull()
|
||||
{
|
||||
var result = await PhpComposerManifestReader.LoadAsync(null!, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(null!, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
@@ -40,7 +41,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
[Fact]
|
||||
public async Task LoadAsync_EmptyPath_ReturnsNull()
|
||||
{
|
||||
var result = await PhpComposerManifestReader.LoadAsync("", CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync("", TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
@@ -48,7 +49,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
[Fact]
|
||||
public async Task LoadAsync_NonExistentDirectory_ReturnsNull()
|
||||
{
|
||||
var result = await PhpComposerManifestReader.LoadAsync("/nonexistent/path", CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync("/nonexistent/path", TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
@@ -56,7 +57,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
[Fact]
|
||||
public async Task LoadAsync_NoComposerJson_ReturnsNull()
|
||||
{
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
@@ -66,7 +67,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
{
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), "{ invalid json }");
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
@@ -83,7 +84,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
}";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("vendor/package", result.Name);
|
||||
@@ -102,7 +103,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
}";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("MIT OR Apache-2.0", result.License);
|
||||
@@ -120,7 +121,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
}";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(2, result.Authors.Count);
|
||||
@@ -141,7 +142,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
}";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(3, result.Require.Count);
|
||||
@@ -162,7 +163,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
}";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(2, result.RequireDev.Count);
|
||||
@@ -183,7 +184,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
}";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.NotEmpty(result.Autoload.Psr4);
|
||||
@@ -201,7 +202,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
}";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(2, result.Autoload.Classmap.Count);
|
||||
@@ -220,7 +221,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
}";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(2, result.Autoload.Files.Count);
|
||||
@@ -240,7 +241,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
}";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(2, result.Scripts.Count);
|
||||
@@ -259,7 +260,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
}";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Single(result.Scripts);
|
||||
@@ -276,7 +277,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
}";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(2, result.Bin.Count);
|
||||
@@ -293,7 +294,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
}";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("dev", result.MinimumStability);
|
||||
@@ -305,7 +306,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
var manifest = @"{ ""name"": ""vendor/package"" }";
|
||||
await File.WriteAllTextAsync(Path.Combine(_testDir, "composer.json"), manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.NotNull(result.Sha256);
|
||||
@@ -320,7 +321,7 @@ public sealed class PhpComposerManifestReaderTests : IDisposable
|
||||
var manifestPath = Path.Combine(_testDir, "composer.json");
|
||||
await File.WriteAllTextAsync(manifestPath, manifest);
|
||||
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, CancellationToken.None);
|
||||
var result = await PhpComposerManifestReader.LoadAsync(_testDir, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(manifestPath, result.ManifestPath);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Text;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Php.Internal;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Php.Tests.Internal;
|
||||
@@ -36,7 +37,7 @@ public sealed class PhpPharScannerTests : IDisposable
|
||||
var result = await PhpPharScanner.ScanFileAsync(
|
||||
Path.Combine(_testDir, "nonexistent.phar"),
|
||||
"nonexistent.phar",
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
@@ -44,7 +45,7 @@ public sealed class PhpPharScannerTests : IDisposable
|
||||
[Fact]
|
||||
public async Task ScanFileAsync_NullPath_ReturnsNull()
|
||||
{
|
||||
var result = await PhpPharScanner.ScanFileAsync(null!, "test.phar", CancellationToken.None);
|
||||
var result = await PhpPharScanner.ScanFileAsync(null!, "test.phar", TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
@@ -52,7 +53,7 @@ public sealed class PhpPharScannerTests : IDisposable
|
||||
[Fact]
|
||||
public async Task ScanFileAsync_EmptyPath_ReturnsNull()
|
||||
{
|
||||
var result = await PhpPharScanner.ScanFileAsync("", "test.phar", CancellationToken.None);
|
||||
var result = await PhpPharScanner.ScanFileAsync("", "test.phar", TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
@@ -63,7 +64,7 @@ public sealed class PhpPharScannerTests : IDisposable
|
||||
var filePath = Path.Combine(_testDir, "invalid.phar");
|
||||
await File.WriteAllTextAsync(filePath, "This is not a valid PHAR file");
|
||||
|
||||
var result = await PhpPharScanner.ScanFileAsync(filePath, "invalid.phar", CancellationToken.None);
|
||||
var result = await PhpPharScanner.ScanFileAsync(filePath, "invalid.phar", TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
@@ -77,7 +78,7 @@ public sealed class PhpPharScannerTests : IDisposable
|
||||
var filePath = Path.Combine(_testDir, "minimal.phar");
|
||||
await File.WriteAllBytesAsync(filePath, pharContent);
|
||||
|
||||
var result = await PhpPharScanner.ScanFileAsync(filePath, "minimal.phar", CancellationToken.None);
|
||||
var result = await PhpPharScanner.ScanFileAsync(filePath, "minimal.phar", TestContext.Current.CancellationToken);
|
||||
|
||||
// May return null if manifest parsing fails, but should not throw
|
||||
// The minimal PHAR may not have a valid manifest
|
||||
@@ -95,7 +96,7 @@ public sealed class PhpPharScannerTests : IDisposable
|
||||
var filePath = Path.Combine(_testDir, "hash.phar");
|
||||
await File.WriteAllBytesAsync(filePath, pharContent);
|
||||
|
||||
var result = await PhpPharScanner.ScanFileAsync(filePath, "hash.phar", CancellationToken.None);
|
||||
var result = await PhpPharScanner.ScanFileAsync(filePath, "hash.phar", TestContext.Current.CancellationToken);
|
||||
|
||||
if (result is not null)
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Php;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.Harness;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.TestUtilities;
|
||||
|
||||
@@ -11,7 +12,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ComposerLockPackagesAreEmittedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "basic");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -25,7 +26,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LaravelExtendedFixtureAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "laravel-extended");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -39,7 +40,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SymfonyFixtureAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "symfony");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -53,7 +54,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task WordPressFixtureAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "wordpress");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -67,7 +68,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LegacyPhpFixtureAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "legacy");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -81,7 +82,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PharFixtureAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "phar");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -95,7 +96,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ContainerFixtureAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "container");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.Capabilities;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.VirtualFileSystem;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Python.Tests.Capabilities;
|
||||
@@ -8,7 +9,7 @@ public sealed class PythonCapabilityDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_SubprocessImport_FindsProcessExecution()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -41,7 +42,7 @@ public sealed class PythonCapabilityDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_EvalUsage_FindsCodeExecution()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -75,7 +76,7 @@ public sealed class PythonCapabilityDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_CtypesImport_FindsNativeCodeExecution()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -108,7 +109,7 @@ public sealed class PythonCapabilityDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_MultipleCapabilities_FindsAll()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -146,7 +147,7 @@ public sealed class PythonCapabilityDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_EnvironmentAccess_FindsEnvironmentCapability()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.Entrypoints;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.VirtualFileSystem;
|
||||
using System.IO.Compression;
|
||||
|
||||
@@ -9,7 +10,7 @@ public sealed class PythonEntrypointDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsPackageMain()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -41,7 +42,7 @@ public sealed class PythonEntrypointDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsConsoleScripts()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -90,7 +91,7 @@ mygui = mypackage.gui:start
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsZipappMain()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -124,7 +125,7 @@ mygui = mypackage.gui:start
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsDjangoManage()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -153,7 +154,7 @@ mygui = mypackage.gui:start
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsDjangoWsgiAsgi()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -199,7 +200,7 @@ mygui = mypackage.gui:start
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsLambdaHandler()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -228,7 +229,7 @@ mygui = mypackage.gui:start
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsStandaloneScriptsWithMainGuard()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -258,7 +259,7 @@ mygui = mypackage.gui:start
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsClickCliApp()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -293,7 +294,7 @@ if __name__ == '__main__':
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsProcfileEntrypoints()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -326,7 +327,7 @@ if __name__ == '__main__':
|
||||
[Fact]
|
||||
public async Task PythonEntrypointAnalysis_ReturnsOrganizedResults()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Immutable;
|
||||
using Xunit;
|
||||
using System.Text.Json;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.Capabilities;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.Entrypoints;
|
||||
@@ -25,7 +26,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task NamespacePackage_DetectsMultipleSubpackages()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = Path.Combine(FixturesPath, "namespace-pkg");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
@@ -57,7 +58,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task SimpleVenv_DetectsPackageWithEntrypoints()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = Path.Combine(FixturesPath, "simple-venv");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
@@ -88,7 +89,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task LayeredEditable_DetectsEditableInstall()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = Path.Combine(FixturesPath, "layered-editable");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
@@ -117,7 +118,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task Container_DetectsPackagesAcrossLayers()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = Path.Combine(FixturesPath, "container");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
@@ -170,7 +171,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task FrameworkDetection_DetectsFlask()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = Path.Combine(FixturesPath, "container", "layer2", "app");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
@@ -194,7 +195,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task CapabilityDetection_DetectsNetworkAccess()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = Path.Combine(FixturesPath, "lambda-handler", "app");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
@@ -219,7 +220,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task ObservationBuilder_ProducesValidDocument()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = Path.Combine(FixturesPath, "simple-venv");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Immutable;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.Framework;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.VirtualFileSystem;
|
||||
|
||||
@@ -9,7 +10,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_DjangoProject_FindsDjangoHints()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -66,7 +67,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_FlaskApp_FindsFlaskHints()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -106,7 +107,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_FastAPIApp_FindsFastAPIHints()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -147,7 +148,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_CeleryApp_FindsCeleryHints()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -185,7 +186,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_AwsLambdaHandler_FindsLambdaHint()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -221,7 +222,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_ClickCli_FindsClickHints()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -261,7 +262,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_TyperCli_FindsTyperHints()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -300,7 +301,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_GunicornConfig_FindsGunicornHint()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -332,7 +333,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_LoggingConfig_FindsLoggingHint()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -372,7 +373,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_JupyterNotebook_FindsJupyterHint()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -408,7 +409,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_StreamlitApp_FindsStreamlitHint()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -513,7 +514,7 @@ public sealed class PythonProjectConfigParserTests
|
||||
[Fact]
|
||||
public async Task ParsePyprojectAsync_WithOptionalDependencies_ExtractsExtras()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -564,7 +565,7 @@ public sealed class PythonProjectConfigParserTests
|
||||
[Fact]
|
||||
public async Task ParsePyprojectAsync_PoetryExtras_ExtractsExtras()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.Imports;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.VirtualFileSystem;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Python.Tests.Imports;
|
||||
@@ -8,7 +9,7 @@ public sealed class PythonImportGraphTests
|
||||
[Fact]
|
||||
public async Task BuildAsync_DiscoversModules()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -40,7 +41,7 @@ public sealed class PythonImportGraphTests
|
||||
[Fact]
|
||||
public async Task BuildAsync_ExtractsImports()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -83,7 +84,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task BuildAsync_BuildsEdges()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -133,7 +134,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task BuildAsync_ResolvesRelativeImports()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -180,7 +181,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task BuildAsync_DetectsCycles()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -223,7 +224,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task BuildAsync_TopologicalOrder_NoCycles()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -272,7 +273,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task BuildAsync_TopologicalOrder_WithCycles_ReturnsNull()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -306,7 +307,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task GetDependencies_ReturnsDirectDependencies()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -346,7 +347,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task GetDependents_ReturnsModulesThatImportThis()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -386,7 +387,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task PythonImportAnalysis_CategoriesImports()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -438,7 +439,7 @@ mod = importlib.import_module('dynamic')
|
||||
[Fact]
|
||||
public async Task PythonImportAnalysis_ToMetadata_GeneratesExpectedKeys()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -468,7 +469,7 @@ mod = importlib.import_module('dynamic')
|
||||
[Fact]
|
||||
public async Task PythonImportAnalysis_GetTransitiveDependencies_ReturnsAllDeps()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Immutable;
|
||||
using Xunit;
|
||||
using System.Text.Json;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.Observations;
|
||||
|
||||
@@ -140,7 +141,7 @@ public sealed class PythonObservationSerializerTests
|
||||
[Fact]
|
||||
public async Task SerializeAsync_WritesToStream()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var document = new PythonObservationBuilder()
|
||||
.AddWarning("PY001", "Test")
|
||||
.Build();
|
||||
@@ -159,7 +160,7 @@ public sealed class PythonObservationSerializerTests
|
||||
[Fact]
|
||||
public async Task DeserializeAsync_ReadsFromStream()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var json = """
|
||||
{
|
||||
"schema": "python-aoc-v1",
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.Packaging;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.VirtualFileSystem;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Python.Tests.Packaging;
|
||||
@@ -8,7 +9,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_DistInfo_FindsPackages()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -117,7 +118,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_EggLink_FindsEditableInstall()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
var projectPath = Path.Combine(tempPath, "myproject");
|
||||
try
|
||||
@@ -178,7 +179,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_Poetry_FindsPoetryProject()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -262,7 +263,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_BuildsDependencyGraph()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -319,7 +320,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_EggInfo_FindsLegacySetuptoolsPackages()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -392,7 +393,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_EggInfo_WithInstalledFiles_HasDefinitiveConfidence()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -441,7 +442,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_EggInfo_ParsesRequiresTxtExtras()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -497,7 +498,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_EggInfo_PrefersDistInfo_WhenBothExist()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.IO.Compression;
|
||||
using Xunit;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
@@ -13,7 +14,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SimpleVenvFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "simple-venv");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -38,7 +39,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PipCacheFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "pip-cache");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -63,7 +64,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LayeredEditableFixtureMergesAcrossLayersAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "layered-editable");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -88,7 +89,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task CondaEnvFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "conda-env");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -107,7 +108,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task RequirementsIncludesEditableFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "requirements-includes-editable");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -126,7 +127,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PipfileLockDefaultDevelopFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "pipfile-lock-default-develop");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -145,7 +146,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task WheelWorkspaceFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "wheel-workspace");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -170,7 +171,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ZipappEmbeddedRequirementsFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "zipapp-embedded-requirements");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -192,7 +193,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ContainerWhiteoutsFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "container-whiteouts");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -211,7 +212,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task VendoredDirectoryFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "vendored-directory");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -230,7 +231,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockfileCollectorEmitsDeclaredOnlyComponentsAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -271,7 +272,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task EditableRequirementsUseExplicitKeyWithoutHostPathLeakAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
|
||||
try
|
||||
@@ -332,7 +333,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task WheelArchiveDistInfo_IsVerifiedFromRecordAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -476,7 +477,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DetectsSitecustomizeStartupHooksAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -515,7 +516,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DetectsPthFilesWithImportDirectivesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -554,7 +555,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DetectsOciLayerSitePackagesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -618,7 +619,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task EggInfoPackagesAreDetectedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "egg-info");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
@@ -645,7 +646,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DetectsPythonEnvironmentVariablesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -682,7 +683,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DetectsPyvenvConfigAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -798,7 +799,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task RequirementsWithIncludesAreFollowedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -841,7 +842,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PipfileLockDevelopSectionIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -890,7 +891,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task RequirementsDevTxtGetsScopeDevAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -930,7 +931,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task Pep508DirectReferenceIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -966,7 +967,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task RequirementsCycleIsDetectedAndHandledAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.Resolver;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.VirtualFileSystem;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Python.Tests.Resolver;
|
||||
@@ -8,7 +9,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolve_BuiltinModule_ReturnsBuiltin()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -36,7 +37,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolve_SourceModule_FindsModule()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -64,7 +65,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolve_Package_FindsPackage()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -95,7 +96,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolve_SubModule_FindsSubModule()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -126,7 +127,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolve_NamespacePackage_FindsNamespacePackage()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -159,7 +160,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolve_NotFound_ReturnsNotFound()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -186,7 +187,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task ResolveRelative_Level1_ResolvesFromPackage()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -218,7 +219,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task ResolveRelative_Level2_ResolvesFromParentPackage()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -254,7 +255,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task ProcessPthFiles_AddsPaths()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -359,7 +360,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolver_CachesResults()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Immutable;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.Packaging;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.Vendoring;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.VirtualFileSystem;
|
||||
@@ -16,7 +17,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.False(result.IsVendored);
|
||||
Assert.Equal(VendoringConfidence.None, result.Confidence);
|
||||
@@ -34,7 +35,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.True(result.Confidence >= VendoringConfidence.Low);
|
||||
@@ -53,7 +54,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("pip", "23.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.True(result.EmbeddedCount >= 3);
|
||||
@@ -76,7 +77,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("pip", "23.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.Contains("known-vendored-package", result.Markers);
|
||||
@@ -92,7 +93,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.Contains(result.Markers, m => m.Contains("third_party"));
|
||||
@@ -108,7 +109,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.Contains(result.Markers, m => m.Contains("extern"));
|
||||
@@ -126,7 +127,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
|
||||
var embeddedNames = result.EmbeddedPackages.Select(p => p.Name).ToList();
|
||||
Assert.DoesNotContain("__pycache__", embeddedNames);
|
||||
@@ -143,7 +144,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("pip", "23.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
|
||||
var urllib3 = result.EmbeddedPackages.FirstOrDefault(p => p.Name == "urllib3");
|
||||
Assert.NotNull(urllib3);
|
||||
@@ -160,7 +161,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("pip", "23.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
|
||||
var urllib3 = result.EmbeddedPackages.FirstOrDefault(p => p.Name == "urllib3");
|
||||
Assert.NotNull(urllib3);
|
||||
@@ -182,7 +183,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackageWithRecords("mypackage", "1.0.0", "/site-packages", recordFiles);
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.Contains("record-vendor-entries", result.Markers);
|
||||
@@ -200,7 +201,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.True(result.VendorPaths.Length >= 2);
|
||||
@@ -216,7 +217,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
var embeddedNames = result.EmbeddedPackages.Select(p => p.Name).ToList();
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Python.Internal.VirtualFileSystem;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Python.Tests.VirtualFileSystem;
|
||||
|
||||
@@ -7,7 +8,7 @@ public sealed class PythonInputNormalizerTests
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsVirtualenvLayout()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -40,7 +41,7 @@ version = 3.11.4
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsPoetryLayout()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -66,7 +67,7 @@ version = ""2.28.0""
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsPipenvLayout()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -88,7 +89,7 @@ version = ""2.28.0""
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsCondaLayout()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -110,7 +111,7 @@ version = ""2.28.0""
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsLambdaLayout()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -132,7 +133,7 @@ version = ""2.28.0""
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_ExtractsVersionFromPyprojectToml()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -161,7 +162,7 @@ python = ""^3.11""
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_ExtractsVersionFromRuntimeTxt()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -185,7 +186,7 @@ python = ""^3.11""
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_ExtractsVersionFromDockerfile()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -212,7 +213,7 @@ COPY . .
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_ExtractsVersionFromSetupPy()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -243,7 +244,7 @@ setup(
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsSitePackagesInMultipleLocations()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -272,7 +273,7 @@ setup(
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsWheelsInDistDirectory()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -299,7 +300,7 @@ setup(
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsZipapps()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -323,7 +324,7 @@ setup(
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_PrimaryVersionTargetHasHighestConfidence()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -353,7 +354,7 @@ requires-python = "">=3.10""", cancellationToken);
|
||||
[Fact]
|
||||
public async Task BuildVirtualFileSystem_IncludesAllDetectedSources()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -394,7 +395,7 @@ requires-python = "">=3.10""", cancellationToken);
|
||||
[Fact]
|
||||
public async Task PythonProjectAnalysis_AnalyzeAsync_ReturnsCompleteAnalysis()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Diagnostics;
|
||||
using Xunit;
|
||||
using FluentAssertions;
|
||||
using StellaOps.Scanner.Analyzers.Lang;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Ruby;
|
||||
@@ -31,7 +32,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < WarmupIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
// Benchmark
|
||||
@@ -39,7 +40,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < BenchmarkIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
sw.Stop();
|
||||
@@ -61,7 +62,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < WarmupIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
// Benchmark
|
||||
@@ -69,7 +70,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < BenchmarkIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
sw.Stop();
|
||||
@@ -91,7 +92,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < WarmupIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
// Benchmark
|
||||
@@ -99,7 +100,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < BenchmarkIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
sw.Stop();
|
||||
@@ -121,7 +122,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < WarmupIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
// Benchmark
|
||||
@@ -129,7 +130,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < BenchmarkIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
sw.Stop();
|
||||
@@ -151,7 +152,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < WarmupIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
// Benchmark
|
||||
@@ -159,7 +160,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < BenchmarkIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
sw.Stop();
|
||||
@@ -181,7 +182,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < WarmupIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
// Benchmark
|
||||
@@ -189,7 +190,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < BenchmarkIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
sw.Stop();
|
||||
@@ -211,7 +212,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < WarmupIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
// Benchmark
|
||||
@@ -219,7 +220,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < BenchmarkIterations; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
sw.Stop();
|
||||
@@ -243,7 +244,7 @@ public sealed class RubyBenchmarks
|
||||
for (var i = 0; i < 5; i++)
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
var result = await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
results.Add(result.ToJson(indent: false));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Ruby;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.Harness;
|
||||
@@ -23,7 +24,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -41,7 +42,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
services: null,
|
||||
analysisStore: store);
|
||||
|
||||
var result = await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var snapshots = result.ToSnapshots();
|
||||
|
||||
var summary = Assert.Single(snapshots, snapshot => snapshot.Type == "ruby-observation");
|
||||
@@ -89,7 +90,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -104,7 +105,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -119,7 +120,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -134,7 +135,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -149,7 +150,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -167,7 +168,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
services: null,
|
||||
analysisStore: store);
|
||||
|
||||
var result = await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var snapshots = result.ToSnapshots();
|
||||
|
||||
var summary = Assert.Single(snapshots, snapshot => snapshot.Type == "ruby-observation");
|
||||
@@ -207,7 +208,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
CancellationToken.None);
|
||||
TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -225,7 +226,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
services: null,
|
||||
analysisStore: store);
|
||||
|
||||
var result = await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var snapshots = result.ToSnapshots();
|
||||
|
||||
var summary = Assert.Single(snapshots, snapshot => snapshot.Type == "ruby-observation");
|
||||
|
||||
@@ -46,7 +46,7 @@ public sealed class LanguageAnalyzerContextTests
|
||||
var context = new LanguageAnalyzerContext(workspace.Path, TimeProvider.System, services: serviceProvider);
|
||||
|
||||
Assert.True(context.Secrets.IsAvailable);
|
||||
using var retrieved = await context.Secrets.GetAsync("registry", "default", CancellationToken.None);
|
||||
using var retrieved = await context.Secrets.GetAsync("registry", "default", TestContext.Current.CancellationToken);
|
||||
Assert.Same(handle, retrieved);
|
||||
Assert.Equal("test", retrieved.Metadata["source"]);
|
||||
Assert.Equal("token", Encoding.UTF8.GetString(retrieved.AsBytes().Span));
|
||||
@@ -59,7 +59,7 @@ public sealed class LanguageAnalyzerContextTests
|
||||
var context = new LanguageAnalyzerContext(workspace.Path, TimeProvider.System);
|
||||
|
||||
Assert.False(context.Secrets.IsAvailable);
|
||||
var secret = await context.Secrets.TryGetAsync("registry", cancellationToken: CancellationToken.None);
|
||||
var secret = await context.Secrets.TryGetAsync("registry", cancellationToken: TestContext.Current.CancellationToken);
|
||||
Assert.Null(secret);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.TestUtilities;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Lang.Tests.Core;
|
||||
|
||||
@@ -13,7 +14,7 @@ public sealed class LanguageAnalyzerResultTests
|
||||
try
|
||||
{
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var result = await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
var component = Assert.Single(result.Components);
|
||||
Assert.Equal("purl::pkg:example/acme@2.0.0", component.ComponentKey);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.Harness;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.TestUtilities;
|
||||
|
||||
@@ -11,7 +12,7 @@ public sealed class LanguageAnalyzerHarnessTests
|
||||
{
|
||||
var fixturePath = TestPaths.ResolveFixture("determinism", "basic", "input");
|
||||
var goldenPath = TestPaths.ResolveFixture("determinism", "basic", "expected.json");
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Linq;
|
||||
using Xunit;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using StellaOps.Scanner.Analyzers.Lang;
|
||||
@@ -12,7 +13,7 @@ public sealed class DotNetEntrypointResolverTests
|
||||
[Fact]
|
||||
public async Task SimpleFixtureResolvesSingleEntrypointAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "simple");
|
||||
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
@@ -33,7 +34,7 @@ public sealed class DotNetEntrypointResolverTests
|
||||
[Fact]
|
||||
public async Task DeterministicOrderingIsStableAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "multi");
|
||||
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using Xunit;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
@@ -15,7 +16,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SimpleFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "simple");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -34,7 +35,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SignedFixtureCapturesAssemblyMetadataAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "signed");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -58,7 +59,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SelfContainedFixtureHandlesNativeAssetsAndUsageAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "selfcontained");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -84,7 +85,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task AnalyzerIsThreadSafeUnderConcurrencyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "selfcontained");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
@@ -107,7 +108,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ConfigEnablesIlMetadataEdgesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var sourceFixture = TestPaths.ResolveFixture("lang", "dotnet", "simple");
|
||||
var tempRoot = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
@@ -169,7 +170,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task MultiFixtureMergesRuntimeMetadataAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "multi");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -217,7 +218,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SourceTreeOnlyEmitsDeclaredPackagesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "source-tree-only");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
@@ -253,7 +254,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockfileOnlyEmitsDeclaredPackagesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "lockfile-only");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
@@ -291,7 +292,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PackagesConfigOnlyEmitsDeclaredPackagesAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "packages-config-only");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StellaOps.Scanner.Analyzers.Lang;
|
||||
using Xunit;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Ruby;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.Harness;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.TestUtilities;
|
||||
@@ -18,7 +19,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixture,
|
||||
golden,
|
||||
new ILanguageAnalyzer[] { new RubyLanguageAnalyzer() },
|
||||
cancellationToken: CancellationToken.None,
|
||||
cancellationToken: TestContext.Current.CancellationToken,
|
||||
usageHints: usageHints);
|
||||
}
|
||||
|
||||
@@ -32,7 +33,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixture,
|
||||
golden,
|
||||
new ILanguageAnalyzer[] { new RubyLanguageAnalyzer() },
|
||||
cancellationToken: CancellationToken.None);
|
||||
cancellationToken: TestContext.Current.CancellationToken);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -46,7 +47,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixture,
|
||||
golden,
|
||||
new ILanguageAnalyzer[] { new RubyLanguageAnalyzer() },
|
||||
cancellationToken: CancellationToken.None,
|
||||
cancellationToken: TestContext.Current.CancellationToken,
|
||||
usageHints: usageHints);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Linq;
|
||||
using Xunit;
|
||||
using System.Text.Json;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Rust;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.Harness;
|
||||
@@ -11,7 +12,7 @@ public sealed class RustHeuristicCoverageComparisonTests
|
||||
[Fact]
|
||||
public async Task HeuristicCoverageExceedsCompetitorBaselineAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "rust", "heuristics");
|
||||
var baselinePath = Path.Combine(fixturePath, "competitor-baseline.json");
|
||||
RustFixtureBinaries.EnsureHeuristicBinary(fixturePath);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using Xunit;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.Json.Nodes;
|
||||
@@ -13,7 +14,7 @@ public sealed class RustLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SimpleFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "rust", "simple");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -38,7 +39,7 @@ public sealed class RustLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task AnalyzerIsThreadSafeUnderConcurrencyAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "rust", "simple");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
@@ -61,7 +62,7 @@ public sealed class RustLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task HeuristicFixtureProducesExpectedOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "rust", "heuristics");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
RustFixtureBinaries.EnsureHeuristicBinary(fixturePath);
|
||||
@@ -86,7 +87,7 @@ public sealed class RustLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task FallbackFixtureProducesExpectedOutputAsync()
|
||||
{
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "rust", "fallback");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
RustFixtureBinaries.EnsureOpaqueBinary(fixturePath);
|
||||
|
||||
@@ -52,7 +52,7 @@ public sealed class OfflineBuildIdIndexSignatureTests : IDisposable
|
||||
await index.LoadAsync();
|
||||
|
||||
Assert.True(index.IsLoaded);
|
||||
Assert.Equal(1, index.Count);
|
||||
Assert.Single(index);
|
||||
|
||||
var result = await index.LookupAsync("gnu-build-id:abc123");
|
||||
Assert.NotNull(result);
|
||||
@@ -83,7 +83,7 @@ public sealed class OfflineBuildIdIndexSignatureTests : IDisposable
|
||||
await index.LoadAsync();
|
||||
|
||||
Assert.True(index.IsLoaded);
|
||||
Assert.Equal(0, index.Count);
|
||||
Assert.Empty(index);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -108,7 +108,7 @@ public sealed class OfflineBuildIdIndexSignatureTests : IDisposable
|
||||
await index.LoadAsync();
|
||||
|
||||
Assert.True(index.IsLoaded);
|
||||
Assert.Equal(0, index.Count);
|
||||
Assert.Empty(index);
|
||||
}
|
||||
|
||||
private static string CreateDsseSignature(string indexPath, string expectedSha256)
|
||||
|
||||
@@ -37,7 +37,7 @@ public sealed class OfflineBuildIdIndexTests : IDisposable
|
||||
await index.LoadAsync();
|
||||
|
||||
Assert.True(index.IsLoaded);
|
||||
Assert.Equal(0, index.Count);
|
||||
Assert.Empty(index);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -49,7 +49,7 @@ public sealed class OfflineBuildIdIndexTests : IDisposable
|
||||
await index.LoadAsync();
|
||||
|
||||
Assert.True(index.IsLoaded);
|
||||
Assert.Equal(0, index.Count);
|
||||
Assert.Empty(index);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
@@ -45,7 +45,7 @@ public sealed class HomebrewPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -61,7 +61,7 @@ public sealed class HomebrewPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var openssl = result.Packages.FirstOrDefault(p => p.Name == "openssl@3");
|
||||
@@ -79,7 +79,7 @@ public sealed class HomebrewPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var jq = result.Packages.FirstOrDefault(p => p.Name == "jq");
|
||||
@@ -96,7 +96,7 @@ public sealed class HomebrewPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var wget = result.Packages.FirstOrDefault(p => p.Name == "wget");
|
||||
@@ -113,7 +113,7 @@ public sealed class HomebrewPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var wget = result.Packages.FirstOrDefault(p => p.Name == "wget");
|
||||
@@ -130,7 +130,7 @@ public sealed class HomebrewPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var openssl = result.Packages.FirstOrDefault(p => p.Name == "openssl@3");
|
||||
@@ -149,7 +149,7 @@ public sealed class HomebrewPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
foreach (var package in result.Packages)
|
||||
@@ -166,7 +166,7 @@ public sealed class HomebrewPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var wget = result.Packages.FirstOrDefault(p => p.Name == "wget");
|
||||
@@ -182,8 +182,8 @@ public sealed class HomebrewPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result1 = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result2 = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result1 = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var result2 = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(result1.Packages.Count, result2.Packages.Count);
|
||||
@@ -206,7 +206,7 @@ public sealed class HomebrewPackageAnalyzerTests
|
||||
var context = CreateContext(tempPath);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Empty(result.Packages);
|
||||
@@ -225,7 +225,7 @@ public sealed class HomebrewPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result.Telemetry);
|
||||
|
||||
@@ -45,7 +45,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -61,7 +61,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var testApp = result.Packages.FirstOrDefault(p =>
|
||||
@@ -80,7 +80,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var testApp = result.Packages.FirstOrDefault(p =>
|
||||
@@ -101,7 +101,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var testApp = result.Packages.FirstOrDefault(p =>
|
||||
@@ -119,7 +119,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var testApp = result.Packages.FirstOrDefault(p =>
|
||||
@@ -137,7 +137,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
foreach (var package in result.Packages)
|
||||
@@ -154,7 +154,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var testApp = result.Packages.FirstOrDefault(p =>
|
||||
@@ -176,7 +176,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var testApp = result.Packages.FirstOrDefault(p =>
|
||||
@@ -196,7 +196,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var sandboxedApp = result.Packages.FirstOrDefault(p =>
|
||||
@@ -214,7 +214,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var sandboxedApp = result.Packages.FirstOrDefault(p =>
|
||||
@@ -236,7 +236,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var sandboxedApp = result.Packages.FirstOrDefault(p =>
|
||||
@@ -260,7 +260,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var testApp = result.Packages.FirstOrDefault(p =>
|
||||
@@ -286,8 +286,8 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result1 = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result2 = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result1 = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var result2 = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(result1.Packages.Count, result2.Packages.Count);
|
||||
@@ -310,7 +310,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(tempPath);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Empty(result.Packages);
|
||||
@@ -329,7 +329,7 @@ public sealed class MacOsBundleAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result.Telemetry);
|
||||
|
||||
@@ -45,7 +45,7 @@ public sealed class PkgutilPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -61,7 +61,7 @@ public sealed class PkgutilPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var safari = result.Packages.FirstOrDefault(p => p.Name == "Safari");
|
||||
@@ -78,7 +78,7 @@ public sealed class PkgutilPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var safari = result.Packages.FirstOrDefault(p => p.Name == "Safari");
|
||||
@@ -94,7 +94,7 @@ public sealed class PkgutilPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
foreach (var package in result.Packages)
|
||||
@@ -111,7 +111,7 @@ public sealed class PkgutilPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
var safari = result.Packages.FirstOrDefault(p => p.Name == "Safari");
|
||||
@@ -128,8 +128,8 @@ public sealed class PkgutilPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result1 = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result2 = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result1 = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var result2 = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(result1.Packages.Count, result2.Packages.Count);
|
||||
@@ -152,7 +152,7 @@ public sealed class PkgutilPackageAnalyzerTests
|
||||
var context = CreateContext(tempPath);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Empty(result.Packages);
|
||||
@@ -171,7 +171,7 @@ public sealed class PkgutilPackageAnalyzerTests
|
||||
var context = CreateContext(FixturesRoot);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result.Telemetry);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@@ -26,7 +26,7 @@ public sealed class OsAnalyzerDeterminismTests
|
||||
var analyzer = new ApkPackageAnalyzer(NullLogger<ApkPackageAnalyzer>.Instance);
|
||||
var context = CreateContext(rootPath);
|
||||
|
||||
var result = await analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var snapshot = SnapshotSerializer.Serialize(new[] { result });
|
||||
GoldenAssert.MatchSnapshot(snapshot, FixtureManager.GetGoldenPath("apk.json"));
|
||||
}
|
||||
@@ -39,7 +39,7 @@ public sealed class OsAnalyzerDeterminismTests
|
||||
var analyzer = new DpkgPackageAnalyzer(NullLogger<DpkgPackageAnalyzer>.Instance);
|
||||
var context = CreateContext(rootPath);
|
||||
|
||||
var result = await analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var snapshot = SnapshotSerializer.Serialize(new[] { result });
|
||||
GoldenAssert.MatchSnapshot(snapshot, FixtureManager.GetGoldenPath("dpkg.json"));
|
||||
}
|
||||
@@ -75,7 +75,7 @@ public sealed class OsAnalyzerDeterminismTests
|
||||
reader);
|
||||
|
||||
var context = CreateContext("/tmp/nonexistent");
|
||||
var result = await analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var snapshot = SnapshotSerializer.Serialize(new[] { result });
|
||||
GoldenAssert.MatchSnapshot(snapshot, FixtureManager.GetGoldenPath("rpm.json"));
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ public sealed class RpmDatabaseReaderTests
|
||||
CreateSqliteRpmdb(sqlitePath, headerColumnName);
|
||||
|
||||
var reader = new RpmDatabaseReader(NullLogger.Instance);
|
||||
var headers = reader.ReadHeaders(root.FullName, CancellationToken.None);
|
||||
var headers = reader.ReadHeaders(root.FullName, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(headers);
|
||||
var header = headers[0];
|
||||
@@ -59,7 +59,7 @@ public sealed class RpmDatabaseReaderTests
|
||||
File.WriteAllBytes(Path.Combine(packagesPath, "Packages"), data);
|
||||
|
||||
var reader = new RpmDatabaseReader(NullLogger.Instance);
|
||||
var headers = reader.ReadHeaders(root.FullName, CancellationToken.None);
|
||||
var headers = reader.ReadHeaders(root.FullName, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Single(headers);
|
||||
var header = headers[0];
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using StellaOps.Scanner.Analyzers.OS.Windows.Chocolatey;
|
||||
using Xunit;
|
||||
@@ -47,7 +47,7 @@ public class ChocolateyPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -73,7 +73,7 @@ public class ChocolateyPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -102,7 +102,7 @@ public class ChocolateyPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
@@ -144,7 +144,7 @@ public class ChocolateyPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(3, result.Packages.Count);
|
||||
@@ -187,7 +187,7 @@ public class ChocolateyPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
@@ -225,7 +225,7 @@ public class ChocolateyPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
@@ -258,7 +258,7 @@ public class ChocolateyPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
@@ -295,7 +295,7 @@ public class ChocolateyPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
@@ -344,7 +344,7 @@ public class ChocolateyPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert - Results should be sorted by PURL
|
||||
Assert.Equal(3, result.Packages.Count);
|
||||
@@ -380,7 +380,7 @@ public class ChocolateyPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert - Only valid package should be returned
|
||||
Assert.Single(result.Packages);
|
||||
@@ -409,7 +409,7 @@ public class ChocolateyPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
@@ -439,7 +439,7 @@ public class ChocolateyPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
|
||||
@@ -17,7 +17,7 @@ public class MsiDatabaseParserTests
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(tempFile, CancellationToken.None);
|
||||
var result = _parser.Parse(tempFile, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -46,7 +46,7 @@ public class MsiDatabaseParserTests
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(tempFile, CancellationToken.None);
|
||||
var result = _parser.Parse(tempFile, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -72,7 +72,7 @@ public class MsiDatabaseParserTests
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(tempFile, CancellationToken.None);
|
||||
var result = _parser.Parse(tempFile, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -98,7 +98,7 @@ public class MsiDatabaseParserTests
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(tempFile, CancellationToken.None);
|
||||
var result = _parser.Parse(tempFile, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -119,7 +119,7 @@ public class MsiDatabaseParserTests
|
||||
public void Parse_WithNonExistentFile_ReturnsNull()
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse("/nonexistent/path/file.msi", CancellationToken.None);
|
||||
var result = _parser.Parse("/nonexistent/path/file.msi", TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Null(result);
|
||||
@@ -136,7 +136,7 @@ public class MsiDatabaseParserTests
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(tempFile, CancellationToken.None);
|
||||
var result = _parser.Parse(tempFile, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Null(result);
|
||||
@@ -152,7 +152,7 @@ public class MsiDatabaseParserTests
|
||||
public void Parse_WithEmptyPath_ReturnsNull()
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(string.Empty, CancellationToken.None);
|
||||
var result = _parser.Parse(string.Empty, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Null(result);
|
||||
@@ -163,7 +163,7 @@ public class MsiDatabaseParserTests
|
||||
public void Parse_WithNullPath_ReturnsNull()
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(null!, CancellationToken.None);
|
||||
var result = _parser.Parse(null!, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Null(result);
|
||||
@@ -185,7 +185,7 @@ public class MsiDatabaseParserTests
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(tempFile, CancellationToken.None);
|
||||
var result = _parser.Parse(tempFile, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
|
||||
@@ -46,7 +46,7 @@ public class MsiPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -76,7 +76,7 @@ public class MsiPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(2, result.Packages.Count);
|
||||
@@ -114,7 +114,7 @@ public class MsiPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
@@ -143,7 +143,7 @@ public class MsiPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
@@ -175,7 +175,7 @@ public class MsiPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert - Only valid MSI should be returned
|
||||
Assert.Single(result.Packages);
|
||||
@@ -206,7 +206,7 @@ public class MsiPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert - Results should be sorted
|
||||
Assert.Equal(3, result.Packages.Count);
|
||||
@@ -237,8 +237,8 @@ public class MsiPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act - Execute twice to ensure no duplicates
|
||||
var result1 = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result2 = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result1 = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var result2 = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result1.Packages);
|
||||
@@ -266,7 +266,7 @@ public class MsiPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
|
||||
@@ -27,7 +27,7 @@ public class WinSxSManifestParserTests
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(manifestPath, CancellationToken.None);
|
||||
var result = _parser.Parse(manifestPath, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -63,7 +63,7 @@ public class WinSxSManifestParserTests
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(manifestPath, CancellationToken.None);
|
||||
var result = _parser.Parse(manifestPath, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -93,7 +93,7 @@ public class WinSxSManifestParserTests
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(manifestPath, CancellationToken.None);
|
||||
var result = _parser.Parse(manifestPath, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -123,7 +123,7 @@ public class WinSxSManifestParserTests
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(manifestPath, CancellationToken.None);
|
||||
var result = _parser.Parse(manifestPath, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -140,7 +140,7 @@ public class WinSxSManifestParserTests
|
||||
public void Parse_WithNonExistentFile_ReturnsNull()
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse("/nonexistent/path/manifest.manifest", CancellationToken.None);
|
||||
var result = _parser.Parse("/nonexistent/path/manifest.manifest", TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Null(result);
|
||||
@@ -156,7 +156,7 @@ public class WinSxSManifestParserTests
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(manifestPath, CancellationToken.None);
|
||||
var result = _parser.Parse(manifestPath, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Null(result);
|
||||
@@ -180,7 +180,7 @@ public class WinSxSManifestParserTests
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(manifestPath, CancellationToken.None);
|
||||
var result = _parser.Parse(manifestPath, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Null(result);
|
||||
@@ -196,7 +196,7 @@ public class WinSxSManifestParserTests
|
||||
public void Parse_WithEmptyPath_ReturnsNull()
|
||||
{
|
||||
// Act
|
||||
var result = _parser.Parse(string.Empty, CancellationToken.None);
|
||||
var result = _parser.Parse(string.Empty, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Null(result);
|
||||
|
||||
@@ -46,7 +46,7 @@ public class WinSxSPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
@@ -78,7 +78,7 @@ public class WinSxSPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(2, result.Packages.Count);
|
||||
@@ -118,7 +118,7 @@ public class WinSxSPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
@@ -154,7 +154,7 @@ public class WinSxSPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
@@ -187,7 +187,7 @@ public class WinSxSPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Single(result.Packages);
|
||||
@@ -229,7 +229,7 @@ public class WinSxSPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert - Only valid manifest should be returned
|
||||
Assert.Single(result.Packages);
|
||||
@@ -263,7 +263,7 @@ public class WinSxSPackageAnalyzerTests
|
||||
var context = CreateContext(tempDir);
|
||||
|
||||
// Act
|
||||
var result = await _analyzer.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert - Results should be sorted
|
||||
Assert.Equal(3, result.Packages.Count);
|
||||
|
||||
@@ -69,16 +69,16 @@ public sealed class LayerCacheRoundTripTests : IAsyncLifetime
|
||||
new("usage.cdx.json", usageStream, "application/json")
|
||||
});
|
||||
|
||||
var stored = await _layerCache.PutAsync(request, CancellationToken.None);
|
||||
var stored = await _layerCache.PutAsync(request, TestContext.Current.CancellationToken);
|
||||
stored.LayerDigest.Should().Be(layerDigest);
|
||||
stored.Artifacts.Should().ContainKey("inventory.cdx.json");
|
||||
stored.TotalSizeBytes.Should().BeGreaterThan(0);
|
||||
|
||||
var cached = await _layerCache.TryGetAsync(layerDigest, CancellationToken.None);
|
||||
var cached = await _layerCache.TryGetAsync(layerDigest, TestContext.Current.CancellationToken);
|
||||
cached.Should().NotBeNull();
|
||||
cached!.Metadata.Should().ContainKey("image");
|
||||
|
||||
await using (var artifact = await _layerCache.OpenArtifactAsync(layerDigest, "inventory.cdx.json", CancellationToken.None))
|
||||
await using (var artifact = await _layerCache.OpenArtifactAsync(layerDigest, "inventory.cdx.json", TestContext.Current.CancellationToken))
|
||||
{
|
||||
artifact.Should().NotBeNull();
|
||||
using var reader = new StreamReader(artifact!, Encoding.UTF8);
|
||||
@@ -89,34 +89,34 @@ public sealed class LayerCacheRoundTripTests : IAsyncLifetime
|
||||
// Store file CAS entry and validate export/import lifecycle.
|
||||
var casHash = "sha256:" + new string('f', 64);
|
||||
using var casStream = CreateStream("some-cas-content");
|
||||
await _fileCas.PutAsync(new FileCasPutRequest(casHash, casStream), CancellationToken.None);
|
||||
await _fileCas.PutAsync(new FileCasPutRequest(casHash, casStream), TestContext.Current.CancellationToken);
|
||||
|
||||
var exportPath = Path.Combine(_rootPath, "export");
|
||||
var exportCount = await _fileCas.ExportAsync(exportPath, CancellationToken.None);
|
||||
var exportCount = await _fileCas.ExportAsync(exportPath, TestContext.Current.CancellationToken);
|
||||
exportCount.Should().Be(1);
|
||||
|
||||
await _fileCas.RemoveAsync(casHash, CancellationToken.None);
|
||||
(await _fileCas.TryGetAsync(casHash, CancellationToken.None)).Should().BeNull();
|
||||
await _fileCas.RemoveAsync(casHash, TestContext.Current.CancellationToken);
|
||||
(await _fileCas.TryGetAsync(casHash, TestContext.Current.CancellationToken)).Should().BeNull();
|
||||
|
||||
var importCount = await _fileCas.ImportAsync(exportPath, CancellationToken.None);
|
||||
var importCount = await _fileCas.ImportAsync(exportPath, TestContext.Current.CancellationToken);
|
||||
importCount.Should().Be(1);
|
||||
var imported = await _fileCas.TryGetAsync(casHash, CancellationToken.None);
|
||||
var imported = await _fileCas.TryGetAsync(casHash, TestContext.Current.CancellationToken);
|
||||
imported.Should().NotBeNull();
|
||||
imported!.RelativePath.Should().EndWith("content.bin");
|
||||
|
||||
// TTL eviction
|
||||
_timeProvider.Advance(TimeSpan.FromHours(2));
|
||||
await _layerCache.EvictExpiredAsync(CancellationToken.None);
|
||||
(await _layerCache.TryGetAsync(layerDigest, CancellationToken.None)).Should().BeNull();
|
||||
await _layerCache.EvictExpiredAsync(TestContext.Current.CancellationToken);
|
||||
(await _layerCache.TryGetAsync(layerDigest, TestContext.Current.CancellationToken)).Should().BeNull();
|
||||
|
||||
// Compaction removes CAS entry once over threshold.
|
||||
// Force compaction by writing a large entry.
|
||||
using var largeStream = CreateStream(new string('x', 400_000));
|
||||
var largeHash = "sha256:" + new string('e', 64);
|
||||
await _fileCas.PutAsync(new FileCasPutRequest(largeHash, largeStream), CancellationToken.None);
|
||||
await _fileCas.PutAsync(new FileCasPutRequest(largeHash, largeStream), TestContext.Current.CancellationToken);
|
||||
_timeProvider.Advance(TimeSpan.FromMinutes(1));
|
||||
await _fileCas.CompactAsync(CancellationToken.None);
|
||||
(await _fileCas.TryGetAsync(casHash, CancellationToken.None)).Should().BeNull();
|
||||
await _fileCas.CompactAsync(TestContext.Current.CancellationToken);
|
||||
(await _fileCas.TryGetAsync(casHash, TestContext.Current.CancellationToken)).Should().BeNull();
|
||||
}
|
||||
|
||||
public ValueTask InitializeAsync() => ValueTask.CompletedTask;
|
||||
|
||||
@@ -20,7 +20,7 @@ public class BenchmarkIntegrationTests
|
||||
var snapshot = await extractor.ExtractAsync(new CallGraphExtractionRequest(
|
||||
ScanId: $"bench-{caseName}",
|
||||
Language: "node",
|
||||
TargetPath: caseDir), CancellationToken.None);
|
||||
TargetPath: caseDir), TestContext.Current.CancellationToken);
|
||||
|
||||
var analyzer = new ReachabilityAnalyzer();
|
||||
var result = analyzer.Analyze(snapshot);
|
||||
|
||||
@@ -71,7 +71,7 @@ public class BinaryCallGraphExtractorTests
|
||||
|
||||
// Act & Assert
|
||||
await Assert.ThrowsAsync<FileNotFoundException>(async () =>
|
||||
await reader.ReadAsync("/nonexistent/binary", CancellationToken.None));
|
||||
await reader.ReadAsync("/nonexistent/binary", TestContext.Current.CancellationToken));
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
|
||||
@@ -27,7 +27,7 @@ public class BinaryTextSectionReaderTests
|
||||
var path = WriteTempFile(data);
|
||||
try
|
||||
{
|
||||
var section = await DisassemblyTextSectionReader.TryReadAsync(path, BinaryFormat.Elf, CancellationToken.None);
|
||||
var section = await DisassemblyTextSectionReader.TryReadAsync(path, BinaryFormat.Elf, TestContext.Current.CancellationToken);
|
||||
Assert.NotNull(section);
|
||||
Assert.Equal(".text", section!.SectionName);
|
||||
Assert.Equal(DisassemblyArchitecture.X64, section.Architecture);
|
||||
@@ -50,7 +50,7 @@ public class BinaryTextSectionReaderTests
|
||||
var path = WriteTempFile(data);
|
||||
try
|
||||
{
|
||||
var section = await DisassemblyTextSectionReader.TryReadAsync(path, BinaryFormat.Pe, CancellationToken.None);
|
||||
var section = await DisassemblyTextSectionReader.TryReadAsync(path, BinaryFormat.Pe, TestContext.Current.CancellationToken);
|
||||
Assert.NotNull(section);
|
||||
Assert.Equal(".text", section!.SectionName);
|
||||
Assert.Equal(DisassemblyArchitecture.X64, section.Architecture);
|
||||
@@ -73,7 +73,7 @@ public class BinaryTextSectionReaderTests
|
||||
var path = WriteTempFile(data);
|
||||
try
|
||||
{
|
||||
var section = await DisassemblyTextSectionReader.TryReadAsync(path, BinaryFormat.MachO, CancellationToken.None);
|
||||
var section = await DisassemblyTextSectionReader.TryReadAsync(path, BinaryFormat.MachO, TestContext.Current.CancellationToken);
|
||||
Assert.NotNull(section);
|
||||
Assert.Equal("__text", section!.SectionName);
|
||||
Assert.Equal(DisassemblyArchitecture.Arm64, section.Architecture);
|
||||
@@ -98,7 +98,7 @@ public class BinaryTextSectionReaderTests
|
||||
try
|
||||
{
|
||||
var scanner = new BinaryStringLiteralScanner();
|
||||
var candidates = await scanner.ExtractLibraryCandidatesAsync(path, BinaryFormat.Elf, CancellationToken.None);
|
||||
var candidates = await scanner.ExtractLibraryCandidatesAsync(path, BinaryFormat.Elf, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Contains("libfoo.so", candidates);
|
||||
Assert.Contains("libbar.so.1", candidates);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using StellaOps.Scanner.CallGraph;
|
||||
using StellaOps.Scanner.CallGraph;
|
||||
using StellaOps.Scanner.CallGraph.DotNet;
|
||||
using Xunit;
|
||||
|
||||
@@ -15,7 +15,7 @@ public class DotNetCallGraphExtractorTests
|
||||
await using var temp = await TempDirectory.CreateAsync();
|
||||
|
||||
var csprojPath = Path.Combine(temp.Path, "App.csproj");
|
||||
await File.WriteAllTextAsync(csprojPath, cancellationToken: CancellationToken.None, contents: """
|
||||
await File.WriteAllTextAsync(csprojPath, cancellationToken: TestContext.Current.CancellationToken, contents: """
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
@@ -26,7 +26,7 @@ public class DotNetCallGraphExtractorTests
|
||||
</Project>
|
||||
""");
|
||||
|
||||
await File.WriteAllTextAsync(Path.Combine(temp.Path, "Program.cs"), cancellationToken: CancellationToken.None, contents: """
|
||||
await File.WriteAllTextAsync(Path.Combine(temp.Path, "Program.cs"), cancellationToken: TestContext.Current.CancellationToken, contents: """
|
||||
using System;
|
||||
|
||||
public sealed class HttpGetAttribute : Attribute { }
|
||||
@@ -60,7 +60,7 @@ public class DotNetCallGraphExtractorTests
|
||||
var snapshot = await extractor.ExtractAsync(new CallGraphExtractionRequest(
|
||||
ScanId: "scan-001",
|
||||
Language: "dotnet",
|
||||
TargetPath: csprojPath), CancellationToken.None);
|
||||
TargetPath: csprojPath), TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal("scan-001", snapshot.ScanId);
|
||||
Assert.Equal("dotnet", snapshot.Language);
|
||||
@@ -81,7 +81,7 @@ public class DotNetCallGraphExtractorTests
|
||||
await using var temp = await TempDirectory.CreateAsync();
|
||||
|
||||
var csprojPath = Path.Combine(temp.Path, "App.csproj");
|
||||
await File.WriteAllTextAsync(csprojPath, cancellationToken: CancellationToken.None, contents: """
|
||||
await File.WriteAllTextAsync(csprojPath, cancellationToken: TestContext.Current.CancellationToken, contents: """
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
@@ -92,7 +92,7 @@ public class DotNetCallGraphExtractorTests
|
||||
</Project>
|
||||
""");
|
||||
|
||||
await File.WriteAllTextAsync(Path.Combine(temp.Path, "Program.cs"), cancellationToken: CancellationToken.None, contents: """
|
||||
await File.WriteAllTextAsync(Path.Combine(temp.Path, "Program.cs"), cancellationToken: TestContext.Current.CancellationToken, contents: """
|
||||
public static class Program
|
||||
{
|
||||
public static void Main()
|
||||
@@ -114,8 +114,8 @@ public class DotNetCallGraphExtractorTests
|
||||
var extractor = new DotNetCallGraphExtractor();
|
||||
var request = new CallGraphExtractionRequest("scan-001", "dotnet", csprojPath);
|
||||
|
||||
var first = await extractor.ExtractAsync(request, CancellationToken.None);
|
||||
var second = await extractor.ExtractAsync(request, CancellationToken.None);
|
||||
var first = await extractor.ExtractAsync(request, TestContext.Current.CancellationToken);
|
||||
var second = await extractor.ExtractAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(first.GraphDigest, second.GraphDigest);
|
||||
Assert.Equal(first.Nodes.Select(n => n.NodeId), second.Nodes.Select(n => n.NodeId));
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------
|
||||
// JavaCallGraphExtractorTests.cs
|
||||
// Sprint: SPRINT_3610_0001_0001_java_callgraph (JCG-018)
|
||||
// Description: Unit tests for the Java bytecode call graph extractor.
|
||||
@@ -452,7 +452,7 @@ public class JavaCallGraphExtractorTests
|
||||
TargetPath: "/nonexistent/path/to/jar");
|
||||
|
||||
await Assert.ThrowsAsync<FileNotFoundException>(
|
||||
() => _extractor.ExtractAsync(request, CancellationToken.None));
|
||||
() => _extractor.ExtractAsync(request, TestContext.Current.CancellationToken));
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -467,7 +467,7 @@ public class JavaCallGraphExtractorTests
|
||||
TargetPath: temp.Path);
|
||||
|
||||
await Assert.ThrowsAsync<ArgumentException>(
|
||||
() => _extractor.ExtractAsync(request, CancellationToken.None));
|
||||
() => _extractor.ExtractAsync(request, TestContext.Current.CancellationToken));
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -481,7 +481,7 @@ public class JavaCallGraphExtractorTests
|
||||
Language: "java",
|
||||
TargetPath: temp.Path);
|
||||
|
||||
var snapshot = await _extractor.ExtractAsync(request, CancellationToken.None);
|
||||
var snapshot = await _extractor.ExtractAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal("scan-001", snapshot.ScanId);
|
||||
Assert.Equal("java", snapshot.Language);
|
||||
@@ -517,8 +517,8 @@ public class JavaCallGraphExtractorTests
|
||||
TargetPath: temp.Path);
|
||||
|
||||
// Act: Extract twice with same input
|
||||
var snapshot1 = await _extractor.ExtractAsync(request, CancellationToken.None);
|
||||
var snapshot2 = await _extractor.ExtractAsync(request, CancellationToken.None);
|
||||
var snapshot1 = await _extractor.ExtractAsync(request, TestContext.Current.CancellationToken);
|
||||
var snapshot2 = await _extractor.ExtractAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert: Same digest
|
||||
Assert.Equal(snapshot1.GraphDigest, snapshot2.GraphDigest);
|
||||
@@ -542,8 +542,8 @@ public class JavaCallGraphExtractorTests
|
||||
TargetPath: temp.Path);
|
||||
|
||||
// Act: Extract with different scan IDs
|
||||
var snapshot1 = await _extractor.ExtractAsync(request1, CancellationToken.None);
|
||||
var snapshot2 = await _extractor.ExtractAsync(request2, CancellationToken.None);
|
||||
var snapshot1 = await _extractor.ExtractAsync(request1, TestContext.Current.CancellationToken);
|
||||
var snapshot2 = await _extractor.ExtractAsync(request2, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert: Same graph content (nodes, edges, digests match)
|
||||
Assert.Equal(snapshot1.Nodes.Length, snapshot2.Nodes.Length);
|
||||
|
||||
@@ -446,7 +446,7 @@ public sealed class JavaScriptCallGraphExtractorTests : IAsyncLifetime
|
||||
TargetPath: temp.Path);
|
||||
|
||||
await Assert.ThrowsAsync<FileNotFoundException>(
|
||||
() => _extractor.ExtractAsync(request, CancellationToken.None));
|
||||
() => _extractor.ExtractAsync(request, TestContext.Current.CancellationToken));
|
||||
}
|
||||
|
||||
[Fact(Skip = "Requires isolated test environment - permission issues on Windows")]
|
||||
@@ -461,14 +461,14 @@ public sealed class JavaScriptCallGraphExtractorTests : IAsyncLifetime
|
||||
"version": "1.0.0"
|
||||
}
|
||||
""";
|
||||
await File.WriteAllTextAsync(Path.Combine(temp.Path, "package.json"), packageJson, CancellationToken.None);
|
||||
await File.WriteAllTextAsync(Path.Combine(temp.Path, "package.json"), packageJson, TestContext.Current.CancellationToken);
|
||||
|
||||
var request = new CallGraphExtractionRequest(
|
||||
ScanId: "scan-001",
|
||||
Language: "javascript",
|
||||
TargetPath: temp.Path);
|
||||
|
||||
var snapshot = await _extractor.ExtractAsync(request, CancellationToken.None);
|
||||
var snapshot = await _extractor.ExtractAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal("scan-001", snapshot.ScanId);
|
||||
Assert.Equal("javascript", snapshot.Language);
|
||||
@@ -490,15 +490,15 @@ public sealed class JavaScriptCallGraphExtractorTests : IAsyncLifetime
|
||||
"version": "1.0.0"
|
||||
}
|
||||
""";
|
||||
await File.WriteAllTextAsync(Path.Combine(temp.Path, "package.json"), packageJson, CancellationToken.None);
|
||||
await File.WriteAllTextAsync(Path.Combine(temp.Path, "package.json"), packageJson, TestContext.Current.CancellationToken);
|
||||
|
||||
var request = new CallGraphExtractionRequest(
|
||||
ScanId: "scan-001",
|
||||
Language: "javascript",
|
||||
TargetPath: temp.Path);
|
||||
|
||||
var snapshot1 = await _extractor.ExtractAsync(request, CancellationToken.None);
|
||||
var snapshot2 = await _extractor.ExtractAsync(request, CancellationToken.None);
|
||||
var snapshot1 = await _extractor.ExtractAsync(request, TestContext.Current.CancellationToken);
|
||||
var snapshot2 = await _extractor.ExtractAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(snapshot1.GraphDigest, snapshot2.GraphDigest);
|
||||
}
|
||||
|
||||
@@ -92,8 +92,8 @@ public class ValkeyCallGraphCacheServiceTests : IAsyncLifetime
|
||||
EntrypointIds: [nodeId],
|
||||
SinkIds: []);
|
||||
|
||||
await _cache.SetCallGraphAsync(snapshot, cancellationToken: CancellationToken.None);
|
||||
var loaded = await _cache.TryGetCallGraphAsync("scan-cache-1", "dotnet", cancellationToken: CancellationToken.None);
|
||||
await _cache.SetCallGraphAsync(snapshot, cancellationToken: TestContext.Current.CancellationToken);
|
||||
var loaded = await _cache.TryGetCallGraphAsync("scan-cache-1", "dotnet", cancellationToken: TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(loaded);
|
||||
Assert.Equal(snapshot.ScanId, loaded!.ScanId);
|
||||
@@ -115,8 +115,8 @@ public class ValkeyCallGraphCacheServiceTests : IAsyncLifetime
|
||||
Paths: [],
|
||||
ResultDigest: "sha256:r");
|
||||
|
||||
await _cache.SetReachabilityResultAsync(result, cancellationToken: CancellationToken.None);
|
||||
var loaded = await _cache.TryGetReachabilityResultAsync("scan-cache-2", "dotnet", cancellationToken: CancellationToken.None);
|
||||
await _cache.SetReachabilityResultAsync(result, cancellationToken: TestContext.Current.CancellationToken);
|
||||
var loaded = await _cache.TryGetReachabilityResultAsync("scan-cache-2", "dotnet", cancellationToken: TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(loaded);
|
||||
Assert.Equal(result.ResultDigest, loaded!.ResultDigest);
|
||||
|
||||
@@ -42,7 +42,7 @@ public class FidelityAwareAnalyzerTests
|
||||
{
|
||||
var request = CreateAnalysisRequest();
|
||||
|
||||
var result = await _analyzer.AnalyzeAsync(request, FidelityLevel.Quick, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(request, FidelityLevel.Quick, TestContext.Current.CancellationToken);
|
||||
|
||||
result.FidelityLevel.Should().Be(FidelityLevel.Quick);
|
||||
result.CallGraph.Should().BeNull();
|
||||
@@ -71,7 +71,7 @@ public class FidelityAwareAnalyzerTests
|
||||
HasPathToVulnerable = true
|
||||
});
|
||||
|
||||
var result = await _analyzer.AnalyzeAsync(request, FidelityLevel.Standard, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(request, FidelityLevel.Standard, TestContext.Current.CancellationToken);
|
||||
|
||||
result.FidelityLevel.Should().Be(FidelityLevel.Standard);
|
||||
result.CallGraph.Should().NotBeNull();
|
||||
@@ -110,7 +110,7 @@ public class FidelityAwareAnalyzerTests
|
||||
_binaryMapper.Setup(b => b.MapAsync(It.IsAny<AnalysisRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(new BinaryMappingResult { HasMapping = true });
|
||||
|
||||
var result = await _analyzer.AnalyzeAsync(request, FidelityLevel.Deep, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(request, FidelityLevel.Deep, TestContext.Current.CancellationToken);
|
||||
|
||||
result.FidelityLevel.Should().Be(FidelityLevel.Deep);
|
||||
result.RuntimeCorrelation.Should().NotBeNull();
|
||||
@@ -136,7 +136,7 @@ public class FidelityAwareAnalyzerTests
|
||||
{
|
||||
var request = CreateAnalysisRequest();
|
||||
|
||||
var result = await _analyzer.AnalyzeAsync(request, FidelityLevel.Quick, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(request, FidelityLevel.Quick, TestContext.Current.CancellationToken);
|
||||
|
||||
// Quick base confidence is 0.5, plus 0.1 for exact match
|
||||
result.Confidence.Should().Be(0.6m);
|
||||
@@ -157,7 +157,7 @@ public class FidelityAwareAnalyzerTests
|
||||
HasPathToVulnerable = false
|
||||
});
|
||||
|
||||
var result = await _analyzer.AnalyzeAsync(request, FidelityLevel.Standard, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(request, FidelityLevel.Standard, TestContext.Current.CancellationToken);
|
||||
|
||||
// Standard base confidence is 0.75, plus 0.15 for complete call graph
|
||||
result.Confidence.Should().Be(0.9m);
|
||||
@@ -192,7 +192,7 @@ public class FidelityAwareAnalyzerTests
|
||||
HasPathToVulnerable = true
|
||||
});
|
||||
|
||||
var result = await _analyzer.UpgradeFidelityAsync(findingId, FidelityLevel.Standard, CancellationToken.None);
|
||||
var result = await _analyzer.UpgradeFidelityAsync(findingId, FidelityLevel.Standard, TestContext.Current.CancellationToken);
|
||||
|
||||
result.Success.Should().BeTrue();
|
||||
result.PreviousLevel.Should().Be(FidelityLevel.Quick);
|
||||
@@ -213,7 +213,7 @@ public class FidelityAwareAnalyzerTests
|
||||
_repository.Setup(r => r.GetAnalysisAsync(findingId, It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync((FidelityAnalysisResult?)null);
|
||||
|
||||
var result = await _analyzer.UpgradeFidelityAsync(findingId, FidelityLevel.Standard, CancellationToken.None);
|
||||
var result = await _analyzer.UpgradeFidelityAsync(findingId, FidelityLevel.Standard, TestContext.Current.CancellationToken);
|
||||
|
||||
result.Success.Should().BeFalse();
|
||||
result.Error.Should().Be("Finding not found");
|
||||
@@ -237,7 +237,7 @@ public class FidelityAwareAnalyzerTests
|
||||
_repository.Setup(r => r.GetAnalysisAsync(findingId, It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(existingResult);
|
||||
|
||||
var result = await _analyzer.UpgradeFidelityAsync(findingId, FidelityLevel.Standard, CancellationToken.None);
|
||||
var result = await _analyzer.UpgradeFidelityAsync(findingId, FidelityLevel.Standard, TestContext.Current.CancellationToken);
|
||||
|
||||
result.Success.Should().BeTrue();
|
||||
result.PreviousLevel.Should().Be(FidelityLevel.Standard);
|
||||
@@ -270,7 +270,7 @@ public class FidelityAwareAnalyzerTests
|
||||
_binaryMapper.Setup(b => b.MapAsync(It.IsAny<AnalysisRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(new BinaryMappingResult { HasMapping = false });
|
||||
|
||||
var result = await _analyzer.AnalyzeAsync(request, FidelityLevel.Deep, CancellationToken.None);
|
||||
var result = await _analyzer.AnalyzeAsync(request, FidelityLevel.Deep, TestContext.Current.CancellationToken);
|
||||
|
||||
result.Confidence.Should().Be(0.95m);
|
||||
result.IsReachable.Should().BeTrue();
|
||||
|
||||
@@ -227,7 +227,7 @@ public sealed class FingerprintIndexTests
|
||||
var index = new InMemoryFingerprintIndex();
|
||||
|
||||
// Assert initial
|
||||
Assert.Equal(0, index.Count);
|
||||
Assert.Empty(index);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
@@ -51,7 +51,7 @@ public sealed class EntryTraceAnalyzerTests
|
||||
var terminal = Assert.Single(result.Terminals);
|
||||
Assert.Equal("/usr/local/bin/puma", terminal.Path);
|
||||
|
||||
var bundleNode = Assert.Single(result.Nodes.Where(n => n.DisplayName == "bundle"));
|
||||
var bundleNode = Assert.Single(result.Nodes, n => n.DisplayName == "bundle");
|
||||
Assert.Equal("language-launcher", bundleNode.Metadata?["wrapper.category"]);
|
||||
Assert.Equal("bundle exec", bundleNode.Metadata?["wrapper.name"]);
|
||||
Assert.Contains(result.Edges, edge => edge.Relationship == "wrapper" && edge.FromNodeId == bundleNode.Id);
|
||||
@@ -87,7 +87,7 @@ public sealed class EntryTraceAnalyzerTests
|
||||
var terminal = Assert.Single(result.Terminals);
|
||||
Assert.Equal("/usr/local/sbin/php-fpm", terminal.Path);
|
||||
|
||||
var wrapperNode = Assert.Single(result.Nodes.Where(n => n.DisplayName.Contains("docker-php-entrypoint", StringComparison.OrdinalIgnoreCase)));
|
||||
var wrapperNode = Assert.Single(result.Nodes, n => n.DisplayName.Contains("docker-php-entrypoint", StringComparison.OrdinalIgnoreCase));
|
||||
Assert.Equal("language-launcher", wrapperNode.Metadata?["wrapper.category"]);
|
||||
Assert.Equal("docker-php-entrypoint", wrapperNode.Metadata?["wrapper.name"]);
|
||||
}
|
||||
@@ -135,7 +135,7 @@ public sealed class EntryTraceAnalyzerTests
|
||||
var terminal = Assert.Single(result.Terminals);
|
||||
Assert.Equal("/usr/bin/node", terminal.Path);
|
||||
|
||||
var npmNode = Assert.Single(result.Nodes.Where(n => n.DisplayName.Contains("npm", StringComparison.OrdinalIgnoreCase)));
|
||||
var npmNode = Assert.Single(result.Nodes, n => n.DisplayName.Contains("npm", StringComparison.OrdinalIgnoreCase));
|
||||
Assert.Equal("language-launcher", npmNode.Metadata?["wrapper.category"]);
|
||||
Assert.Equal("npm", npmNode.Metadata?["wrapper.name"]);
|
||||
}
|
||||
@@ -175,7 +175,7 @@ public sealed class EntryTraceAnalyzerTests
|
||||
var terminal = Assert.Single(result.Terminals);
|
||||
Assert.Equal("/usr/bin/node", terminal.Path);
|
||||
|
||||
var yarnNode = Assert.Single(result.Nodes.Where(n => n.DisplayName.Contains("yarn", StringComparison.OrdinalIgnoreCase)));
|
||||
var yarnNode = Assert.Single(result.Nodes, n => n.DisplayName.Contains("yarn", StringComparison.OrdinalIgnoreCase));
|
||||
Assert.Equal("language-launcher", yarnNode.Metadata?["wrapper.category"]);
|
||||
Assert.Equal("yarn node", yarnNode.Metadata?["wrapper.name"]);
|
||||
}
|
||||
@@ -215,7 +215,7 @@ public sealed class EntryTraceAnalyzerTests
|
||||
var terminal = Assert.Single(result.Terminals);
|
||||
Assert.Equal("/usr/bin/python", terminal.Path);
|
||||
|
||||
var pipenvNode = Assert.Single(result.Nodes.Where(n => n.DisplayName.Contains("pipenv", StringComparison.OrdinalIgnoreCase)));
|
||||
var pipenvNode = Assert.Single(result.Nodes, n => n.DisplayName.Contains("pipenv", StringComparison.OrdinalIgnoreCase));
|
||||
Assert.Equal("language-launcher", pipenvNode.Metadata?["wrapper.category"]);
|
||||
Assert.Equal("pipenv run", pipenvNode.Metadata?["wrapper.name"]);
|
||||
}
|
||||
@@ -255,7 +255,7 @@ public sealed class EntryTraceAnalyzerTests
|
||||
var terminal = Assert.Single(result.Terminals);
|
||||
Assert.Equal("/usr/bin/python", terminal.Path);
|
||||
|
||||
var poetryNode = Assert.Single(result.Nodes.Where(n => n.DisplayName.Contains("poetry", StringComparison.OrdinalIgnoreCase)));
|
||||
var poetryNode = Assert.Single(result.Nodes, n => n.DisplayName.Contains("poetry", StringComparison.OrdinalIgnoreCase));
|
||||
Assert.Equal("language-launcher", poetryNode.Metadata?["wrapper.category"]);
|
||||
Assert.Equal("poetry run", poetryNode.Metadata?["wrapper.name"]);
|
||||
}
|
||||
@@ -702,7 +702,7 @@ public sealed class EntryTraceAnalyzerTests
|
||||
Assert.Equal("app", terminal.User);
|
||||
Assert.Contains("/srv/app.py", terminal.Arguments);
|
||||
|
||||
var edge = Assert.Single(result.Edges.Where(e => e.Relationship == "wrapper"));
|
||||
var edge = Assert.Single(result.Edges, e => e.Relationship == "wrapper");
|
||||
Assert.Equal("true", edge.Metadata?["guarded"]);
|
||||
Assert.Equal("user", edge.Metadata?["state-change"]);
|
||||
Assert.Equal("app", edge.Metadata?["user"]);
|
||||
@@ -739,7 +739,7 @@ public sealed class EntryTraceAnalyzerTests
|
||||
var terminal = Assert.Single(result.Terminals);
|
||||
Assert.Equal("/usr/bin/python", terminal.Path);
|
||||
|
||||
var edge = Assert.Single(result.Edges.Where(e => e.Relationship == "wrapper"));
|
||||
var edge = Assert.Single(result.Edges, e => e.Relationship == "wrapper");
|
||||
Assert.Equal("env", edge.Metadata?["state-change"]);
|
||||
Assert.Equal("true", edge.Metadata?["guarded"]);
|
||||
}
|
||||
@@ -804,7 +804,7 @@ public sealed class EntryTraceAnalyzerTests
|
||||
|
||||
var terminal = Assert.Single(result.Terminals);
|
||||
Assert.Equal("/usr/bin/python", terminal.Path);
|
||||
var edge = Assert.Single(result.Edges.Where(e => e.Relationship == "wrapper"));
|
||||
var edge = Assert.Single(result.Edges, e => e.Relationship == "wrapper");
|
||||
Assert.Equal("true", edge.Metadata?["guarded"]);
|
||||
Assert.Equal("init", edge.Metadata?["shim"]);
|
||||
}
|
||||
|
||||
@@ -201,6 +201,7 @@ public sealed class MeshEntrypointGraphTests
|
||||
|
||||
// Assert
|
||||
Assert.NotEmpty(paths);
|
||||
Assert.NotNull(paths[0]);
|
||||
Assert.True(paths[0].IsIngressExposed);
|
||||
Assert.NotNull(paths[0].IngressPath);
|
||||
Assert.Equal("api.example.com", paths[0].IngressPath.Host);
|
||||
|
||||
@@ -30,7 +30,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new PythonSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.WebServer, result.Intent);
|
||||
@@ -51,7 +51,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new PythonSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.WebServer, result.Intent);
|
||||
@@ -77,7 +77,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new PythonSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.Worker, result.Intent);
|
||||
@@ -96,7 +96,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new PythonSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.CliTool, result.Intent);
|
||||
@@ -115,7 +115,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new PythonSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.Serverless, result.Intent);
|
||||
@@ -139,7 +139,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new JavaSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.WebServer, result.Intent);
|
||||
@@ -159,7 +159,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new JavaSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.WebServer, result.Intent);
|
||||
@@ -178,7 +178,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new JavaSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.StreamProcessor, result.Intent);
|
||||
@@ -202,7 +202,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new NodeSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.WebServer, result.Intent);
|
||||
@@ -222,7 +222,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new NodeSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.WebServer, result.Intent);
|
||||
@@ -242,7 +242,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new NodeSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.CliTool, result.Intent);
|
||||
@@ -266,7 +266,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new NodeSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.Serverless, result.Intent);
|
||||
@@ -289,7 +289,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new DotNetSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.WebServer, result.Intent);
|
||||
@@ -310,7 +310,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new DotNetSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.Worker, result.Intent);
|
||||
@@ -329,7 +329,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new DotNetSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.CliTool, result.Intent);
|
||||
@@ -352,7 +352,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new GoSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.WebServer, result.Intent);
|
||||
@@ -372,7 +372,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new GoSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.CliTool, result.Intent);
|
||||
@@ -390,7 +390,7 @@ public sealed class SemanticAdapterTests
|
||||
var adapter = new GoSemanticAdapter();
|
||||
|
||||
// Act
|
||||
var result = await adapter.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await adapter.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ApplicationIntent.RpcServer, result.Intent);
|
||||
|
||||
@@ -34,7 +34,7 @@ public sealed class SemanticDeterminismTests
|
||||
var results = new List<SemanticAnalysisResult>();
|
||||
for (var i = 0; i < 3; i++)
|
||||
{
|
||||
var result = await _orchestrator.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _orchestrator.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
results.Add(result);
|
||||
}
|
||||
|
||||
@@ -55,8 +55,8 @@ public sealed class SemanticDeterminismTests
|
||||
var context2 = CreateContext(fs2, "python");
|
||||
|
||||
// Act
|
||||
var result1 = await _orchestrator.AnalyzeAsync(context1, CancellationToken.None);
|
||||
var result2 = await _orchestrator.AnalyzeAsync(context2, CancellationToken.None);
|
||||
var result1 = await _orchestrator.AnalyzeAsync(context1, TestContext.Current.CancellationToken);
|
||||
var result2 = await _orchestrator.AnalyzeAsync(context2, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(result1.Entrypoint?.Intent, result2.Entrypoint?.Intent);
|
||||
@@ -71,7 +71,7 @@ public sealed class SemanticDeterminismTests
|
||||
var context = CreateContext(fs, "python");
|
||||
|
||||
// Act
|
||||
var result = await _orchestrator.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _orchestrator.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert - capabilities should be ordered consistently (by flag value)
|
||||
if (result.Entrypoint is not null)
|
||||
@@ -90,7 +90,7 @@ public sealed class SemanticDeterminismTests
|
||||
var context = CreateContext(fs, "python");
|
||||
|
||||
// Act
|
||||
var result = await _orchestrator.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _orchestrator.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert - attack surface should be ordered by threat type
|
||||
if (result.Entrypoint is not null && !result.Entrypoint.AttackSurface.IsDefaultOrEmpty)
|
||||
@@ -109,7 +109,7 @@ public sealed class SemanticDeterminismTests
|
||||
var context = CreateContext(fs, "python");
|
||||
|
||||
// Act
|
||||
var result = await _orchestrator.AnalyzeAsync(context, CancellationToken.None);
|
||||
var result = await _orchestrator.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert - data boundaries should be ordered consistently
|
||||
if (result.Entrypoint is not null && !result.Entrypoint.DataBoundaries.IsDefaultOrEmpty)
|
||||
|
||||
@@ -196,7 +196,7 @@ public sealed class MaterialChangesOrchestratorTests
|
||||
|
||||
// Act
|
||||
var report = await _orchestrator.GenerateReportAsync("base", "target");
|
||||
var cached = await _cache.GetAsync(report.ReportId, CancellationToken.None);
|
||||
var cached = await _cache.GetAsync(report.ReportId, TestContext.Current.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(cached);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Buffers.Binary;
|
||||
using System.Buffers.Binary;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
@@ -32,7 +32,7 @@ public class BinaryReachabilityLifterTests
|
||||
var builder = new ReachabilityGraphBuilder();
|
||||
var lifter = new BinaryReachabilityLifter();
|
||||
|
||||
await lifter.LiftAsync(context, builder, CancellationToken.None);
|
||||
await lifter.LiftAsync(context, builder, TestContext.Current.CancellationToken);
|
||||
var graph = builder.ToUnionGraph(SymbolId.Lang.Binary);
|
||||
|
||||
var node = Assert.Single(graph.Nodes);
|
||||
@@ -69,7 +69,7 @@ public class BinaryReachabilityLifterTests
|
||||
var builder = new ReachabilityGraphBuilder();
|
||||
var lifter = new BinaryReachabilityLifter();
|
||||
|
||||
await lifter.LiftAsync(context, builder, CancellationToken.None);
|
||||
await lifter.LiftAsync(context, builder, TestContext.Current.CancellationToken);
|
||||
var graph = builder.ToUnionGraph(SymbolId.Lang.Binary);
|
||||
|
||||
// Should have binary node + entry point node
|
||||
@@ -106,7 +106,7 @@ public class BinaryReachabilityLifterTests
|
||||
var builder = new ReachabilityGraphBuilder();
|
||||
var lifter = new BinaryReachabilityLifter();
|
||||
|
||||
await lifter.LiftAsync(context, builder, CancellationToken.None);
|
||||
await lifter.LiftAsync(context, builder, TestContext.Current.CancellationToken);
|
||||
var graph = builder.ToUnionGraph(SymbolId.Lang.Binary);
|
||||
|
||||
var node = Assert.Single(graph.Nodes);
|
||||
@@ -133,7 +133,7 @@ public class BinaryReachabilityLifterTests
|
||||
var builder = new ReachabilityGraphBuilder();
|
||||
var lifter = new BinaryReachabilityLifter();
|
||||
|
||||
await lifter.LiftAsync(context, builder, CancellationToken.None);
|
||||
await lifter.LiftAsync(context, builder, TestContext.Current.CancellationToken);
|
||||
var graph = builder.ToUnionGraph(SymbolId.Lang.Binary);
|
||||
|
||||
// Should only have the binary node, no entry point
|
||||
@@ -159,7 +159,7 @@ public class BinaryReachabilityLifterTests
|
||||
var builder = new ReachabilityGraphBuilder();
|
||||
var lifter = new BinaryReachabilityLifter();
|
||||
|
||||
await lifter.LiftAsync(context, builder, CancellationToken.None);
|
||||
await lifter.LiftAsync(context, builder, TestContext.Current.CancellationToken);
|
||||
var graph = builder.ToUnionGraph(SymbolId.Lang.Binary);
|
||||
|
||||
var binaryNode = Assert.Single(graph.Nodes, n => n.Kind == "binary");
|
||||
@@ -193,7 +193,7 @@ public class BinaryReachabilityLifterTests
|
||||
var builder = new ReachabilityGraphBuilder();
|
||||
var lifter = new BinaryReachabilityLifter();
|
||||
|
||||
await lifter.LiftAsync(context, builder, CancellationToken.None);
|
||||
await lifter.LiftAsync(context, builder, TestContext.Current.CancellationToken);
|
||||
var union = builder.ToUnionGraph(SymbolId.Lang.Binary);
|
||||
|
||||
var rich = RichGraphBuilder.FromUnion(union, "test-analyzer", "1.0.0");
|
||||
@@ -222,7 +222,7 @@ public class BinaryReachabilityLifterTests
|
||||
var builder = new ReachabilityGraphBuilder();
|
||||
var lifter = new BinaryReachabilityLifter();
|
||||
|
||||
await lifter.LiftAsync(context, builder, CancellationToken.None);
|
||||
await lifter.LiftAsync(context, builder, TestContext.Current.CancellationToken);
|
||||
var union = builder.ToUnionGraph(SymbolId.Lang.Binary);
|
||||
|
||||
var rich = RichGraphBuilder.FromUnion(union, "test-analyzer", "1.0.0");
|
||||
|
||||
@@ -23,7 +23,7 @@ public sealed class AttestorClientTests
|
||||
var document = BuildDescriptorDocument();
|
||||
var attestorUri = new Uri("https://attestor.example.com/api/v1/provenance");
|
||||
|
||||
await client.SendPlaceholderAsync(attestorUri, document, CancellationToken.None);
|
||||
await client.SendPlaceholderAsync(attestorUri, document, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotNull(handler.CapturedRequest);
|
||||
Assert.Equal(HttpMethod.Post, handler.CapturedRequest!.Method);
|
||||
@@ -49,7 +49,7 @@ public sealed class AttestorClientTests
|
||||
var document = BuildDescriptorDocument();
|
||||
var attestorUri = new Uri("https://attestor.example.com/api/v1/provenance");
|
||||
|
||||
await Assert.ThrowsAsync<BuildxPluginException>(() => client.SendPlaceholderAsync(attestorUri, document, CancellationToken.None));
|
||||
await Assert.ThrowsAsync<BuildxPluginException>(() => client.SendPlaceholderAsync(attestorUri, document, TestContext.Current.CancellationToken));
|
||||
}
|
||||
|
||||
private static DescriptorDocument BuildDescriptorDocument()
|
||||
|
||||
@@ -21,7 +21,7 @@ public sealed class LocalCasClientTests
|
||||
Algorithm = "sha256"
|
||||
}, CryptoHashFactory.CreateDefault());
|
||||
|
||||
var result = await client.VerifyWriteAsync(CancellationToken.None);
|
||||
var result = await client.VerifyWriteAsync(TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal("sha256", result.Algorithm);
|
||||
Assert.True(File.Exists(result.Path));
|
||||
|
||||
@@ -44,7 +44,7 @@ public sealed class DescriptorGeneratorTests
|
||||
AttestorUri = "https://attestor.local/api/v1/provenance"
|
||||
}.Validate();
|
||||
|
||||
var document = await generator.CreateAsync(request, CancellationToken.None);
|
||||
var document = await generator.CreateAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(DescriptorGenerator.Schema, document.Schema);
|
||||
Assert.Equal(fakeTime.GetUtcNow(), document.GeneratedAt);
|
||||
@@ -93,8 +93,8 @@ public sealed class DescriptorGeneratorTests
|
||||
AttestorUri = "https://attestor.local/api/v1/provenance"
|
||||
}.Validate();
|
||||
|
||||
var first = await generator.CreateAsync(request, CancellationToken.None);
|
||||
var second = await generator.CreateAsync(request, CancellationToken.None);
|
||||
var first = await generator.CreateAsync(request, TestContext.Current.CancellationToken);
|
||||
var second = await generator.CreateAsync(request, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(first.Provenance.Nonce, second.Provenance.Nonce);
|
||||
Assert.Equal(first.Provenance.ExpectedDsseSha256, second.Provenance.ExpectedDsseSha256);
|
||||
@@ -127,8 +127,8 @@ public sealed class DescriptorGeneratorTests
|
||||
};
|
||||
variant = variant.Validate();
|
||||
|
||||
var baselineDocument = await generator.CreateAsync(baseline, CancellationToken.None);
|
||||
var variantDocument = await generator.CreateAsync(variant, CancellationToken.None);
|
||||
var baselineDocument = await generator.CreateAsync(baseline, TestContext.Current.CancellationToken);
|
||||
var variantDocument = await generator.CreateAsync(variant, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.NotEqual(baselineDocument.Provenance.Nonce, variantDocument.Provenance.Nonce);
|
||||
Assert.NotEqual(baselineDocument.Provenance.ExpectedDsseSha256, variantDocument.Provenance.ExpectedDsseSha256);
|
||||
|
||||
@@ -50,7 +50,7 @@ public sealed class DescriptorGoldenTests
|
||||
|
||||
var fakeTime = new FakeTimeProvider(new DateTimeOffset(2025, 10, 18, 12, 0, 0, TimeSpan.Zero));
|
||||
var generator = CreateGenerator(fakeTime);
|
||||
var document = await generator.CreateAsync(request, CancellationToken.None);
|
||||
var document = await generator.CreateAsync(request, TestContext.Current.CancellationToken);
|
||||
var actualJson = JsonSerializer.Serialize(document, SerializerOptions);
|
||||
var normalizedJson = NormalizeDescriptorJson(actualJson, Path.GetFileName(sbomPath));
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user