This commit is contained in:
StellaOps Bot
2025-12-26 21:43:56 +02:00
354 changed files with 354 additions and 0 deletions

View File

@@ -73,6 +73,7 @@ public sealed class CccsConnectorTests
public async Task Fetch_PersistsRawDocumentWithMetadata()
{
await using var harness = await BuildHarnessAsync();
using StellaOps.TestKit;
SeedFeedResponses(harness.Handler);
var connector = harness.ServiceProvider.GetRequiredService<CccsConnector>();

View File

@@ -83,6 +83,7 @@ public sealed class CertBundConnectorTests
public async Task Fetch_PersistsDocumentWithMetadata()
{
await using var harness = await BuildHarnessAsync();
using StellaOps.TestKit;
SeedResponses(harness.Handler);
var connector = harness.ServiceProvider.GetRequiredService<CertBundConnector>();

View File

@@ -33,6 +33,7 @@ public sealed class AlpineConnectorTests
{
await using var harness = await BuildHarnessAsync();
using StellaOps.TestKit;
harness.Handler.AddJsonResponse(SecDbUri, BuildMinimalSecDb());
var connector = harness.ServiceProvider.GetRequiredService<AlpineConnector>();

View File

@@ -44,6 +44,7 @@ public sealed class AlpineDependencyInjectionRoutineTests
using var provider = services.BuildServiceProvider(validateScopes: true);
using StellaOps.TestKit;
var options = provider.GetRequiredService<IOptions<AlpineOptions>>().Value;
Assert.Equal(new Uri("https://secdb.alpinelinux.org/"), options.BaseUri);
Assert.Equal(new[] { "v3.20" }, options.Releases);

View File

@@ -73,6 +73,7 @@ public sealed class DebianConnectorTests : IAsyncLifetime
{
await using var provider = await BuildServiceProviderAsync();
using StellaOps.TestKit;
SeedInitialResponses();
var connector = provider.GetRequiredService<DebianConnector>();

View File

@@ -43,6 +43,7 @@ public sealed class SuseConnectorTests
{
await using var harness = await BuildHarnessAsync();
using StellaOps.TestKit;
SeedInitialResponses(harness.Handler);
var connector = harness.ServiceProvider.GetRequiredService<SuseConnector>();

View File

@@ -42,6 +42,7 @@ public sealed class UbuntuConnectorTests
{
await using var harness = await BuildHarnessAsync();
using StellaOps.TestKit;
SeedInitialResponses(harness.Handler);
var connector = harness.ServiceProvider.GetRequiredService<UbuntuConnector>();

View File

@@ -34,6 +34,7 @@ public sealed class IcsCisaConnectorTests
public async Task FetchParseMap_EndToEnd_ProducesCanonicalAdvisories()
{
await using var harness = await BuildHarnessAsync();
using StellaOps.TestKit;
RegisterResponses(harness.Handler);
var connector = harness.ServiceProvider.GetRequiredService<IcsCisaConnector>();

View File

@@ -351,6 +351,7 @@ public sealed class KisaConnectorTests : IAsyncLifetime
using var metrics = new KisaMetricCollector();
using StellaOps.TestKit;
var connector = provider.GetRequiredService<KisaConnector>();
await connector.FetchAsync(provider, CancellationToken.None);
await connector.ParseAsync(provider, CancellationToken.None);

View File

@@ -264,6 +264,7 @@ public sealed class RuBduConnectorSnapshotTests : IAsyncLifetime
entry.LastWriteTime = new DateTimeOffset(2025, 10, 14, 9, 0, 0, TimeSpan.Zero);
using var entryStream = entry.Open();
using var writer = new StreamWriter(entryStream, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
using StellaOps.TestKit;
writer.Write(xml);
}

View File

@@ -88,6 +88,7 @@ public sealed class RuNkckiConnectorTests : IAsyncLifetime
public async Task Fetch_ReusesCachedBulletinWhenListingFails()
{
await using var provider = await BuildServiceProviderAsync();
using StellaOps.TestKit;
SeedListingAndBulletin();
var connector = provider.GetRequiredService<RuNkckiConnector>();

View File

@@ -43,6 +43,7 @@ public sealed class RuNkckiJsonParserTests
""";
using var document = JsonDocument.Parse(json);
using StellaOps.TestKit;
var dto = RuNkckiJsonParser.Parse(document.RootElement);
Assert.Equal("BDU:2025-00001", dto.FstecId);

View File

@@ -145,6 +145,7 @@ public sealed class MirrorSignatureVerifierTests
private static string WritePublicKeyPem(CryptoSigningKey signingKey)
{
using var ecdsa = ECDsa.Create(signingKey.PublicParameters);
using StellaOps.TestKit;
var info = ecdsa.ExportSubjectPublicKeyInfo();
var pem = PemEncoding.Write("PUBLIC KEY", info);
var path = Path.Combine(Path.GetTempPath(), $"stellaops-mirror-{Guid.NewGuid():N}.pem");

View File

@@ -427,6 +427,7 @@ public sealed class StellaOpsMirrorConnectorTests : IAsyncLifetime
ArgumentNullException.ThrowIfNull(signingKey);
var path = Path.Combine(Path.GetTempPath(), $"stellaops-mirror-{Guid.NewGuid():N}.pem");
using var ecdsa = ECDsa.Create(signingKey.PublicParameters);
using StellaOps.TestKit;
var publicKeyInfo = ecdsa.ExportSubjectPublicKeyInfo();
var pem = PemEncoding.Write("PUBLIC KEY", publicKeyInfo);
File.WriteAllText(path, pem);

View File

@@ -50,6 +50,7 @@ public sealed class MsrcConnectorTests : IAsyncLifetime
public async Task FetchParseMap_ProducesCanonicalAdvisory()
{
await using var provider = await BuildServiceProviderAsync();
using StellaOps.TestKit;
SeedResponses();
var connector = provider.GetRequiredService<MsrcConnector>();

View File

@@ -270,6 +270,7 @@ public sealed class JobCoordinatorTests
jobOptions.Definitions.Add(definition.Kind, definition);
using var diagnostics = new JobDiagnostics();
using StellaOps.TestKit;
var coordinator = new JobCoordinator(
Options.Create(jobOptions),
jobStore,

View File

@@ -51,6 +51,7 @@ public sealed class JobPluginRegistrationExtensionsTests
descriptor => descriptor.ServiceType.FullName == typeof(PluginRoutineExecuted).FullName);
using var provider = services.BuildServiceProvider();
using StellaOps.TestKit;
var schedulerOptions = provider.GetRequiredService<IOptions<JobSchedulerOptions>>().Value;
Assert.True(schedulerOptions.Definitions.TryGetValue(PluginJob.JobKind, out var definition));

View File

@@ -49,6 +49,7 @@ public sealed class JobSchedulerBuilderTests
builder.AddJob<DefaultedJob>(kind: "jobs:defaults");
using var provider = services.BuildServiceProvider();
using StellaOps.TestKit;
var options = provider.GetRequiredService<IOptions<JobSchedulerOptions>>().Value;
Assert.True(options.Definitions.TryGetValue("jobs:defaults", out var definition));

View File

@@ -44,6 +44,7 @@ public sealed class JsonExporterDependencyInjectionRoutineTests
routine.Register(services, configuration);
using var provider = services.BuildServiceProvider();
using StellaOps.TestKit;
var optionsAccessor = provider.GetRequiredService<IOptions<JobSchedulerOptions>>();
var options = optionsAccessor.Value;

View File

@@ -433,6 +433,7 @@ public sealed class JsonFeedExporterTests : IDisposable
private static string WriteSigningKey(string directory)
{
using var ecdsa = ECDsa.Create(ECCurve.NamedCurves.nistP256);
using StellaOps.TestKit;
var pkcs8 = ecdsa.ExportPkcs8PrivateKey();
var pem = BuildPem("PRIVATE KEY", pkcs8);
var path = Path.Combine(directory, $"mirror-key-{Guid.NewGuid():N}.pem");

View File

@@ -1198,6 +1198,7 @@ public sealed class TrivyDbFeedExporterTests : IDisposable
var archivePath = Path.Combine(workingDirectory, "db.tar.gz");
File.WriteAllBytes(archivePath, _payload);
using var sha256 = SHA256.Create();
using StellaOps.TestKit;
var digest = "sha256:" + Convert.ToHexString(sha256.ComputeHash(_payload)).ToLowerInvariant();
return Task.FromResult(new TrivyDbBuilderResult(

View File

@@ -498,6 +498,7 @@ public sealed class AdvisoryPrecedenceMergerTests
var logger = new TestLogger<AdvisoryPrecedenceMerger>();
using var metrics = new MetricCollector("StellaOps.Concelier.Merge");
using StellaOps.TestKit;
var merger = new AdvisoryPrecedenceMerger(
new AffectedPackagePrecedenceResolver(),
options,

View File

@@ -130,6 +130,7 @@ public sealed class CanonicalJsonSerializerTests
var json = CanonicalJsonSerializer.Serialize(advisory);
using var document = JsonDocument.Parse(json);
using StellaOps.TestKit;
var rangeElement = document.RootElement
.GetProperty("affectedPackages")[0]
.GetProperty("versionRanges")[0];

View File

@@ -56,6 +56,7 @@ public sealed class OsvGhsaParityDiagnosticsTests
var measurements = new List<(string Instrument, long Value, IReadOnlyDictionary<string, object?> Tags)>();
using var listener = CreateListener(measurements);
using StellaOps.TestKit;
OsvGhsaParityDiagnostics.RecordReport(report, "");
listener.Dispose();

View File

@@ -114,6 +114,7 @@ public sealed class ProvenanceDiagnosticsTests
var measurements = new List<(string Instrument, long Value, IReadOnlyDictionary<string, object?> Tags)>();
using var listener = CreateListener(measurements, "concelier.range.primitives");
using StellaOps.TestKit;
ProvenanceDiagnostics.RecordRangePrimitive("source-D", range);
listener.Dispose();

View File

@@ -508,6 +508,7 @@ public class SbomParserTests
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(content));
using StellaOps.TestKit;
// Act
var result = await _parser.ParseAsync(stream, SbomFormat.CycloneDX);

View File

@@ -25,6 +25,7 @@ public class ConcelierTimelineCursorTests : IClassFixture<WebApplicationFactory<
client.DefaultRequestHeaders.Add("X-Stella-Tenant", "tenant-a");
using var request = new HttpRequestMessage(HttpMethod.Get, "/obs/concelier/timeline?cursor=5&limit=2");
using StellaOps.TestKit;
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/event-stream"));
var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);

View File

@@ -43,6 +43,7 @@ public class ConcelierTimelineEndpointTests : IClassFixture<WebApplicationFactor
var stream = await response.Content.ReadAsStreamAsync();
using var reader = new StreamReader(stream);
using StellaOps.TestKit;
var firstLine = await reader.ReadLineAsync();
firstLine.Should().NotBeNull();
firstLine!.Should().StartWith("event: ingest.update");

View File

@@ -69,6 +69,7 @@ public sealed class VulnExplorerTelemetryTests : IDisposable
public void IsWithdrawn_DetectsWithdrawnFlagsAndTimestamps()
{
using var json = JsonDocument.Parse("{\"withdrawn\":true,\"withdrawn_at\":\"2024-10-10T00:00:00Z\"}");
using StellaOps.TestKit;
Assert.True(VulnExplorerTelemetry.IsWithdrawn(json.RootElement));
}