diff --git a/src/StellaOps.Feedser/AGENTS.md b/src/StellaOps.Feedser/AGENTS.md index 1b90bd4b..2ec4c320 100644 --- a/src/StellaOps.Feedser/AGENTS.md +++ b/src/StellaOps.Feedser/AGENTS.md @@ -117,6 +117,7 @@ You have to read `./ARCHITECTURE.md` for more information. - **Determinism**: Sort keys, normalize timestamps to UTC ISO‑8601, avoid non‑deterministic data in exports and tests. - **Status tracking**: Update your module’s `TASKS.md` as you progress (TODO → DOING → DONE/BLOCKED). - **Tests**: Add/extend fixtures and unit tests per change; never regress determinism or precedence. +- **Test layout**: Use module-specific projects in `StellaOps.Feedser..Tests`; shared fixtures/harnesses live in `StellaOps.Feedser.Testing`. --- diff --git a/src/StellaOps.Feedser/ARCHITECTURE.md b/src/StellaOps.Feedser/ARCHITECTURE.md index b117d152..19d25d13 100644 --- a/src/StellaOps.Feedser/ARCHITECTURE.md +++ b/src/StellaOps.Feedser/ARCHITECTURE.md @@ -62,7 +62,7 @@ StellaOps.Feedser.Normalization/ # Canonical mappers, validators, version-ra StellaOps.Feedser.Merge/ # Identity graph, precedence, deterministic merge StellaOps.Feedser.Exporter.Json/ StellaOps.Feedser.Exporter.TrivyDb/ -StellaOps.Feedser.Tests/ # Unit, component, integration & golden fixtures +StellaOps.Feedser..Tests/ # Component-scoped unit/integration suites (Core, Storage.Mongo, Source.*, Exporter.*, WebService, etc.) ``` --- diff --git a/src/StellaOps.Feedser/Directory.Build.props b/src/StellaOps.Feedser/Directory.Build.props index 47111759..cb42e3aa 100644 --- a/src/StellaOps.Feedser/Directory.Build.props +++ b/src/StellaOps.Feedser/Directory.Build.props @@ -11,4 +11,19 @@ runtime + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Core/JobCoordinatorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Core.Tests/JobCoordinatorTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Core/JobCoordinatorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Core.Tests/JobCoordinatorTests.cs index fe86ae00..1d1616f8 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Core/JobCoordinatorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Core.Tests/JobCoordinatorTests.cs @@ -6,7 +6,7 @@ using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using StellaOps.Feedser.Core.Jobs; -namespace StellaOps.Feedser.Tests.Core; +namespace StellaOps.Feedser.Core.Tests; public sealed class JobCoordinatorTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Core.Tests/StellaOps.Feedser.Core.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Core.Tests/StellaOps.Feedser.Core.Tests.csproj new file mode 100644 index 00000000..a45857e5 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Core.Tests/StellaOps.Feedser.Core.Tests.csproj @@ -0,0 +1,10 @@ + + + net10.0 + enable + enable + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Core/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Core/AGENTS.md index 1385c242..d33278ec 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Core/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Core/AGENTS.md @@ -25,3 +25,8 @@ Out: business logic of connectors/exporters, HTTP handlers (owned by WebService) - Metrics: job.run.started/succeeded/failed, job.durationMs, job.concurrent.rejected, job.alreadyRunning. - Logs: kind, trigger, params hash, lease holder, outcome; redact params containing secrets. - Honor CancellationToken early and often. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Core.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/JsonExportSnapshotBuilderTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/JsonExportSnapshotBuilderTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/JsonExportSnapshotBuilderTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/JsonExportSnapshotBuilderTests.cs index 8a8c94e8..ac2b39eb 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/JsonExportSnapshotBuilderTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/JsonExportSnapshotBuilderTests.cs @@ -10,7 +10,7 @@ using System.Threading.Tasks; using StellaOps.Feedser.Exporter.Json; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Exporter.Json; +namespace StellaOps.Feedser.Exporter.Json.Tests; public sealed class JsonExportSnapshotBuilderTests : IDisposable { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/JsonExporterDependencyInjectionRoutineTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/JsonExporterDependencyInjectionRoutineTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/JsonExporterDependencyInjectionRoutineTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/JsonExporterDependencyInjectionRoutineTests.cs index 0c9f9e93..64f0fbf7 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/JsonExporterDependencyInjectionRoutineTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/JsonExporterDependencyInjectionRoutineTests.cs @@ -11,7 +11,7 @@ using StellaOps.Feedser.Storage.Mongo.Advisories; using StellaOps.Feedser.Storage.Mongo.Exporting; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Exporter.Json; +namespace StellaOps.Feedser.Exporter.Json.Tests; public sealed class JsonExporterDependencyInjectionRoutineTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/JsonExporterParitySmokeTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/JsonExporterParitySmokeTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/JsonExporterParitySmokeTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/JsonExporterParitySmokeTests.cs index 8306f096..47795f7d 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/JsonExporterParitySmokeTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/JsonExporterParitySmokeTests.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; using StellaOps.Feedser.Exporter.Json; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Exporter.Json; +namespace StellaOps.Feedser.Exporter.Json.Tests; public sealed class JsonExporterParitySmokeTests : IDisposable { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/JsonFeedExporterTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/JsonFeedExporterTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/JsonFeedExporterTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/JsonFeedExporterTests.cs index 6df24552..107714be 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/JsonFeedExporterTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/JsonFeedExporterTests.cs @@ -15,7 +15,7 @@ using StellaOps.Feedser.Models; using StellaOps.Feedser.Storage.Mongo.Advisories; using StellaOps.Feedser.Storage.Mongo.Exporting; -namespace StellaOps.Feedser.Tests.Exporter.Json; +namespace StellaOps.Feedser.Exporter.Json.Tests; public sealed class JsonFeedExporterTests : IDisposable { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/StellaOps.Feedser.Exporter.Json.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/StellaOps.Feedser.Exporter.Json.Tests.csproj new file mode 100644 index 00000000..c8ac735f --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/StellaOps.Feedser.Exporter.Json.Tests.csproj @@ -0,0 +1,13 @@ + + + net10.0 + enable + enable + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/VulnListJsonExportPathResolverTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/VulnListJsonExportPathResolverTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/VulnListJsonExportPathResolverTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/VulnListJsonExportPathResolverTests.cs index d70b23f4..34e57e28 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/Json/VulnListJsonExportPathResolverTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json.Tests/VulnListJsonExportPathResolverTests.cs @@ -4,7 +4,7 @@ using System.IO; using StellaOps.Feedser.Exporter.Json; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Exporter.Json; +namespace StellaOps.Feedser.Exporter.Json.Tests; public sealed class VulnListJsonExportPathResolverTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json/AGENTS.md index fc906516..80141ef9 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.Json/AGENTS.md @@ -21,3 +21,8 @@ Out: ORAS push and Trivy DB BoltDB writing (owned by Trivy exporter). ## Observability & security expectations - Metrics: export.json.records, bytes, duration, delta.changed. - Logs: target path, record counts, digest; no sensitive data. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Exporter.Json.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/StellaOps.Feedser.Exporter.TrivyDb.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/StellaOps.Feedser.Exporter.TrivyDb.Tests.csproj new file mode 100644 index 00000000..6ac1cb21 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/StellaOps.Feedser.Exporter.TrivyDb.Tests.csproj @@ -0,0 +1,13 @@ + + + net10.0 + enable + enable + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/TrivyDb/TrivyDbExportPlannerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/TrivyDbExportPlannerTests.cs similarity index 97% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/TrivyDb/TrivyDbExportPlannerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/TrivyDbExportPlannerTests.cs index 35510370..59314c02 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/TrivyDb/TrivyDbExportPlannerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/TrivyDbExportPlannerTests.cs @@ -2,7 +2,7 @@ using System; using StellaOps.Feedser.Exporter.TrivyDb; using StellaOps.Feedser.Storage.Mongo.Exporting; -namespace StellaOps.Feedser.Tests.Exporter.TrivyDb; +namespace StellaOps.Feedser.Exporter.TrivyDb.Tests; public sealed class TrivyDbExportPlannerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/TrivyDb/TrivyDbFeedExporterTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/TrivyDbFeedExporterTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/TrivyDb/TrivyDbFeedExporterTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/TrivyDbFeedExporterTests.cs index 1548a211..ae832c7a 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/TrivyDb/TrivyDbFeedExporterTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/TrivyDbFeedExporterTests.cs @@ -14,7 +14,7 @@ using StellaOps.Feedser.Models; using StellaOps.Feedser.Storage.Mongo.Advisories; using StellaOps.Feedser.Storage.Mongo.Exporting; -namespace StellaOps.Feedser.Tests.Exporter.TrivyDb; +namespace StellaOps.Feedser.Exporter.TrivyDb.Tests; public sealed class TrivyDbFeedExporterTests : IDisposable { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/TrivyDb/TrivyDbOciWriterTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/TrivyDbOciWriterTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/TrivyDb/TrivyDbOciWriterTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/TrivyDbOciWriterTests.cs index 358dffb9..ce615979 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/TrivyDb/TrivyDbOciWriterTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/TrivyDbOciWriterTests.cs @@ -7,7 +7,7 @@ using System.Text.Json; using System.Security.Cryptography; using StellaOps.Feedser.Exporter.TrivyDb; -namespace StellaOps.Feedser.Tests.Exporter.TrivyDb; +namespace StellaOps.Feedser.Exporter.TrivyDb.Tests; public sealed class TrivyDbOciWriterTests : IDisposable { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/TrivyDb/TrivyDbPackageBuilderTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/TrivyDbPackageBuilderTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/TrivyDb/TrivyDbPackageBuilderTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/TrivyDbPackageBuilderTests.cs index 85256f64..dcd4a6ab 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Exporter/TrivyDb/TrivyDbPackageBuilderTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb.Tests/TrivyDbPackageBuilderTests.cs @@ -6,7 +6,7 @@ using System.Text; using System.Text.Json; using StellaOps.Feedser.Exporter.TrivyDb; -namespace StellaOps.Feedser.Tests.Exporter.TrivyDb; +namespace StellaOps.Feedser.Exporter.TrivyDb.Tests; public sealed class TrivyDbPackageBuilderTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb/AGENTS.md index 5d9a90b7..2897733c 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Exporter.TrivyDb/AGENTS.md @@ -22,3 +22,8 @@ Out: signing (external pipeline), scanner behavior. ## Observability & security expectations - Metrics: export.trivy.records, size_bytes, duration, oras.push.success/fail. - Logs: export path, repo/tag, digest; redact credentials; backoff on push errors. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Exporter.TrivyDb.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/AdvisoryPrecedenceMergerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/AdvisoryPrecedenceMergerTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/AdvisoryPrecedenceMergerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/AdvisoryPrecedenceMergerTests.cs index ae4111e7..470eab38 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/AdvisoryPrecedenceMergerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/AdvisoryPrecedenceMergerTests.cs @@ -4,7 +4,7 @@ using Microsoft.Extensions.Time.Testing; using StellaOps.Feedser.Merge.Services; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Merge; +namespace StellaOps.Feedser.Merge.Tests; public sealed class AdvisoryPrecedenceMergerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/AffectedPackagePrecedenceResolverTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/AffectedPackagePrecedenceResolverTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/AffectedPackagePrecedenceResolverTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/AffectedPackagePrecedenceResolverTests.cs index 8045dfc7..db2467c9 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/AffectedPackagePrecedenceResolverTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/AffectedPackagePrecedenceResolverTests.cs @@ -2,7 +2,7 @@ using System; using StellaOps.Feedser.Merge.Services; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Merge; +namespace StellaOps.Feedser.Merge.Tests; public sealed class AffectedPackagePrecedenceResolverTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/CanonicalHashCalculatorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/CanonicalHashCalculatorTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/CanonicalHashCalculatorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/CanonicalHashCalculatorTests.cs index 00306372..a71b6327 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/CanonicalHashCalculatorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/CanonicalHashCalculatorTests.cs @@ -2,7 +2,7 @@ using System.Linq; using StellaOps.Feedser.Merge.Services; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Merge; +namespace StellaOps.Feedser.Merge.Tests; public sealed class CanonicalHashCalculatorTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/DebianEvrComparerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/DebianEvrComparerTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/DebianEvrComparerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/DebianEvrComparerTests.cs index 6630d304..a35c4489 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/DebianEvrComparerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/DebianEvrComparerTests.cs @@ -1,7 +1,7 @@ using StellaOps.Feedser.Merge.Comparers; using StellaOps.Feedser.Normalization.Distro; -namespace StellaOps.Feedser.Tests.Merge; +namespace StellaOps.Feedser.Merge.Tests; public sealed class DebianEvrComparerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/MergeEventWriterTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/MergeEventWriterTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/MergeEventWriterTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/MergeEventWriterTests.cs index fe954154..ff7c2f2c 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/MergeEventWriterTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/MergeEventWriterTests.cs @@ -4,7 +4,7 @@ using StellaOps.Feedser.Merge.Services; using StellaOps.Feedser.Models; using StellaOps.Feedser.Storage.Mongo.MergeEvents; -namespace StellaOps.Feedser.Tests.Merge; +namespace StellaOps.Feedser.Merge.Tests; public sealed class MergeEventWriterTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/MergePrecedenceIntegrationTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/MergePrecedenceIntegrationTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/MergePrecedenceIntegrationTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/MergePrecedenceIntegrationTests.cs index 35e6892d..5297ec41 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/MergePrecedenceIntegrationTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/MergePrecedenceIntegrationTests.cs @@ -9,9 +9,9 @@ using StellaOps.Feedser.Merge.Services; using StellaOps.Feedser.Models; using StellaOps.Feedser.Storage.Mongo; using StellaOps.Feedser.Storage.Mongo.MergeEvents; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; -namespace StellaOps.Feedser.Tests.Merge; +namespace StellaOps.Feedser.Merge.Tests; [Collection("mongo-fixture")] public sealed class MergePrecedenceIntegrationTests : IAsyncLifetime diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/NevraComparerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/NevraComparerTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/NevraComparerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/NevraComparerTests.cs index 8248be8d..96418dd3 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/NevraComparerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/NevraComparerTests.cs @@ -1,7 +1,7 @@ using StellaOps.Feedser.Merge.Comparers; using StellaOps.Feedser.Normalization.Distro; -namespace StellaOps.Feedser.Tests.Merge; +namespace StellaOps.Feedser.Merge.Tests; public sealed class NevraComparerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/SemanticVersionRangeResolverTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/SemanticVersionRangeResolverTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/SemanticVersionRangeResolverTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/SemanticVersionRangeResolverTests.cs index 82a44aab..8d6450d4 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Merge/SemanticVersionRangeResolverTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/SemanticVersionRangeResolverTests.cs @@ -1,6 +1,6 @@ using StellaOps.Feedser.Merge.Comparers; -namespace StellaOps.Feedser.Tests.Merge; +namespace StellaOps.Feedser.Merge.Tests; public sealed class SemanticVersionRangeResolverTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/StellaOps.Feedser.Merge.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/StellaOps.Feedser.Merge.Tests.csproj new file mode 100644 index 00000000..209ec7c7 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Merge.Tests/StellaOps.Feedser.Merge.Tests.csproj @@ -0,0 +1,13 @@ + + + net10.0 + enable + enable + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Merge/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Merge/AGENTS.md index 7455d94b..976c6662 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Merge/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Merge/AGENTS.md @@ -23,3 +23,8 @@ Out: fetching/parsing, exporter packaging, signing. ## Observability & security expectations - Metrics: merge.delta.count, merge.identity.conflicts, merge.range.overrides, merge.duration_ms. - Logs: decisions (why replaced), keys involved, hashes; avoid dumping large blobs; redact secrets (none expected). +## Tests +- Author and review coverage in `../StellaOps.Feedser.Merge.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/AdvisoryTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/AdvisoryTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/AdvisoryTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/AdvisoryTests.cs index 20007e8b..653f6acd 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/AdvisoryTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/AdvisoryTests.cs @@ -1,7 +1,7 @@ using System.Linq; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Models; +namespace StellaOps.Feedser.Models.Tests; public sealed class AdvisoryTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/AffectedPackageStatusTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/AffectedPackageStatusTests.cs similarity index 96% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/AffectedPackageStatusTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/AffectedPackageStatusTests.cs index a8538e37..e90401cf 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/AffectedPackageStatusTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/AffectedPackageStatusTests.cs @@ -1,7 +1,7 @@ using System; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Models; +namespace StellaOps.Feedser.Models.Tests; public sealed class AffectedPackageStatusTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/AliasSchemeRegistryTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/AliasSchemeRegistryTests.cs similarity index 97% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/AliasSchemeRegistryTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/AliasSchemeRegistryTests.cs index f01572f3..d313f30c 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/AliasSchemeRegistryTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/AliasSchemeRegistryTests.cs @@ -1,6 +1,6 @@ using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Models; +namespace StellaOps.Feedser.Models.Tests; public sealed class AliasSchemeRegistryTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/CanonicalExampleFactory.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/CanonicalExampleFactory.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/CanonicalExampleFactory.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/CanonicalExampleFactory.cs index be4a5a27..c52bcbf5 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/CanonicalExampleFactory.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/CanonicalExampleFactory.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Globalization; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Models; +namespace StellaOps.Feedser.Models.Tests; internal static class CanonicalExampleFactory { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/CanonicalExamplesTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/CanonicalExamplesTests.cs similarity index 95% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/CanonicalExamplesTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/CanonicalExamplesTests.cs index b4ab20b8..d8ff25bf 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/CanonicalExamplesTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/CanonicalExamplesTests.cs @@ -1,11 +1,11 @@ using System.Text; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Models; +namespace StellaOps.Feedser.Models.Tests; public sealed class CanonicalExamplesTests { - private static readonly string FixtureRoot = Path.Combine(GetProjectRoot(), "Models", "Fixtures"); + private static readonly string FixtureRoot = Path.Combine(GetProjectRoot(), "Fixtures"); private const string UpdateEnvVar = "UPDATE_GOLDENS"; [Trait("Category", "GoldenSnapshots")] diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/CanonicalJsonSerializerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/CanonicalJsonSerializerTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/CanonicalJsonSerializerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/CanonicalJsonSerializerTests.cs index 39745870..368c6d5a 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/CanonicalJsonSerializerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/CanonicalJsonSerializerTests.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Text.Json; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Models; +namespace StellaOps.Feedser.Models.Tests; public sealed class CanonicalJsonSerializerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/SeverityNormalizationTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/SeverityNormalizationTests.cs similarity index 95% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/SeverityNormalizationTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/SeverityNormalizationTests.cs index 8ed91366..7b9099e4 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Models/SeverityNormalizationTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/SeverityNormalizationTests.cs @@ -1,6 +1,6 @@ using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Models; +namespace StellaOps.Feedser.Models.Tests; public sealed class SeverityNormalizationTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/StellaOps.Feedser.Models.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/StellaOps.Feedser.Models.Tests.csproj new file mode 100644 index 00000000..6d0b9223 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Models.Tests/StellaOps.Feedser.Models.Tests.csproj @@ -0,0 +1,10 @@ + + + net10.0 + enable + enable + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Models/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Models/AGENTS.md index c5056c6f..cee8c137 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Models/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Models/AGENTS.md @@ -23,3 +23,8 @@ Out: fetching/parsing external schemas, storage, HTTP. - No secrets; purely in-memory types. - Provide debug renders for test snapshots (canonical JSON). - Emit model version identifiers in logs when canonical structures change; keep adapters for older readers until deprecated. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Models.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Models/BACKWARD_COMPATIBILITY.md b/src/StellaOps.Feedser/StellaOps.Feedser.Models/BACKWARD_COMPATIBILITY.md index ba77b634..4cb589a8 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Models/BACKWARD_COMPATIBILITY.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Models/BACKWARD_COMPATIBILITY.md @@ -33,7 +33,7 @@ This playbook captures the policies and workflow required when evolving the cano ## Testing Checklist -- `StellaOps.Feedser.Tests.Models` – update unit tests and golden examples. +- `StellaOps.Feedser.Models.Tests` – update unit tests and golden examples. - `Serialization determinism` – ensure the hash regression tests cover the new fields. - Exporter integration (`Json`, `TrivyDb`) – confirm manifests include provenance + tree metadata for the new shape. diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/CpeNormalizerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/CpeNormalizerTests.cs similarity index 97% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/CpeNormalizerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/CpeNormalizerTests.cs index 3dab6820..18021f33 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/CpeNormalizerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/CpeNormalizerTests.cs @@ -1,6 +1,6 @@ using StellaOps.Feedser.Normalization.Identifiers; -namespace StellaOps.Feedser.Tests.Normalization; +namespace StellaOps.Feedser.Normalization.Tests; public sealed class CpeNormalizerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/CvssMetricNormalizerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/CvssMetricNormalizerTests.cs similarity index 97% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/CvssMetricNormalizerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/CvssMetricNormalizerTests.cs index 292798e6..038a2943 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/CvssMetricNormalizerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/CvssMetricNormalizerTests.cs @@ -1,7 +1,7 @@ using StellaOps.Feedser.Models; using StellaOps.Feedser.Normalization.Cvss; -namespace StellaOps.Feedser.Tests.Normalization; +namespace StellaOps.Feedser.Normalization.Tests; public sealed class CvssMetricNormalizerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/DebianEvrParserTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/DebianEvrParserTests.cs similarity index 93% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/DebianEvrParserTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/DebianEvrParserTests.cs index a939ac55..e1de86c7 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/DebianEvrParserTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/DebianEvrParserTests.cs @@ -1,6 +1,6 @@ using StellaOps.Feedser.Normalization.Distro; -namespace StellaOps.Feedser.Tests.Normalization; +namespace StellaOps.Feedser.Normalization.Tests; public sealed class DebianEvrParserTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/DescriptionNormalizerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/DescriptionNormalizerTests.cs similarity index 95% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/DescriptionNormalizerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/DescriptionNormalizerTests.cs index df3173a5..e04f5098 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/DescriptionNormalizerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/DescriptionNormalizerTests.cs @@ -1,6 +1,6 @@ using StellaOps.Feedser.Normalization.Text; -namespace StellaOps.Feedser.Tests.Normalization; +namespace StellaOps.Feedser.Normalization.Tests; public sealed class DescriptionNormalizerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/NevraParserTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/NevraParserTests.cs similarity index 97% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/NevraParserTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/NevraParserTests.cs index 72ec00d4..3fa48927 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/NevraParserTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/NevraParserTests.cs @@ -1,6 +1,6 @@ using StellaOps.Feedser.Normalization.Distro; -namespace StellaOps.Feedser.Tests.Normalization; +namespace StellaOps.Feedser.Normalization.Tests; public sealed class NevraParserTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/PackageUrlNormalizerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/PackageUrlNormalizerTests.cs similarity index 96% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/PackageUrlNormalizerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/PackageUrlNormalizerTests.cs index 7cd30d59..b754f6e3 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Normalization/PackageUrlNormalizerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/PackageUrlNormalizerTests.cs @@ -1,7 +1,7 @@ using System.Linq; using StellaOps.Feedser.Normalization.Identifiers; -namespace StellaOps.Feedser.Tests.Normalization; +namespace StellaOps.Feedser.Normalization.Tests; public sealed class PackageUrlNormalizerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/StellaOps.Feedser.Normalization.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/StellaOps.Feedser.Normalization.Tests.csproj new file mode 100644 index 00000000..ed4b68a5 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/StellaOps.Feedser.Normalization.Tests.csproj @@ -0,0 +1,11 @@ + + + net10.0 + enable + enable + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertFr/CertFrConnectorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/CertFr/CertFrConnectorTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertFr/CertFrConnectorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/CertFr/CertFrConnectorTests.cs index 6f2dc2cd..4323cc1d 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertFr/CertFrConnectorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/CertFr/CertFrConnectorTests.cs @@ -24,10 +24,10 @@ using StellaOps.Feedser.Storage.Mongo; using StellaOps.Feedser.Storage.Mongo.Advisories; using StellaOps.Feedser.Storage.Mongo.Documents; using StellaOps.Feedser.Storage.Mongo.Dtos; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; using StellaOps.Feedser.Models; -namespace StellaOps.Feedser.Tests.Source.CertFr; +namespace StellaOps.Feedser.Source.CertFr.Tests; [Collection("mongo-fixture")] public sealed class CertFrConnectorTests : IAsyncLifetime diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertFr/Fixtures/certfr-advisories.snapshot.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/CertFr/Fixtures/certfr-advisories.snapshot.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertFr/Fixtures/certfr-advisories.snapshot.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/CertFr/Fixtures/certfr-advisories.snapshot.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertFr/Fixtures/certfr-detail-AV-2024-001.html b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/CertFr/Fixtures/certfr-detail-AV-2024-001.html similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertFr/Fixtures/certfr-detail-AV-2024-001.html rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/CertFr/Fixtures/certfr-detail-AV-2024-001.html diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertFr/Fixtures/certfr-detail-AV-2024-002.html b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/CertFr/Fixtures/certfr-detail-AV-2024-002.html similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertFr/Fixtures/certfr-detail-AV-2024-002.html rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/CertFr/Fixtures/certfr-detail-AV-2024-002.html diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertFr/Fixtures/certfr-feed.xml b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/CertFr/Fixtures/certfr-feed.xml similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertFr/Fixtures/certfr-feed.xml rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/CertFr/Fixtures/certfr-feed.xml diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/StellaOps.Feedser.Source.CertFr.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/StellaOps.Feedser.Source.CertFr.Tests.csproj new file mode 100644 index 00000000..d2c7c787 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr.Tests/StellaOps.Feedser.Source.CertFr.Tests.csproj @@ -0,0 +1,16 @@ + + + net10.0 + enable + enable + + + + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr/AGENTS.md index 6f1eba17..5049da1f 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertFr/AGENTS.md @@ -21,3 +21,8 @@ Out: OVAL or package-level authority. ## Observability & security expectations - Metrics: certfr.fetch.items, certfr.parse.fail, certfr.map.count. - Logs: feed URL(s), item ids/urls, extraction durations; no PII; allowlist hostnames. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Source.CertFr.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertIn/CertInConnectorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn.Tests/CertIn/CertInConnectorTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertIn/CertInConnectorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn.Tests/CertIn/CertInConnectorTests.cs index 7287f8e8..af48a338 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertIn/CertInConnectorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn.Tests/CertIn/CertInConnectorTests.cs @@ -26,9 +26,9 @@ using StellaOps.Feedser.Storage.Mongo; using StellaOps.Feedser.Storage.Mongo.Advisories; using StellaOps.Feedser.Storage.Mongo.Documents; using StellaOps.Feedser.Storage.Mongo.Dtos; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; -namespace StellaOps.Feedser.Tests.Source.CertIn; +namespace StellaOps.Feedser.Source.CertIn.Tests; [Collection("mongo-fixture")] public sealed class CertInConnectorTests : IAsyncLifetime diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertIn/Fixtures/alerts-page1.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn.Tests/CertIn/Fixtures/alerts-page1.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertIn/Fixtures/alerts-page1.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn.Tests/CertIn/Fixtures/alerts-page1.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertIn/Fixtures/detail-CIAD-2024-0005.html b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn.Tests/CertIn/Fixtures/detail-CIAD-2024-0005.html similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertIn/Fixtures/detail-CIAD-2024-0005.html rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn.Tests/CertIn/Fixtures/detail-CIAD-2024-0005.html diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertIn/Fixtures/expected-advisory.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn.Tests/CertIn/Fixtures/expected-advisory.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/CertIn/Fixtures/expected-advisory.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn.Tests/CertIn/Fixtures/expected-advisory.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn.Tests/StellaOps.Feedser.Source.CertIn.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn.Tests/StellaOps.Feedser.Source.CertIn.Tests.csproj new file mode 100644 index 00000000..734d7e82 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn.Tests/StellaOps.Feedser.Source.CertIn.Tests.csproj @@ -0,0 +1,16 @@ + + + net10.0 + enable + enable + + + + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn/AGENTS.md index 12e91d22..ebb7215e 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.CertIn/AGENTS.md @@ -22,3 +22,8 @@ Out: package range authority; scraping behind auth walls. ## Observability & security expectations - Metrics: certin.fetch.items, certin.parse.fail, certin.map.enriched_count. - Logs: advisory codes, CVE counts per advisory, timing; allowlist host; redact personal data if present. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Source.CertIn.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/CannedHttpMessageHandlerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/CannedHttpMessageHandlerTests.cs similarity index 96% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/CannedHttpMessageHandlerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/CannedHttpMessageHandlerTests.cs index 7379aa01..21a9751b 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/CannedHttpMessageHandlerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/CannedHttpMessageHandlerTests.cs @@ -2,7 +2,7 @@ using System.Net; using System.Net.Http; using StellaOps.Feedser.Source.Common.Testing; -namespace StellaOps.Feedser.Tests.Source.Common; +namespace StellaOps.Feedser.Source.Common.Tests; public sealed class CannedHttpMessageHandlerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/HtmlContentSanitizerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/HtmlContentSanitizerTests.cs similarity index 95% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/HtmlContentSanitizerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/HtmlContentSanitizerTests.cs index 2e49bbac..25320224 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/HtmlContentSanitizerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/HtmlContentSanitizerTests.cs @@ -1,6 +1,6 @@ using StellaOps.Feedser.Source.Common.Html; -namespace StellaOps.Feedser.Tests.Source.Common; +namespace StellaOps.Feedser.Source.Common.Tests; public sealed class HtmlContentSanitizerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/PackageCoordinateHelperTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/PackageCoordinateHelperTests.cs similarity index 96% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/PackageCoordinateHelperTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/PackageCoordinateHelperTests.cs index 6d005786..2a3f9e42 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/PackageCoordinateHelperTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/PackageCoordinateHelperTests.cs @@ -1,7 +1,7 @@ using NuGet.Versioning; using StellaOps.Feedser.Source.Common.Packages; -namespace StellaOps.Feedser.Tests.Source.Common; +namespace StellaOps.Feedser.Source.Common.Tests; public sealed class PackageCoordinateHelperTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/PdfTextExtractorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/PdfTextExtractorTests.cs similarity index 96% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/PdfTextExtractorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/PdfTextExtractorTests.cs index e64ef7b3..692eed57 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/PdfTextExtractorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/PdfTextExtractorTests.cs @@ -1,6 +1,6 @@ using StellaOps.Feedser.Source.Common.Pdf; -namespace StellaOps.Feedser.Tests.Source.Common; +namespace StellaOps.Feedser.Source.Common.Tests; public sealed class PdfTextExtractorTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/SourceFetchServiceTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/SourceFetchServiceTests.cs similarity index 95% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/SourceFetchServiceTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/SourceFetchServiceTests.cs index 6144ae37..ec5788bb 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/SourceFetchServiceTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/SourceFetchServiceTests.cs @@ -1,6 +1,6 @@ using StellaOps.Feedser.Source.Common.Fetch; -namespace StellaOps.Feedser.Tests.Source.Common; +namespace StellaOps.Feedser.Source.Common.Tests; public sealed class SourceFetchServiceTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/TimeWindowCursorPlannerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/TimeWindowCursorPlannerTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/TimeWindowCursorPlannerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/TimeWindowCursorPlannerTests.cs index eff9d9e9..f404e1ea 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/TimeWindowCursorPlannerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/TimeWindowCursorPlannerTests.cs @@ -1,7 +1,7 @@ using MongoDB.Bson; using StellaOps.Feedser.Source.Common.Cursors; -namespace StellaOps.Feedser.Tests.Source.Common; +namespace StellaOps.Feedser.Source.Common.Tests; public sealed class TimeWindowCursorPlannerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/UrlNormalizerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/UrlNormalizerTests.cs similarity index 93% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/UrlNormalizerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/UrlNormalizerTests.cs index f911645e..c7881c04 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Common/UrlNormalizerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Common/UrlNormalizerTests.cs @@ -1,6 +1,6 @@ using StellaOps.Feedser.Source.Common.Url; -namespace StellaOps.Feedser.Tests.Source.Common; +namespace StellaOps.Feedser.Source.Common.Tests; public sealed class UrlNormalizerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Json/JsonSchemaValidatorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Json/JsonSchemaValidatorTests.cs similarity index 97% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Json/JsonSchemaValidatorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Json/JsonSchemaValidatorTests.cs index 84eb9310..753f7bd2 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Json/JsonSchemaValidatorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Json/JsonSchemaValidatorTests.cs @@ -4,7 +4,7 @@ using Json.Schema; using Microsoft.Extensions.Logging.Abstractions; using StellaOps.Feedser.Source.Common.Json; -namespace StellaOps.Feedser.Tests.Source.Json; +namespace StellaOps.Feedser.Source.Common.Tests.Json; public sealed class JsonSchemaValidatorTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/StellaOps.Feedser.Source.Common.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/StellaOps.Feedser.Source.Common.Tests.csproj new file mode 100644 index 00000000..2e226f16 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/StellaOps.Feedser.Source.Common.Tests.csproj @@ -0,0 +1,10 @@ + + + net10.0 + enable + enable + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Xml/XmlSchemaValidatorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Xml/XmlSchemaValidatorTests.cs similarity index 97% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Xml/XmlSchemaValidatorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Xml/XmlSchemaValidatorTests.cs index 4cccd325..2825e7d0 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Xml/XmlSchemaValidatorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common.Tests/Xml/XmlSchemaValidatorTests.cs @@ -6,7 +6,7 @@ using Microsoft.Extensions.Logging.Abstractions; using FeedserXmlSchemaValidator = StellaOps.Feedser.Source.Common.Xml.XmlSchemaValidator; using FeedserXmlSchemaValidationException = StellaOps.Feedser.Source.Common.Xml.XmlSchemaValidationException; -namespace StellaOps.Feedser.Tests.Source.Xml; +namespace StellaOps.Feedser.Source.Common.Tests.Xml; public sealed class XmlSchemaValidatorTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common/AGENTS.md index 533bcb09..723af148 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common/AGENTS.md @@ -25,3 +25,8 @@ Out: connector-specific schemas/mapping rules, merge precedence. - Metrics: http.req.count, http.retry.count, rate_limit.remaining, validator.fail.count. - Logs include uri, status, retries, etag; redact tokens and auth headers. - Distributed tracing hooks and per-connector counters should be wired centrally for consistent observability. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Source.Common.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common/Properties/AssemblyInfo.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common/Properties/AssemblyInfo.cs index 8011a1e1..d6e4b5d8 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common/Properties/AssemblyInfo.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Common/Properties/AssemblyInfo.cs @@ -1,3 +1,3 @@ using System.Runtime.CompilerServices; -[assembly: InternalsVisibleTo("StellaOps.Feedser.Tests")] +[assembly: InternalsVisibleTo("StellaOps.Feedser.Source.Common.Tests")] diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/csaf-rhsa-2025-0001.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/csaf-rhsa-2025-0001.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/csaf-rhsa-2025-0001.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/csaf-rhsa-2025-0001.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/csaf-rhsa-2025-0002.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/csaf-rhsa-2025-0002.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/csaf-rhsa-2025-0002.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/csaf-rhsa-2025-0002.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/csaf-rhsa-2025-0003.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/csaf-rhsa-2025-0003.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/csaf-rhsa-2025-0003.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/csaf-rhsa-2025-0003.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/rhsa-2025-0001.snapshot.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/rhsa-2025-0001.snapshot.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/rhsa-2025-0001.snapshot.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/rhsa-2025-0001.snapshot.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/summary-page1-repeat.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/summary-page1-repeat.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/summary-page1-repeat.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/summary-page1-repeat.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/summary-page1.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/summary-page1.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/summary-page1.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/summary-page1.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/summary-page2.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/summary-page2.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/summary-page2.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/summary-page2.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/summary-page3.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/summary-page3.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/Fixtures/summary-page3.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/Fixtures/summary-page3.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/RedHatConnectorHarnessTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/RedHatConnectorHarnessTests.cs similarity index 96% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/RedHatConnectorHarnessTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/RedHatConnectorHarnessTests.cs index 3a48c7c2..325b8846 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/RedHatConnectorHarnessTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/RedHatConnectorHarnessTests.cs @@ -8,10 +8,10 @@ using StellaOps.Feedser.Source.Distro.RedHat; using StellaOps.Feedser.Source.Distro.RedHat.Configuration; using StellaOps.Feedser.Storage.Mongo; using StellaOps.Feedser.Storage.Mongo.Advisories; -using StellaOps.Feedser.Tests.Source.TestInfrastructure; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; +using StellaOps.Feedser.Testing; -namespace StellaOps.Feedser.Tests.Source.Distro.RedHat; +namespace StellaOps.Feedser.Source.Distro.RedHat.Tests; [Collection("mongo-fixture")] public sealed class RedHatConnectorHarnessTests : IAsyncLifetime diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/RedHatConnectorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/RedHatConnectorTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/RedHatConnectorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/RedHatConnectorTests.cs index 4c73ac57..dcd6351a 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Distro/RedHat/RedHatConnectorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/RedHat/RedHatConnectorTests.cs @@ -21,12 +21,12 @@ using StellaOps.Feedser.Models; using StellaOps.Feedser.Storage.Mongo; using StellaOps.Feedser.Storage.Mongo.Advisories; using StellaOps.Feedser.Storage.Mongo.Documents; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; using StellaOps.Plugin; using Xunit; using Xunit.Abstractions; -namespace StellaOps.Feedser.Tests.Source.Distro.RedHat; +namespace StellaOps.Feedser.Source.Distro.RedHat.Tests; [Collection("mongo-fixture")] public sealed class RedHatConnectorTests : IAsyncLifetime diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/StellaOps.Feedser.Source.Distro.RedHat.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/StellaOps.Feedser.Source.Distro.RedHat.Tests.csproj new file mode 100644 index 00000000..695afed4 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat.Tests/StellaOps.Feedser.Source.Distro.RedHat.Tests.csproj @@ -0,0 +1,16 @@ + + + net10.0 + enable + enable + + + + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat/AGENTS.md index 7f54b1ed..50dfbcef 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Distro.RedHat/AGENTS.md @@ -21,3 +21,8 @@ Out: building RPM artifacts; cross-distro reconciliation beyond Red Hat. ## Observability & security expectations - Metrics: redhat.fetch.items, redhat.oval.defs, redhat.parse.fail, redhat.map.affected_rpm. - Logs: cursor bounds, advisory ids, NEVRA counts; allowlist Red Hat endpoints. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Source.Distro.RedHat.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Ics/Kaspersky/Fixtures/detail-acme-controller-2024.html b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky.Tests/Kaspersky/Fixtures/detail-acme-controller-2024.html similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Ics/Kaspersky/Fixtures/detail-acme-controller-2024.html rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky.Tests/Kaspersky/Fixtures/detail-acme-controller-2024.html diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Ics/Kaspersky/Fixtures/expected-advisory.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky.Tests/Kaspersky/Fixtures/expected-advisory.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Ics/Kaspersky/Fixtures/expected-advisory.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky.Tests/Kaspersky/Fixtures/expected-advisory.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Ics/Kaspersky/Fixtures/feed-page1.xml b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky.Tests/Kaspersky/Fixtures/feed-page1.xml similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Ics/Kaspersky/Fixtures/feed-page1.xml rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky.Tests/Kaspersky/Fixtures/feed-page1.xml diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Ics/Kaspersky/KasperskyConnectorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky.Tests/Kaspersky/KasperskyConnectorTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Ics/Kaspersky/KasperskyConnectorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky.Tests/Kaspersky/KasperskyConnectorTests.cs index aa8a39a6..d0dcb9f2 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Ics/Kaspersky/KasperskyConnectorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky.Tests/Kaspersky/KasperskyConnectorTests.cs @@ -23,9 +23,9 @@ using StellaOps.Feedser.Storage.Mongo; using StellaOps.Feedser.Storage.Mongo.Advisories; using StellaOps.Feedser.Storage.Mongo.Documents; using StellaOps.Feedser.Storage.Mongo.Dtos; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; -namespace StellaOps.Feedser.Tests.Source.Ics.Kaspersky; +namespace StellaOps.Feedser.Source.Ics.Kaspersky.Tests; [Collection("mongo-fixture")] public sealed class KasperskyConnectorTests : IAsyncLifetime diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky.Tests/StellaOps.Feedser.Source.Ics.Kaspersky.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky.Tests/StellaOps.Feedser.Source.Ics.Kaspersky.Tests.csproj new file mode 100644 index 00000000..57f706c3 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky.Tests/StellaOps.Feedser.Source.Ics.Kaspersky.Tests.csproj @@ -0,0 +1,16 @@ + + + net10.0 + enable + enable + + + + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky/AGENTS.md index 65178c19..be150c72 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Ics.Kaspersky/AGENTS.md @@ -22,3 +22,8 @@ Out: firmware downloads; reverse-engineering artifacts. ## Observability & security expectations - Metrics: icsk.fetch.items, icsk.parse.fail, icsk.map.affected_count. - Logs: slugs, vendor/product counts, timing; allowlist host. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Source.Ics.Kaspersky.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Jvn/Fixtures/expected-advisory.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn.Tests/Jvn/Fixtures/expected-advisory.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Jvn/Fixtures/expected-advisory.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn.Tests/Jvn/Fixtures/expected-advisory.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Jvn/Fixtures/jvnrss-window1.xml b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn.Tests/Jvn/Fixtures/jvnrss-window1.xml similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Jvn/Fixtures/jvnrss-window1.xml rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn.Tests/Jvn/Fixtures/jvnrss-window1.xml diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Jvn/Fixtures/vuldef-JVNDB-2024-123456.xml b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn.Tests/Jvn/Fixtures/vuldef-JVNDB-2024-123456.xml similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Jvn/Fixtures/vuldef-JVNDB-2024-123456.xml rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn.Tests/Jvn/Fixtures/vuldef-JVNDB-2024-123456.xml diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Jvn/JvnConnectorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn.Tests/Jvn/JvnConnectorTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Jvn/JvnConnectorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn.Tests/Jvn/JvnConnectorTests.cs index b54a5b73..c7a841cd 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Jvn/JvnConnectorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn.Tests/Jvn/JvnConnectorTests.cs @@ -25,9 +25,9 @@ using StellaOps.Feedser.Storage.Mongo.Documents; using StellaOps.Feedser.Storage.Mongo.Dtos; using StellaOps.Feedser.Storage.Mongo.JpFlags; using Xunit.Abstractions; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; -namespace StellaOps.Feedser.Tests.Source.Jvn; +namespace StellaOps.Feedser.Source.Jvn.Tests; [Collection("mongo-fixture")] public sealed class JvnConnectorTests : IAsyncLifetime diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn.Tests/StellaOps.Feedser.Source.Jvn.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn.Tests/StellaOps.Feedser.Source.Jvn.Tests.csproj new file mode 100644 index 00000000..be7fa815 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn.Tests/StellaOps.Feedser.Source.Jvn.Tests.csproj @@ -0,0 +1,16 @@ + + + net10.0 + enable + enable + + + + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn/AGENTS.md index e4250c75..e506a279 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Jvn/AGENTS.md @@ -23,3 +23,8 @@ Out: overriding distro or PSIRT ranges without concrete evidence; scraping unoff ## Observability & security expectations - Metrics: jvn.fetch.requests, jvn.items, jvn.parse.fail, jvn.map.enriched_count, jvn.flags.jp_count. - Logs: window bounds, jvndb ids processed, vendor_status distribution; redact API keys. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Source.Jvn.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/Fixtures/nvd-invalid-schema.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/Fixtures/nvd-invalid-schema.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/Fixtures/nvd-invalid-schema.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/Fixtures/nvd-invalid-schema.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/Fixtures/nvd-multipage-1.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/Fixtures/nvd-multipage-1.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/Fixtures/nvd-multipage-1.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/Fixtures/nvd-multipage-1.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/Fixtures/nvd-multipage-2.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/Fixtures/nvd-multipage-2.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/Fixtures/nvd-multipage-2.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/Fixtures/nvd-multipage-2.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/Fixtures/nvd-multipage-3.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/Fixtures/nvd-multipage-3.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/Fixtures/nvd-multipage-3.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/Fixtures/nvd-multipage-3.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/Fixtures/nvd-window-1.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/Fixtures/nvd-window-1.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/Fixtures/nvd-window-1.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/Fixtures/nvd-window-1.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/Fixtures/nvd-window-2.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/Fixtures/nvd-window-2.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/Fixtures/nvd-window-2.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/Fixtures/nvd-window-2.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/NvdConnectorHarnessTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/NvdConnectorHarnessTests.cs similarity index 97% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/NvdConnectorHarnessTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/NvdConnectorHarnessTests.cs index f18734f8..da86c9f2 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/NvdConnectorHarnessTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/NvdConnectorHarnessTests.cs @@ -11,11 +11,11 @@ using StellaOps.Feedser.Source.Nvd.Configuration; using StellaOps.Feedser.Storage.Mongo; using StellaOps.Feedser.Storage.Mongo.Advisories; using StellaOps.Feedser.Storage.Mongo.Documents; -using StellaOps.Feedser.Tests.Source.TestInfrastructure; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; +using StellaOps.Feedser.Testing; using System.Net; -namespace StellaOps.Feedser.Tests.Source.Nvd; +namespace StellaOps.Feedser.Source.Nvd.Tests; [Collection("mongo-fixture")] public sealed class NvdConnectorHarnessTests : IAsyncLifetime diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/NvdConnectorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/NvdConnectorTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/NvdConnectorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/NvdConnectorTests.cs index fccb5544..c6fc0df6 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Nvd/NvdConnectorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/Nvd/NvdConnectorTests.cs @@ -23,9 +23,9 @@ using StellaOps.Feedser.Storage.Mongo; using StellaOps.Feedser.Storage.Mongo.Advisories; using StellaOps.Feedser.Storage.Mongo.Documents; using StellaOps.Feedser.Storage.Mongo.Dtos; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; -namespace StellaOps.Feedser.Tests.Source.Nvd; +namespace StellaOps.Feedser.Source.Nvd.Tests; [Collection("mongo-fixture")] public sealed class NvdConnectorTests : IAsyncLifetime diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/StellaOps.Feedser.Source.Nvd.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/StellaOps.Feedser.Source.Nvd.Tests.csproj new file mode 100644 index 00000000..a00e03f5 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd.Tests/StellaOps.Feedser.Source.Nvd.Tests.csproj @@ -0,0 +1,16 @@ + + + net10.0 + enable + enable + + + + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd/AGENTS.md index 63f12cf8..d6e6a5fc 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Nvd/AGENTS.md @@ -20,3 +20,8 @@ In: registry-level data, references, generic CPEs. Out: authoritative distro package ranges; vendor patch states. ## Observability & security expectations - Metrics: nvd.fetch.pages, items.count, schema.fail, map.advisories, window.advance; structured logs include window bounds and etag hits. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Source.Nvd.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Osv/OsvMapperTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Osv.Tests/Osv/OsvMapperTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Osv/OsvMapperTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Osv.Tests/Osv/OsvMapperTests.cs index c51b9e3e..7f722145 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Osv/OsvMapperTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Osv.Tests/Osv/OsvMapperTests.cs @@ -10,7 +10,7 @@ using StellaOps.Feedser.Storage.Mongo.Documents; using StellaOps.Feedser.Storage.Mongo.Dtos; using Xunit; -namespace StellaOps.Feedser.Tests.Source.Osv; +namespace StellaOps.Feedser.Source.Osv.Tests; public sealed class OsvMapperTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Osv.Tests/StellaOps.Feedser.Source.Osv.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Osv.Tests/StellaOps.Feedser.Source.Osv.Tests.csproj new file mode 100644 index 00000000..61506541 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Osv.Tests/StellaOps.Feedser.Source.Osv.Tests.csproj @@ -0,0 +1,13 @@ + + + net10.0 + enable + enable + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Osv/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Osv/AGENTS.md index 88acd9b7..0f0c8d7b 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Osv/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Osv/AGENTS.md @@ -20,3 +20,8 @@ In: SemVer+PURL accuracy for OSS ecosystems. Out: vendor PSIRT and distro OVAL specifics. ## Observability & security expectations - Metrics: osv.items, schema.fail, ranges.count, ecosystems.covered; logs include ecosystem and cursor values. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Source.Osv.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Adobe/AdobeConnectorFetchTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/Adobe/AdobeConnectorFetchTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Adobe/AdobeConnectorFetchTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/Adobe/AdobeConnectorFetchTests.cs index 227241cd..d9b8f958 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Adobe/AdobeConnectorFetchTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/Adobe/AdobeConnectorFetchTests.cs @@ -27,9 +27,9 @@ using StellaOps.Feedser.Storage.Mongo.Advisories; using StellaOps.Feedser.Storage.Mongo.Documents; using StellaOps.Feedser.Storage.Mongo.Dtos; using StellaOps.Feedser.Storage.Mongo.PsirtFlags; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; -namespace StellaOps.Feedser.Tests.Source.Vndr.Adobe; +namespace StellaOps.Feedser.Source.Vndr.Adobe.Tests; [Collection("mongo-fixture")] public sealed class AdobeConnectorFetchTests : IAsyncLifetime diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Adobe/Fixtures/adobe-advisories.snapshot.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/Adobe/Fixtures/adobe-advisories.snapshot.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Adobe/Fixtures/adobe-advisories.snapshot.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/Adobe/Fixtures/adobe-advisories.snapshot.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Adobe/Fixtures/adobe-detail-apsb25-85.html b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/Adobe/Fixtures/adobe-detail-apsb25-85.html similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Adobe/Fixtures/adobe-detail-apsb25-85.html rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/Adobe/Fixtures/adobe-detail-apsb25-85.html diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Adobe/Fixtures/adobe-detail-apsb25-87.html b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/Adobe/Fixtures/adobe-detail-apsb25-87.html similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Adobe/Fixtures/adobe-detail-apsb25-87.html rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/Adobe/Fixtures/adobe-detail-apsb25-87.html diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Adobe/Fixtures/adobe-index.html b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/Adobe/Fixtures/adobe-index.html similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Adobe/Fixtures/adobe-index.html rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/Adobe/Fixtures/adobe-index.html diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/StellaOps.Feedser.Source.Vndr.Adobe.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/StellaOps.Feedser.Source.Vndr.Adobe.Tests.csproj new file mode 100644 index 00000000..d05dbb40 --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe.Tests/StellaOps.Feedser.Source.Vndr.Adobe.Tests.csproj @@ -0,0 +1,17 @@ + + + net10.0 + enable + enable + + + + + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe/AGENTS.md index 9679418b..29038dd5 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Adobe/AGENTS.md @@ -22,3 +22,8 @@ Out: signing, package artifact downloads, non-Adobe product truth. ## Observability & security expectations - Metrics: adobe.fetch.count, adobe.parse.fail, adobe.map.affected_count, adobe.cursor.moves. - Logs: advisory ids, product counts, extraction timings; hosts allowlisted; no secret logging. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Source.Vndr.Adobe.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Chromium/ChromiumConnectorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/Chromium/ChromiumConnectorTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Chromium/ChromiumConnectorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/Chromium/ChromiumConnectorTests.cs index 2be2b1fd..7f537256 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Chromium/ChromiumConnectorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/Chromium/ChromiumConnectorTests.cs @@ -21,9 +21,9 @@ using StellaOps.Feedser.Storage.Mongo; using StellaOps.Feedser.Storage.Mongo.Advisories; using StellaOps.Feedser.Storage.Mongo.Documents; using StellaOps.Feedser.Storage.Mongo.PsirtFlags; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; -namespace StellaOps.Feedser.Tests.Source.Vndr.Chromium; +namespace StellaOps.Feedser.Source.Vndr.Chromium.Tests; [Collection("mongo-fixture")] public sealed class ChromiumConnectorTests : IAsyncLifetime diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Chromium/ChromiumMapperTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/Chromium/ChromiumMapperTests.cs similarity index 96% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Chromium/ChromiumMapperTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/Chromium/ChromiumMapperTests.cs index 2b07d3df..4567ef56 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Chromium/ChromiumMapperTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/Chromium/ChromiumMapperTests.cs @@ -4,7 +4,7 @@ using StellaOps.Feedser.Source.Vndr.Chromium; using StellaOps.Feedser.Source.Vndr.Chromium.Internal; using Xunit; -namespace StellaOps.Feedser.Tests.Source.Vndr.Chromium; +namespace StellaOps.Feedser.Source.Vndr.Chromium.Tests; public sealed class ChromiumMapperTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Chromium/Fixtures/chromium-advisory.snapshot.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/Chromium/Fixtures/chromium-advisory.snapshot.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Chromium/Fixtures/chromium-advisory.snapshot.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/Chromium/Fixtures/chromium-advisory.snapshot.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Chromium/Fixtures/chromium-detail.html b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/Chromium/Fixtures/chromium-detail.html similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Chromium/Fixtures/chromium-detail.html rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/Chromium/Fixtures/chromium-detail.html diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Chromium/Fixtures/chromium-feed.xml b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/Chromium/Fixtures/chromium-feed.xml similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Chromium/Fixtures/chromium-feed.xml rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/Chromium/Fixtures/chromium-feed.xml diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/StellaOps.Feedser.Source.Vndr.Chromium.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/StellaOps.Feedser.Source.Vndr.Chromium.Tests.csproj new file mode 100644 index 00000000..dd06a3fa --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium.Tests/StellaOps.Feedser.Source.Vndr.Chromium.Tests.csproj @@ -0,0 +1,18 @@ + + + net10.0 + enable + enable + + + + + + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium/AGENTS.md index 65c986e3..62ed5040 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium/AGENTS.md @@ -22,3 +22,8 @@ Out: OS distro packaging semantics; bug bounty details beyond references. ## Observability & security expectations - Metrics: chromium.fetch.items, chromium.parse.fail, chromium.map.affected_count. - Logs: post slugs, version extracted, platform coverage, timing; allowlist blog host. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Source.Vndr.Chromium.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium/Properties/AssemblyInfo.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium/Properties/AssemblyInfo.cs index 8011a1e1..c682035d 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium/Properties/AssemblyInfo.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium/Properties/AssemblyInfo.cs @@ -1,3 +1,3 @@ using System.Runtime.CompilerServices; -[assembly: InternalsVisibleTo("StellaOps.Feedser.Tests")] +[assembly: InternalsVisibleTo("StellaOps.Feedser.Source.Vndr.Chromium.Tests")] diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium/StellaOps.Feedser.Source.Vndr.Chromium.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium/StellaOps.Feedser.Source.Vndr.Chromium.csproj index 0fb392e5..bf487399 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium/StellaOps.Feedser.Source.Vndr.Chromium.csproj +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Chromium/StellaOps.Feedser.Source.Vndr.Chromium.csproj @@ -25,7 +25,7 @@ - <_Parameter1>StellaOps.Feedser.Tests + <_Parameter1>StellaOps.Feedser.Source.Vndr.Chromium.Tests diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Oracle/Fixtures/oracle-advisories.snapshot.json b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle.Tests/Oracle/Fixtures/oracle-advisories.snapshot.json similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Oracle/Fixtures/oracle-advisories.snapshot.json rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle.Tests/Oracle/Fixtures/oracle-advisories.snapshot.json diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Oracle/Fixtures/oracle-detail-cpuapr2024-01.html b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle.Tests/Oracle/Fixtures/oracle-detail-cpuapr2024-01.html similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Oracle/Fixtures/oracle-detail-cpuapr2024-01.html rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle.Tests/Oracle/Fixtures/oracle-detail-cpuapr2024-01.html diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Oracle/Fixtures/oracle-detail-cpuapr2024-02.html b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle.Tests/Oracle/Fixtures/oracle-detail-cpuapr2024-02.html similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Oracle/Fixtures/oracle-detail-cpuapr2024-02.html rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle.Tests/Oracle/Fixtures/oracle-detail-cpuapr2024-02.html diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Oracle/OracleConnectorTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle.Tests/Oracle/OracleConnectorTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Oracle/OracleConnectorTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle.Tests/Oracle/OracleConnectorTests.cs index 17ee778a..5d38b5b3 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Oracle/OracleConnectorTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle.Tests/Oracle/OracleConnectorTests.cs @@ -26,9 +26,9 @@ using StellaOps.Feedser.Storage.Mongo.Advisories; using StellaOps.Feedser.Storage.Mongo.Documents; using StellaOps.Feedser.Storage.Mongo.Dtos; using StellaOps.Feedser.Storage.Mongo.PsirtFlags; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; -namespace StellaOps.Feedser.Tests.Source.Vndr.Oracle; +namespace StellaOps.Feedser.Source.Vndr.Oracle.Tests; [Collection("mongo-fixture")] public sealed class OracleConnectorTests : IAsyncLifetime diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle.Tests/StellaOps.Feedser.Source.Vndr.Oracle.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle.Tests/StellaOps.Feedser.Source.Vndr.Oracle.Tests.csproj new file mode 100644 index 00000000..b9a6a2ee --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle.Tests/StellaOps.Feedser.Source.Vndr.Oracle.Tests.csproj @@ -0,0 +1,16 @@ + + + net10.0 + enable + enable + + + + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle/AGENTS.md index 70dae72b..8130f592 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Oracle/AGENTS.md @@ -21,3 +21,8 @@ Out: signing or patch artifact downloads. ## Observability & security expectations - Metrics: oracle.fetch.pages, oracle.cpu.cycles, oracle.parse.fail, oracle.map.affected_count. - Logs: cycle tags, advisory ids, extraction timings; redact nothing sensitive. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Source.Vndr.Oracle.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Vmware.Tests/StellaOps.Feedser.Source.Vndr.Vmware.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Vmware.Tests/StellaOps.Feedser.Source.Vndr.Vmware.Tests.csproj new file mode 100644 index 00000000..3f55e9bc --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Vmware.Tests/StellaOps.Feedser.Source.Vndr.Vmware.Tests.csproj @@ -0,0 +1,13 @@ + + + net10.0 + enable + enable + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Vmware/VmwareMapperTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Vmware.Tests/Vmware/VmwareMapperTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Vmware/VmwareMapperTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Vmware.Tests/Vmware/VmwareMapperTests.cs index d0c4435a..b88d72fc 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/Vndr/Vmware/VmwareMapperTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Vmware.Tests/Vmware/VmwareMapperTests.cs @@ -10,7 +10,7 @@ using StellaOps.Feedser.Storage.Mongo.Documents; using StellaOps.Feedser.Storage.Mongo.Dtos; using Xunit; -namespace StellaOps.Feedser.Tests.Source.Vndr.Vmware; +namespace StellaOps.Feedser.Source.Vndr.Vmware.Tests; public sealed class VmwareMapperTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Vmware/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Vmware/AGENTS.md index 540f3879..5f1b714e 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Vmware/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Source.Vndr.Vmware/AGENTS.md @@ -22,3 +22,8 @@ Out: customer portal authentication flows beyond public advisories; downloading ## Observability & security expectations - Metrics: vmware.fetch.items, vmware.parse.fail, vmware.map.affected_count. - Logs: vmsa ids, product counts, extraction timings; handle portal rate limits politely. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Source.Vndr.Vmware.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/AdvisoryStorePerformanceTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/AdvisoryStorePerformanceTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/AdvisoryStorePerformanceTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/AdvisoryStorePerformanceTests.cs index c9d20383..0639e096 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/AdvisoryStorePerformanceTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/AdvisoryStorePerformanceTests.cs @@ -10,7 +10,7 @@ using StellaOps.Feedser.Storage.Mongo.Migrations; using Xunit; using Xunit.Abstractions; -namespace StellaOps.Feedser.Tests.Storage; +namespace StellaOps.Feedser.Storage.Mongo.Tests; [Collection("mongo-fixture")] public sealed class AdvisoryStorePerformanceTests : IClassFixture diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/AdvisoryStoreTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/AdvisoryStoreTests.cs similarity index 96% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/AdvisoryStoreTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/AdvisoryStoreTests.cs index fe986be7..848f536f 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/AdvisoryStoreTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/AdvisoryStoreTests.cs @@ -2,7 +2,7 @@ using Microsoft.Extensions.Logging.Abstractions; using StellaOps.Feedser.Models; using StellaOps.Feedser.Storage.Mongo.Advisories; -namespace StellaOps.Feedser.Tests.Storage; +namespace StellaOps.Feedser.Storage.Mongo.Tests; [Collection("mongo-fixture")] public sealed class AdvisoryStoreTests : IClassFixture diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/DocumentStoreTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/DocumentStoreTests.cs similarity index 97% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/DocumentStoreTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/DocumentStoreTests.cs index 5dc315b1..a8eef366 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/DocumentStoreTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/DocumentStoreTests.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.Logging.Abstractions; using StellaOps.Feedser.Storage.Mongo.Documents; -namespace StellaOps.Feedser.Tests.Storage; +namespace StellaOps.Feedser.Storage.Mongo.Tests; [Collection("mongo-fixture")] public sealed class DocumentStoreTests : IClassFixture diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/DtoStoreTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/DtoStoreTests.cs similarity index 96% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/DtoStoreTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/DtoStoreTests.cs index 5e591a92..7667dcb5 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/DtoStoreTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/DtoStoreTests.cs @@ -2,7 +2,7 @@ using Microsoft.Extensions.Logging.Abstractions; using MongoDB.Bson; using StellaOps.Feedser.Storage.Mongo.Dtos; -namespace StellaOps.Feedser.Tests.Storage; +namespace StellaOps.Feedser.Storage.Mongo.Tests; [Collection("mongo-fixture")] public sealed class DtoStoreTests : IClassFixture diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/ExportStateManagerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/ExportStateManagerTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/ExportStateManagerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/ExportStateManagerTests.cs index bd858a70..c7bd6ae4 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/ExportStateManagerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/ExportStateManagerTests.cs @@ -4,7 +4,7 @@ using System.Threading; using System.Threading.Tasks; using StellaOps.Feedser.Storage.Mongo.Exporting; -namespace StellaOps.Feedser.Tests.Storage; +namespace StellaOps.Feedser.Storage.Mongo.Tests; public sealed class ExportStateManagerTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/ExportStateStoreTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/ExportStateStoreTests.cs similarity index 96% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/ExportStateStoreTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/ExportStateStoreTests.cs index d7298f6a..4f88562d 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/ExportStateStoreTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/ExportStateStoreTests.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.Logging.Abstractions; using StellaOps.Feedser.Storage.Mongo.Exporting; -namespace StellaOps.Feedser.Tests.Storage; +namespace StellaOps.Feedser.Storage.Mongo.Tests; [Collection("mongo-fixture")] public sealed class ExportStateStoreTests : IClassFixture diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/MergeEventStoreTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/MergeEventStoreTests.cs similarity index 95% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/MergeEventStoreTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/MergeEventStoreTests.cs index a244dc1d..bb75d08c 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/MergeEventStoreTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/MergeEventStoreTests.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.Logging.Abstractions; using StellaOps.Feedser.Storage.Mongo.MergeEvents; -namespace StellaOps.Feedser.Tests.Storage; +namespace StellaOps.Feedser.Storage.Mongo.Tests; [Collection("mongo-fixture")] public sealed class MergeEventStoreTests : IClassFixture diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/Migrations/MongoMigrationRunnerTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/Migrations/MongoMigrationRunnerTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/Migrations/MongoMigrationRunnerTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/Migrations/MongoMigrationRunnerTests.cs index 0e4a2012..44eb0535 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/Migrations/MongoMigrationRunnerTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/Migrations/MongoMigrationRunnerTests.cs @@ -10,7 +10,7 @@ using StellaOps.Feedser.Storage.Mongo; using StellaOps.Feedser.Storage.Mongo.Migrations; using Xunit; -namespace StellaOps.Feedser.Tests.Storage.Migrations; +namespace StellaOps.Feedser.Storage.Mongo.Tests.Migrations; [Collection("mongo-fixture")] public sealed class MongoMigrationRunnerTests diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/MongoJobStoreTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/MongoJobStoreTests.cs similarity index 95% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/MongoJobStoreTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/MongoJobStoreTests.cs index 44e7082d..271951ed 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/MongoJobStoreTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/MongoJobStoreTests.cs @@ -3,7 +3,7 @@ using MongoDB.Driver; using StellaOps.Feedser.Core.Jobs; using StellaOps.Feedser.Storage.Mongo; -namespace StellaOps.Feedser.Tests.Storage; +namespace StellaOps.Feedser.Storage.Mongo.Tests; [Collection("mongo-fixture")] public sealed class MongoJobStoreTests : IClassFixture @@ -98,5 +98,3 @@ public sealed class MongoJobStoreTests : IClassFixture } } -[CollectionDefinition("mongo-fixture")] -public sealed class MongoFixtureCollection : ICollectionFixture; diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/MongoSourceStateRepositoryTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/MongoSourceStateRepositoryTests.cs similarity index 97% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/MongoSourceStateRepositoryTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/MongoSourceStateRepositoryTests.cs index daa950b0..40cbedb9 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/MongoSourceStateRepositoryTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/MongoSourceStateRepositoryTests.cs @@ -2,7 +2,7 @@ using Microsoft.Extensions.Logging.Abstractions; using MongoDB.Bson; using StellaOps.Feedser.Storage.Mongo; -namespace StellaOps.Feedser.Tests.Storage; +namespace StellaOps.Feedser.Storage.Mongo.Tests; [Collection("mongo-fixture")] public sealed class MongoSourceStateRepositoryTests : IClassFixture diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/RawDocumentRetentionServiceTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/RawDocumentRetentionServiceTests.cs similarity index 98% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/RawDocumentRetentionServiceTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/RawDocumentRetentionServiceTests.cs index 4e4d85cd..1c78adc5 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/RawDocumentRetentionServiceTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/RawDocumentRetentionServiceTests.cs @@ -8,7 +8,7 @@ using StellaOps.Feedser.Storage.Mongo; using StellaOps.Feedser.Storage.Mongo.Documents; using StellaOps.Feedser.Storage.Mongo.Dtos; -namespace StellaOps.Feedser.Tests.Storage; +namespace StellaOps.Feedser.Storage.Mongo.Tests; [Collection("mongo-fixture")] public sealed class RawDocumentRetentionServiceTests : IClassFixture diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/StellaOps.Feedser.Storage.Mongo.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/StellaOps.Feedser.Storage.Mongo.Tests.csproj new file mode 100644 index 00000000..cd30dc7f --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo.Tests/StellaOps.Feedser.Storage.Mongo.Tests.csproj @@ -0,0 +1,12 @@ + + + net10.0 + enable + enable + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo/AGENTS.md index 9fc42b15..bfcfeb64 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo/AGENTS.md @@ -22,3 +22,8 @@ Out: business mapping logic, HTTP, packaging. - Log collection/index creation; warn on existing mismatches. - Timeouts and retry policies; avoid unbounded scans; page reads. - Do not log DSNs with credentials; redact in diagnostics. +## Tests +- Author and review coverage in `../StellaOps.Feedser.Storage.Mongo.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo/Properties/AssemblyInfo.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo/Properties/AssemblyInfo.cs index 8011a1e1..34f9836a 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo/Properties/AssemblyInfo.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Storage.Mongo/Properties/AssemblyInfo.cs @@ -1,3 +1,3 @@ using System.Runtime.CompilerServices; -[assembly: InternalsVisibleTo("StellaOps.Feedser.Tests")] +[assembly: InternalsVisibleTo("StellaOps.Feedser.Storage.Mongo.Tests")] diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/TestInfrastructure/ConnectorTestHarness.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Testing/ConnectorTestHarness.cs similarity index 97% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/TestInfrastructure/ConnectorTestHarness.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Testing/ConnectorTestHarness.cs index 186b48ba..d8cb8e12 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Source/TestInfrastructure/ConnectorTestHarness.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Testing/ConnectorTestHarness.cs @@ -11,9 +11,9 @@ using Microsoft.Extensions.Time.Testing; using StellaOps.Feedser.Source.Common; using StellaOps.Feedser.Source.Common.Testing; using StellaOps.Feedser.Storage.Mongo; -using StellaOps.Feedser.Tests.Storage; +using StellaOps.Feedser.Testing; -namespace StellaOps.Feedser.Tests.Source.TestInfrastructure; +namespace StellaOps.Feedser.Testing; /// /// Provides a reusable container for connector integration tests with canned HTTP responses and Mongo isolation. diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/MongoIntegrationFixture.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Testing/MongoIntegrationFixture.cs similarity index 94% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/MongoIntegrationFixture.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Testing/MongoIntegrationFixture.cs index f12c80b1..d97e42ed 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/Storage/MongoIntegrationFixture.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Testing/MongoIntegrationFixture.cs @@ -1,8 +1,9 @@ using MongoDB.Bson; using Mongo2Go; +using Xunit; using MongoDB.Driver; -namespace StellaOps.Feedser.Tests.Storage; +namespace StellaOps.Feedser.Testing; public sealed class MongoIntegrationFixture : IAsyncLifetime { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Testing/StellaOps.Feedser.Testing.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Testing/StellaOps.Feedser.Testing.csproj new file mode 100644 index 00000000..1a3fdb0d --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Testing/StellaOps.Feedser.Testing.csproj @@ -0,0 +1,18 @@ + + + net10.0 + enable + enable + + + + + + all + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/AssemblyInfo.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Tests.Shared/AssemblyInfo.cs similarity index 100% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/AssemblyInfo.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.Tests.Shared/AssemblyInfo.cs diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests.Shared/MongoFixtureCollection.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Tests.Shared/MongoFixtureCollection.cs new file mode 100644 index 00000000..afcf2d3d --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.Tests.Shared/MongoFixtureCollection.cs @@ -0,0 +1,6 @@ +using Xunit; + +namespace StellaOps.Feedser.Testing; + +[CollectionDefinition("mongo-fixture", DisableParallelization = true)] +public sealed class MongoFixtureCollection : ICollectionFixture; diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Tests/AGENTS.md deleted file mode 100644 index bde34af1..00000000 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/AGENTS.md +++ /dev/null @@ -1,23 +0,0 @@ -# AGENTS -## Role -Quality and determinism gate for the entire pipeline. Provides unit/integration tests, golden fixtures, snapshot verification, and conformance checks (schemas, precedence, media types, reproducibility). -## Scope -- Mongo integration (Mongo2Go) for job store, advisory store, and readiness checks. -- Common validators (XML/JSON) tests and error reporting coverage. -- Plugin loader tests to ensure built-in connectors/exporters are discoverable. -- Distro utilities (NEVRA parse/compare) correctness. -- Exporters: snapshot determinism and OCI/media-type conformance (Trivy DB). -- End-to-end mini-flows: fetch->parse->map for selected sources using canned HTTP. -## Participants -- All modules (subject under test). -- CI system (reports, artifacts). -- Observability (asserts metrics/logging presence where feasible). -## Interfaces & contracts -- Tests must be deterministic, independent, and reproducible; use TimeProvider and fixed seeds; no network unless explicitly mocked/recorded. -- Snapshots reviewed as part of schema evolution process. -## In/Out of scope -In: rigorous tests, fixtures, mocks, canned servers. -Out: production config, secrets, flaky remote calls. -## Observability & security expectations -- Do not log secrets; scrub DSNs in output. -- Record durations to detect regressions; fail on significant outliers where thresholds defined. diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/GlobalUsings.cs b/src/StellaOps.Feedser/StellaOps.Feedser.Tests/GlobalUsings.cs deleted file mode 100644 index 08e052ac..00000000 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/GlobalUsings.cs +++ /dev/null @@ -1 +0,0 @@ -global using StellaOps.Feedser.Source.Common; diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/StellaOps.Feedser.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.Tests/StellaOps.Feedser.Tests.csproj deleted file mode 100644 index b3436341..00000000 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/StellaOps.Feedser.Tests.csproj +++ /dev/null @@ -1,63 +0,0 @@ - - - - - net10.0 - enable - enable - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/TASKS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Tests/TASKS.md deleted file mode 100644 index d86ee53e..00000000 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/TASKS.md +++ /dev/null @@ -1,21 +0,0 @@ -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|MongoJobStore lifecycle tests (run create/succeed/fail)|QA|Storage.Mongo|DONE – MongoJobStoreTests cover create/start/complete flow on Mongo2Go.| -|PluginLoaderTests for built-in plugins (connector/exporter)|QA|Plugin hosting|DONE – PluginCatalog scan verified without throwing; name assertions deferred until plugins land.| -|XmlSchemaValidator tests (valid/invalid)|QA|Source.Common|DONE – added XML validator + unit tests mirroring JSON coverage for success and failure cases.| -|NEVRA parse/compare tests|QA|Source.Distro.RedHat|DONE – expanded parser tests for epochs/architectures and malformed inputs.| -|Exporter.Json determinism snapshot tests|QA|Exporter.Json|DONE – snapshot builder tests enforce sorted outputs and byte-for-byte stability.| -|Exporter.TrivyDb OCI/media-type tests|QA|Exporter.TrivyDb|DONE – OCI writer/builder tests assert manifest media types and digest determinism.| -|Incremental resume tests for NVD/RedHat|QA|Source.Nvd, Source.Distro.RedHat|DONE – new resume scenarios cover pending document recovery and state cleanup.| -|Merge precedence integration tests|QA|Merge service|DONE – MergePrecedenceIntegrationTests validates PSIRT precedence, KEV enrichments, and merge event persistence on Mongo.| -|Full test suite baseline guard in CI|QA|CI workflows|DONE – `feedser-tests.yml` adds duration check and artifact upload.| -|Multi-page NVD fetch regression test|QA|Source.Nvd|DONE – harness-backed regression ensures multipage pagination preserves startIndex metadata and state.| -|Job coordinator lease failure test|QA|Core|DONE – heartbeat failure integration verifies runs fail with lease maintenance errors and metrics instrumentation.| -|CI build & test gate|QA|CI workflows|DONE – feedser-ci workflow restores/builds/tests on push and PR with Release configuration.| -|Migrate connector sample tests|QA|Tests|DONE – new harness centralizes connector fixtures and adds harness regression suites under `StellaOps.Feedser.Tests`.| -|HTTP fixture harness for connectors|QA|Source.Common|DONE – ConnectorTestHarness wraps Mongo fixture + canned HTTP for connector scenarios.| -|Clean up connector QA warnings (nullability, async enumerators)|QA|Tests|TODO – resolve remaining CS8602/CS8425 warnings in connector harness + Trivy exporter tests.| -|Replace Assert.Equal size checks with Assert.Empty|QA|Tests|TODO – update CertIn/Kaspersky connector tests to satisfy xUnit2013 analyzer.| -|Repair test compile regressions (connector fixtures, exporter smoke tests)|QA|Tests|TODO – clear remaining build breaks in Json parity smoke + Trivy exporter tests and re-verify connector harness fixes.| -|Rebaseline JVN snapshot test after schema tolerance|QA|Source.Jvn|TODO – refresh fixture/expectations once schema change lands upstream; currently test fails under new tolerance guard.| diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/TESTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.Tests/TESTS.md deleted file mode 100644 index 2dce7455..00000000 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/TESTS.md +++ /dev/null @@ -1,31 +0,0 @@ -# Tests - -- `StellaOps.Feedser.Tests.Source.Nvd.NvdConnectorTests.FetchParseMap_FlowProducesCanonicalAdvisories` - - Asserts incremental fetch/parse/map pipeline for NVD connector using canned HTTP fixtures. - - Validates golden advisory output, duplicate handling, and state persistence between windows. -- `StellaOps.Feedser.Tests.Exporter.Json.JsonExportSnapshotBuilderTests` - - Verifies JSON exporter produces deterministic tree layouts and byte-for-byte stable snapshots across runs. - - Confirms snapshot output matches canonical serializer expectations. -- `StellaOps.Feedser.Tests.Exporter.TrivyDb.TrivyDbPackageBuilderTests` - - Checks OCI manifest/config/layer media types and digests produced by Trivy package builder. - - Guards against missing metadata payloads. -- `StellaOps.Feedser.Tests.Exporter.TrivyDb.TrivyDbOciWriterTests` - - Ensures OCI layout (index, blobs, metadata) is written deterministically and validates ref annotations. - - Asserts unsupported digest schemes are rejected. -- `StellaOps.Feedser.Tests.Storage.ExportStateManagerTests` - - Exercises Mongo-backed export state lifecycle for full and delta exports. - - Verifies baseline requirement before accepting delta updates. -- `StellaOps.Feedser.Tests.WebService.WebServiceEndpointsTests` - - Covers health/ready endpoints, job definition listing, and trigger outcomes using Mongo2Go-backed host. - - Uses stubbed job coordinator to exercise scheduler responses and new exporter registrations. -- `StellaOps.Feedser.Tests.Storage.AdvisoryStorePerformanceTests.UpsertAndQueryLargeAdvisories_CompletesWithinBudget` - - Validates large advisory payload throughput stays within defined budgets. - - Baseline from 2025-10-05 (Windows 11, .NET SDK 10.0.100-rc.1): upsert 1.25 s total (41.7 ms/doc), GetRecent 0.37 s (12.4 ms/doc), Find 0.28 s (9.2 ms/doc), total 1.90 s. -- `StellaOps.Feedser.Tests.Normalization.NevraParserTests` - - Ensures canonically formatted NEVRA output preserves trimmed/normalized components for connectors and merge comparers. -- `StellaOps.Feedser.Tests.Normalization.DebianEvrParserTests` - - Guards Debian EVR canonicalization (epoch/revision handling) used across distro pipelines. -- `StellaOps.Feedser.Tests.Normalization.PackageUrlNormalizerTests` - - Verifies Package URL canonicalization (type/namespace casing, qualifier ordering) for exporter and connector consumers. -- `StellaOps.Feedser.Tests.Normalization.CpeNormalizerTests` - - Converts legacy and 2.3 CPE values to normalized strings consumed by connectors and tests URI upgrade path. diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/PluginLoaderTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.WebService.Tests/PluginLoaderTests.cs similarity index 94% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/PluginLoaderTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.WebService.Tests/PluginLoaderTests.cs index d98f8718..967888d4 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/PluginLoaderTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.WebService.Tests/PluginLoaderTests.cs @@ -1,6 +1,6 @@ using StellaOps.Plugin; -namespace StellaOps.Feedser.Tests; +namespace StellaOps.Feedser.WebService.Tests; public class PluginLoaderTests { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.WebService.Tests/StellaOps.Feedser.WebService.Tests.csproj b/src/StellaOps.Feedser/StellaOps.Feedser.WebService.Tests/StellaOps.Feedser.WebService.Tests.csproj new file mode 100644 index 00000000..fc2954ad --- /dev/null +++ b/src/StellaOps.Feedser/StellaOps.Feedser.WebService.Tests/StellaOps.Feedser.WebService.Tests.csproj @@ -0,0 +1,13 @@ + + + net10.0 + enable + enable + + + + + + + + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/WebService/WebServiceEndpointsTests.cs b/src/StellaOps.Feedser/StellaOps.Feedser.WebService.Tests/WebServiceEndpointsTests.cs similarity index 99% rename from src/StellaOps.Feedser/StellaOps.Feedser.Tests/WebService/WebServiceEndpointsTests.cs rename to src/StellaOps.Feedser/StellaOps.Feedser.WebService.Tests/WebServiceEndpointsTests.cs index d7ef6ccb..7d6fe2ab 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.Tests/WebService/WebServiceEndpointsTests.cs +++ b/src/StellaOps.Feedser/StellaOps.Feedser.WebService.Tests/WebServiceEndpointsTests.cs @@ -13,7 +13,7 @@ using StellaOps.Feedser.WebService.Jobs; using StellaOps.Feedser.WebService.Options; using Xunit.Sdk; -namespace StellaOps.Feedser.Tests.WebService; +namespace StellaOps.Feedser.WebService.Tests; public sealed class WebServiceEndpointsTests : IAsyncLifetime { diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.WebService/AGENTS.md b/src/StellaOps.Feedser/StellaOps.Feedser.WebService/AGENTS.md index f7b3e3f0..20ba4c4e 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.WebService/AGENTS.md +++ b/src/StellaOps.Feedser/StellaOps.Feedser.WebService/AGENTS.md @@ -29,3 +29,8 @@ Out: business logic of jobs, HTML UI, authn/z (future). ## Observability & security expectations - Log startup config (redact DSN credentials), plugin scan results (missing ordered plugins if any). - Structured responses with status codes; no stack traces in HTTP bodies; errors mapped cleanly. +## Tests +- Author and review coverage in `../StellaOps.Feedser.WebService.Tests`. +- Shared fixtures (e.g., `MongoIntegrationFixture`, `ConnectorTestHarness`) live in `../StellaOps.Feedser.Testing`. +- Keep fixtures deterministic; match new cases to real-world advisories or regression scenarios. + diff --git a/src/StellaOps.Feedser/StellaOps.Feedser.sln b/src/StellaOps.Feedser/StellaOps.Feedser.sln index fc2e251b..6ebdfa46 100644 --- a/src/StellaOps.Feedser/StellaOps.Feedser.sln +++ b/src/StellaOps.Feedser/StellaOps.Feedser.sln @@ -1,4 +1,4 @@ - + Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 @@ -11,8 +11,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Models", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.Ics.Cisa", "StellaOps.Feedser.Source.Ics.Cisa\StellaOps.Feedser.Source.Ics.Cisa.csproj", "{6A301F32-2EEE-491B-9DB9-3BF26D032F07}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Tests", "StellaOps.Feedser.Tests\StellaOps.Feedser.Tests.csproj", "{8FBE9BCD-9972-4B21-9493-912DE14CEBF3}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Core", "StellaOps.Feedser.Core\StellaOps.Feedser.Core.csproj", "{AFCCC916-58E8-4676-AABB-54B04CEA3392}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Storage.Mongo", "StellaOps.Feedser.Storage.Mongo\StellaOps.Feedser.Storage.Mongo.csproj", "{BF3DAB2F-E46E-49C1-9BA5-AA389763A632}" @@ -83,6 +81,48 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.Di EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.DependencyInjection", "..\__Libraries\StellaOps.DependencyInjection\StellaOps.DependencyInjection.csproj", "{F622D38D-DA49-473E-B724-E706F8113CF2}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Core.Tests", "StellaOps.Feedser.Core.Tests\StellaOps.Feedser.Core.Tests.csproj", "{3A3D7610-C864-4413-B07E-9E8C2A49A90E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Merge.Tests", "StellaOps.Feedser.Merge.Tests\StellaOps.Feedser.Merge.Tests.csproj", "{9C4DEE96-CD7D-4AE3-A811-0B48B477003B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Models.Tests", "StellaOps.Feedser.Models.Tests\StellaOps.Feedser.Models.Tests.csproj", "{437B2667-9461-47D2-B75B-4D2E03D69B94}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Normalization.Tests", "StellaOps.Feedser.Normalization.Tests\StellaOps.Feedser.Normalization.Tests.csproj", "{8249DF28-CDAF-4DEF-A912-C27F57B67FD5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Storage.Mongo.Tests", "StellaOps.Feedser.Storage.Mongo.Tests\StellaOps.Feedser.Storage.Mongo.Tests.csproj", "{CBFB015B-C069-475F-A476-D52222729804}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Exporter.Json.Tests", "StellaOps.Feedser.Exporter.Json.Tests\StellaOps.Feedser.Exporter.Json.Tests.csproj", "{2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Exporter.TrivyDb.Tests", "StellaOps.Feedser.Exporter.TrivyDb.Tests\StellaOps.Feedser.Exporter.TrivyDb.Tests.csproj", "{3EB22234-642E-4533-BCC3-93E8ED443B1D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.WebService.Tests", "StellaOps.Feedser.WebService.Tests\StellaOps.Feedser.WebService.Tests.csproj", "{84A5DE81-4444-499A-93BF-6DC4CA72F8D4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.Common.Tests", "StellaOps.Feedser.Source.Common.Tests\StellaOps.Feedser.Source.Common.Tests.csproj", "{42E21E1D-C3DE-4765-93E9-39391BB5C802}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.Nvd.Tests", "StellaOps.Feedser.Source.Nvd.Tests\StellaOps.Feedser.Source.Nvd.Tests.csproj", "{B6E2EE26-B297-4AB9-A47E-A227F5EAE108}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.Distro.RedHat.Tests", "StellaOps.Feedser.Source.Distro.RedHat.Tests\StellaOps.Feedser.Source.Distro.RedHat.Tests.csproj", "{CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.Vndr.Chromium.Tests", "StellaOps.Feedser.Source.Vndr.Chromium.Tests\StellaOps.Feedser.Source.Vndr.Chromium.Tests.csproj", "{2891FCDE-BB89-46F0-A40C-368EF804DB44}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.Vndr.Adobe.Tests", "StellaOps.Feedser.Source.Vndr.Adobe.Tests\StellaOps.Feedser.Source.Vndr.Adobe.Tests.csproj", "{B91C60FB-926F-47C3-BFD0-6DD145308344}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.Vndr.Oracle.Tests", "StellaOps.Feedser.Source.Vndr.Oracle.Tests\StellaOps.Feedser.Source.Vndr.Oracle.Tests.csproj", "{30DF89D1-D66D-4078-8A3B-951637A42265}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.Vndr.Vmware.Tests", "StellaOps.Feedser.Source.Vndr.Vmware.Tests\StellaOps.Feedser.Source.Vndr.Vmware.Tests.csproj", "{6E98C770-72FF-41FA-8C42-30AABAAF5B4E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.CertIn.Tests", "StellaOps.Feedser.Source.CertIn.Tests\StellaOps.Feedser.Source.CertIn.Tests.csproj", "{79B36C92-BA93-4406-AB75-6F2282DDFF01}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.CertFr.Tests", "StellaOps.Feedser.Source.CertFr.Tests\StellaOps.Feedser.Source.CertFr.Tests.csproj", "{4B60FA53-81F6-4AB6-BE9F-DE0992E11977}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.Ics.Kaspersky.Tests", "StellaOps.Feedser.Source.Ics.Kaspersky.Tests\StellaOps.Feedser.Source.Ics.Kaspersky.Tests.csproj", "{6BBA820B-8443-4832-91C3-3AB002006494}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.Jvn.Tests", "StellaOps.Feedser.Source.Jvn.Tests\StellaOps.Feedser.Source.Jvn.Tests.csproj", "{7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Source.Osv.Tests", "StellaOps.Feedser.Source.Osv.Tests\StellaOps.Feedser.Source.Osv.Tests.csproj", "{F892BFFD-9101-4D59-B6FD-C532EB04D51F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Feedser.Testing", "StellaOps.Feedser.Testing\StellaOps.Feedser.Testing.csproj", "{EAE910FC-188C-41C3-822A-623964CABE48}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -141,18 +181,6 @@ Global {6A301F32-2EEE-491B-9DB9-3BF26D032F07}.Release|x64.Build.0 = Release|Any CPU {6A301F32-2EEE-491B-9DB9-3BF26D032F07}.Release|x86.ActiveCfg = Release|Any CPU {6A301F32-2EEE-491B-9DB9-3BF26D032F07}.Release|x86.Build.0 = Release|Any CPU - {8FBE9BCD-9972-4B21-9493-912DE14CEBF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FBE9BCD-9972-4B21-9493-912DE14CEBF3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FBE9BCD-9972-4B21-9493-912DE14CEBF3}.Debug|x64.ActiveCfg = Debug|Any CPU - {8FBE9BCD-9972-4B21-9493-912DE14CEBF3}.Debug|x64.Build.0 = Debug|Any CPU - {8FBE9BCD-9972-4B21-9493-912DE14CEBF3}.Debug|x86.ActiveCfg = Debug|Any CPU - {8FBE9BCD-9972-4B21-9493-912DE14CEBF3}.Debug|x86.Build.0 = Debug|Any CPU - {8FBE9BCD-9972-4B21-9493-912DE14CEBF3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FBE9BCD-9972-4B21-9493-912DE14CEBF3}.Release|Any CPU.Build.0 = Release|Any CPU - {8FBE9BCD-9972-4B21-9493-912DE14CEBF3}.Release|x64.ActiveCfg = Release|Any CPU - {8FBE9BCD-9972-4B21-9493-912DE14CEBF3}.Release|x64.Build.0 = Release|Any CPU - {8FBE9BCD-9972-4B21-9493-912DE14CEBF3}.Release|x86.ActiveCfg = Release|Any CPU - {8FBE9BCD-9972-4B21-9493-912DE14CEBF3}.Release|x86.Build.0 = Release|Any CPU {AFCCC916-58E8-4676-AABB-54B04CEA3392}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AFCCC916-58E8-4676-AABB-54B04CEA3392}.Debug|Any CPU.Build.0 = Debug|Any CPU {AFCCC916-58E8-4676-AABB-54B04CEA3392}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -573,6 +601,258 @@ Global {F622D38D-DA49-473E-B724-E706F8113CF2}.Release|x64.Build.0 = Release|Any CPU {F622D38D-DA49-473E-B724-E706F8113CF2}.Release|x86.ActiveCfg = Release|Any CPU {F622D38D-DA49-473E-B724-E706F8113CF2}.Release|x86.Build.0 = Release|Any CPU + {3A3D7610-C864-4413-B07E-9E8C2A49A90E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3A3D7610-C864-4413-B07E-9E8C2A49A90E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A3D7610-C864-4413-B07E-9E8C2A49A90E}.Debug|x64.ActiveCfg = Debug|Any CPU + {3A3D7610-C864-4413-B07E-9E8C2A49A90E}.Debug|x64.Build.0 = Debug|Any CPU + {3A3D7610-C864-4413-B07E-9E8C2A49A90E}.Debug|x86.ActiveCfg = Debug|Any CPU + {3A3D7610-C864-4413-B07E-9E8C2A49A90E}.Debug|x86.Build.0 = Debug|Any CPU + {3A3D7610-C864-4413-B07E-9E8C2A49A90E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3A3D7610-C864-4413-B07E-9E8C2A49A90E}.Release|Any CPU.Build.0 = Release|Any CPU + {3A3D7610-C864-4413-B07E-9E8C2A49A90E}.Release|x64.ActiveCfg = Release|Any CPU + {3A3D7610-C864-4413-B07E-9E8C2A49A90E}.Release|x64.Build.0 = Release|Any CPU + {3A3D7610-C864-4413-B07E-9E8C2A49A90E}.Release|x86.ActiveCfg = Release|Any CPU + {3A3D7610-C864-4413-B07E-9E8C2A49A90E}.Release|x86.Build.0 = Release|Any CPU + {9C4DEE96-CD7D-4AE3-A811-0B48B477003B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C4DEE96-CD7D-4AE3-A811-0B48B477003B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C4DEE96-CD7D-4AE3-A811-0B48B477003B}.Debug|x64.ActiveCfg = Debug|Any CPU + {9C4DEE96-CD7D-4AE3-A811-0B48B477003B}.Debug|x64.Build.0 = Debug|Any CPU + {9C4DEE96-CD7D-4AE3-A811-0B48B477003B}.Debug|x86.ActiveCfg = Debug|Any CPU + {9C4DEE96-CD7D-4AE3-A811-0B48B477003B}.Debug|x86.Build.0 = Debug|Any CPU + {9C4DEE96-CD7D-4AE3-A811-0B48B477003B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9C4DEE96-CD7D-4AE3-A811-0B48B477003B}.Release|Any CPU.Build.0 = Release|Any CPU + {9C4DEE96-CD7D-4AE3-A811-0B48B477003B}.Release|x64.ActiveCfg = Release|Any CPU + {9C4DEE96-CD7D-4AE3-A811-0B48B477003B}.Release|x64.Build.0 = Release|Any CPU + {9C4DEE96-CD7D-4AE3-A811-0B48B477003B}.Release|x86.ActiveCfg = Release|Any CPU + {9C4DEE96-CD7D-4AE3-A811-0B48B477003B}.Release|x86.Build.0 = Release|Any CPU + {437B2667-9461-47D2-B75B-4D2E03D69B94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {437B2667-9461-47D2-B75B-4D2E03D69B94}.Debug|Any CPU.Build.0 = Debug|Any CPU + {437B2667-9461-47D2-B75B-4D2E03D69B94}.Debug|x64.ActiveCfg = Debug|Any CPU + {437B2667-9461-47D2-B75B-4D2E03D69B94}.Debug|x64.Build.0 = Debug|Any CPU + {437B2667-9461-47D2-B75B-4D2E03D69B94}.Debug|x86.ActiveCfg = Debug|Any CPU + {437B2667-9461-47D2-B75B-4D2E03D69B94}.Debug|x86.Build.0 = Debug|Any CPU + {437B2667-9461-47D2-B75B-4D2E03D69B94}.Release|Any CPU.ActiveCfg = Release|Any CPU + {437B2667-9461-47D2-B75B-4D2E03D69B94}.Release|Any CPU.Build.0 = Release|Any CPU + {437B2667-9461-47D2-B75B-4D2E03D69B94}.Release|x64.ActiveCfg = Release|Any CPU + {437B2667-9461-47D2-B75B-4D2E03D69B94}.Release|x64.Build.0 = Release|Any CPU + {437B2667-9461-47D2-B75B-4D2E03D69B94}.Release|x86.ActiveCfg = Release|Any CPU + {437B2667-9461-47D2-B75B-4D2E03D69B94}.Release|x86.Build.0 = Release|Any CPU + {8249DF28-CDAF-4DEF-A912-C27F57B67FD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8249DF28-CDAF-4DEF-A912-C27F57B67FD5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8249DF28-CDAF-4DEF-A912-C27F57B67FD5}.Debug|x64.ActiveCfg = Debug|Any CPU + {8249DF28-CDAF-4DEF-A912-C27F57B67FD5}.Debug|x64.Build.0 = Debug|Any CPU + {8249DF28-CDAF-4DEF-A912-C27F57B67FD5}.Debug|x86.ActiveCfg = Debug|Any CPU + {8249DF28-CDAF-4DEF-A912-C27F57B67FD5}.Debug|x86.Build.0 = Debug|Any CPU + {8249DF28-CDAF-4DEF-A912-C27F57B67FD5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8249DF28-CDAF-4DEF-A912-C27F57B67FD5}.Release|Any CPU.Build.0 = Release|Any CPU + {8249DF28-CDAF-4DEF-A912-C27F57B67FD5}.Release|x64.ActiveCfg = Release|Any CPU + {8249DF28-CDAF-4DEF-A912-C27F57B67FD5}.Release|x64.Build.0 = Release|Any CPU + {8249DF28-CDAF-4DEF-A912-C27F57B67FD5}.Release|x86.ActiveCfg = Release|Any CPU + {8249DF28-CDAF-4DEF-A912-C27F57B67FD5}.Release|x86.Build.0 = Release|Any CPU + {CBFB015B-C069-475F-A476-D52222729804}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBFB015B-C069-475F-A476-D52222729804}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBFB015B-C069-475F-A476-D52222729804}.Debug|x64.ActiveCfg = Debug|Any CPU + {CBFB015B-C069-475F-A476-D52222729804}.Debug|x64.Build.0 = Debug|Any CPU + {CBFB015B-C069-475F-A476-D52222729804}.Debug|x86.ActiveCfg = Debug|Any CPU + {CBFB015B-C069-475F-A476-D52222729804}.Debug|x86.Build.0 = Debug|Any CPU + {CBFB015B-C069-475F-A476-D52222729804}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CBFB015B-C069-475F-A476-D52222729804}.Release|Any CPU.Build.0 = Release|Any CPU + {CBFB015B-C069-475F-A476-D52222729804}.Release|x64.ActiveCfg = Release|Any CPU + {CBFB015B-C069-475F-A476-D52222729804}.Release|x64.Build.0 = Release|Any CPU + {CBFB015B-C069-475F-A476-D52222729804}.Release|x86.ActiveCfg = Release|Any CPU + {CBFB015B-C069-475F-A476-D52222729804}.Release|x86.Build.0 = Release|Any CPU + {2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}.Debug|x64.ActiveCfg = Debug|Any CPU + {2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}.Debug|x64.Build.0 = Debug|Any CPU + {2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}.Debug|x86.ActiveCfg = Debug|Any CPU + {2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}.Debug|x86.Build.0 = Debug|Any CPU + {2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}.Release|Any CPU.Build.0 = Release|Any CPU + {2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}.Release|x64.ActiveCfg = Release|Any CPU + {2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}.Release|x64.Build.0 = Release|Any CPU + {2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}.Release|x86.ActiveCfg = Release|Any CPU + {2A41D9D2-3218-4F12-9C2B-3DB18A8E732E}.Release|x86.Build.0 = Release|Any CPU + {3EB22234-642E-4533-BCC3-93E8ED443B1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3EB22234-642E-4533-BCC3-93E8ED443B1D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3EB22234-642E-4533-BCC3-93E8ED443B1D}.Debug|x64.ActiveCfg = Debug|Any CPU + {3EB22234-642E-4533-BCC3-93E8ED443B1D}.Debug|x64.Build.0 = Debug|Any CPU + {3EB22234-642E-4533-BCC3-93E8ED443B1D}.Debug|x86.ActiveCfg = Debug|Any CPU + {3EB22234-642E-4533-BCC3-93E8ED443B1D}.Debug|x86.Build.0 = Debug|Any CPU + {3EB22234-642E-4533-BCC3-93E8ED443B1D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3EB22234-642E-4533-BCC3-93E8ED443B1D}.Release|Any CPU.Build.0 = Release|Any CPU + {3EB22234-642E-4533-BCC3-93E8ED443B1D}.Release|x64.ActiveCfg = Release|Any CPU + {3EB22234-642E-4533-BCC3-93E8ED443B1D}.Release|x64.Build.0 = Release|Any CPU + {3EB22234-642E-4533-BCC3-93E8ED443B1D}.Release|x86.ActiveCfg = Release|Any CPU + {3EB22234-642E-4533-BCC3-93E8ED443B1D}.Release|x86.Build.0 = Release|Any CPU + {84A5DE81-4444-499A-93BF-6DC4CA72F8D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {84A5DE81-4444-499A-93BF-6DC4CA72F8D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {84A5DE81-4444-499A-93BF-6DC4CA72F8D4}.Debug|x64.ActiveCfg = Debug|Any CPU + {84A5DE81-4444-499A-93BF-6DC4CA72F8D4}.Debug|x64.Build.0 = Debug|Any CPU + {84A5DE81-4444-499A-93BF-6DC4CA72F8D4}.Debug|x86.ActiveCfg = Debug|Any CPU + {84A5DE81-4444-499A-93BF-6DC4CA72F8D4}.Debug|x86.Build.0 = Debug|Any CPU + {84A5DE81-4444-499A-93BF-6DC4CA72F8D4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {84A5DE81-4444-499A-93BF-6DC4CA72F8D4}.Release|Any CPU.Build.0 = Release|Any CPU + {84A5DE81-4444-499A-93BF-6DC4CA72F8D4}.Release|x64.ActiveCfg = Release|Any CPU + {84A5DE81-4444-499A-93BF-6DC4CA72F8D4}.Release|x64.Build.0 = Release|Any CPU + {84A5DE81-4444-499A-93BF-6DC4CA72F8D4}.Release|x86.ActiveCfg = Release|Any CPU + {84A5DE81-4444-499A-93BF-6DC4CA72F8D4}.Release|x86.Build.0 = Release|Any CPU + {42E21E1D-C3DE-4765-93E9-39391BB5C802}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {42E21E1D-C3DE-4765-93E9-39391BB5C802}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42E21E1D-C3DE-4765-93E9-39391BB5C802}.Debug|x64.ActiveCfg = Debug|Any CPU + {42E21E1D-C3DE-4765-93E9-39391BB5C802}.Debug|x64.Build.0 = Debug|Any CPU + {42E21E1D-C3DE-4765-93E9-39391BB5C802}.Debug|x86.ActiveCfg = Debug|Any CPU + {42E21E1D-C3DE-4765-93E9-39391BB5C802}.Debug|x86.Build.0 = Debug|Any CPU + {42E21E1D-C3DE-4765-93E9-39391BB5C802}.Release|Any CPU.ActiveCfg = Release|Any CPU + {42E21E1D-C3DE-4765-93E9-39391BB5C802}.Release|Any CPU.Build.0 = Release|Any CPU + {42E21E1D-C3DE-4765-93E9-39391BB5C802}.Release|x64.ActiveCfg = Release|Any CPU + {42E21E1D-C3DE-4765-93E9-39391BB5C802}.Release|x64.Build.0 = Release|Any CPU + {42E21E1D-C3DE-4765-93E9-39391BB5C802}.Release|x86.ActiveCfg = Release|Any CPU + {42E21E1D-C3DE-4765-93E9-39391BB5C802}.Release|x86.Build.0 = Release|Any CPU + {B6E2EE26-B297-4AB9-A47E-A227F5EAE108}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B6E2EE26-B297-4AB9-A47E-A227F5EAE108}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6E2EE26-B297-4AB9-A47E-A227F5EAE108}.Debug|x64.ActiveCfg = Debug|Any CPU + {B6E2EE26-B297-4AB9-A47E-A227F5EAE108}.Debug|x64.Build.0 = Debug|Any CPU + {B6E2EE26-B297-4AB9-A47E-A227F5EAE108}.Debug|x86.ActiveCfg = Debug|Any CPU + {B6E2EE26-B297-4AB9-A47E-A227F5EAE108}.Debug|x86.Build.0 = Debug|Any CPU + {B6E2EE26-B297-4AB9-A47E-A227F5EAE108}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B6E2EE26-B297-4AB9-A47E-A227F5EAE108}.Release|Any CPU.Build.0 = Release|Any CPU + {B6E2EE26-B297-4AB9-A47E-A227F5EAE108}.Release|x64.ActiveCfg = Release|Any CPU + {B6E2EE26-B297-4AB9-A47E-A227F5EAE108}.Release|x64.Build.0 = Release|Any CPU + {B6E2EE26-B297-4AB9-A47E-A227F5EAE108}.Release|x86.ActiveCfg = Release|Any CPU + {B6E2EE26-B297-4AB9-A47E-A227F5EAE108}.Release|x86.Build.0 = Release|Any CPU + {CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}.Debug|x64.ActiveCfg = Debug|Any CPU + {CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}.Debug|x64.Build.0 = Debug|Any CPU + {CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}.Debug|x86.ActiveCfg = Debug|Any CPU + {CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}.Debug|x86.Build.0 = Debug|Any CPU + {CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}.Release|Any CPU.Build.0 = Release|Any CPU + {CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}.Release|x64.ActiveCfg = Release|Any CPU + {CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}.Release|x64.Build.0 = Release|Any CPU + {CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}.Release|x86.ActiveCfg = Release|Any CPU + {CDB2D636-C82F-43F1-BB30-FFC6258FBAB4}.Release|x86.Build.0 = Release|Any CPU + {2891FCDE-BB89-46F0-A40C-368EF804DB44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2891FCDE-BB89-46F0-A40C-368EF804DB44}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2891FCDE-BB89-46F0-A40C-368EF804DB44}.Debug|x64.ActiveCfg = Debug|Any CPU + {2891FCDE-BB89-46F0-A40C-368EF804DB44}.Debug|x64.Build.0 = Debug|Any CPU + {2891FCDE-BB89-46F0-A40C-368EF804DB44}.Debug|x86.ActiveCfg = Debug|Any CPU + {2891FCDE-BB89-46F0-A40C-368EF804DB44}.Debug|x86.Build.0 = Debug|Any CPU + {2891FCDE-BB89-46F0-A40C-368EF804DB44}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2891FCDE-BB89-46F0-A40C-368EF804DB44}.Release|Any CPU.Build.0 = Release|Any CPU + {2891FCDE-BB89-46F0-A40C-368EF804DB44}.Release|x64.ActiveCfg = Release|Any CPU + {2891FCDE-BB89-46F0-A40C-368EF804DB44}.Release|x64.Build.0 = Release|Any CPU + {2891FCDE-BB89-46F0-A40C-368EF804DB44}.Release|x86.ActiveCfg = Release|Any CPU + {2891FCDE-BB89-46F0-A40C-368EF804DB44}.Release|x86.Build.0 = Release|Any CPU + {B91C60FB-926F-47C3-BFD0-6DD145308344}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B91C60FB-926F-47C3-BFD0-6DD145308344}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B91C60FB-926F-47C3-BFD0-6DD145308344}.Debug|x64.ActiveCfg = Debug|Any CPU + {B91C60FB-926F-47C3-BFD0-6DD145308344}.Debug|x64.Build.0 = Debug|Any CPU + {B91C60FB-926F-47C3-BFD0-6DD145308344}.Debug|x86.ActiveCfg = Debug|Any CPU + {B91C60FB-926F-47C3-BFD0-6DD145308344}.Debug|x86.Build.0 = Debug|Any CPU + {B91C60FB-926F-47C3-BFD0-6DD145308344}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B91C60FB-926F-47C3-BFD0-6DD145308344}.Release|Any CPU.Build.0 = Release|Any CPU + {B91C60FB-926F-47C3-BFD0-6DD145308344}.Release|x64.ActiveCfg = Release|Any CPU + {B91C60FB-926F-47C3-BFD0-6DD145308344}.Release|x64.Build.0 = Release|Any CPU + {B91C60FB-926F-47C3-BFD0-6DD145308344}.Release|x86.ActiveCfg = Release|Any CPU + {B91C60FB-926F-47C3-BFD0-6DD145308344}.Release|x86.Build.0 = Release|Any CPU + {30DF89D1-D66D-4078-8A3B-951637A42265}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {30DF89D1-D66D-4078-8A3B-951637A42265}.Debug|Any CPU.Build.0 = Debug|Any CPU + {30DF89D1-D66D-4078-8A3B-951637A42265}.Debug|x64.ActiveCfg = Debug|Any CPU + {30DF89D1-D66D-4078-8A3B-951637A42265}.Debug|x64.Build.0 = Debug|Any CPU + {30DF89D1-D66D-4078-8A3B-951637A42265}.Debug|x86.ActiveCfg = Debug|Any CPU + {30DF89D1-D66D-4078-8A3B-951637A42265}.Debug|x86.Build.0 = Debug|Any CPU + {30DF89D1-D66D-4078-8A3B-951637A42265}.Release|Any CPU.ActiveCfg = Release|Any CPU + {30DF89D1-D66D-4078-8A3B-951637A42265}.Release|Any CPU.Build.0 = Release|Any CPU + {30DF89D1-D66D-4078-8A3B-951637A42265}.Release|x64.ActiveCfg = Release|Any CPU + {30DF89D1-D66D-4078-8A3B-951637A42265}.Release|x64.Build.0 = Release|Any CPU + {30DF89D1-D66D-4078-8A3B-951637A42265}.Release|x86.ActiveCfg = Release|Any CPU + {30DF89D1-D66D-4078-8A3B-951637A42265}.Release|x86.Build.0 = Release|Any CPU + {6E98C770-72FF-41FA-8C42-30AABAAF5B4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E98C770-72FF-41FA-8C42-30AABAAF5B4E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E98C770-72FF-41FA-8C42-30AABAAF5B4E}.Debug|x64.ActiveCfg = Debug|Any CPU + {6E98C770-72FF-41FA-8C42-30AABAAF5B4E}.Debug|x64.Build.0 = Debug|Any CPU + {6E98C770-72FF-41FA-8C42-30AABAAF5B4E}.Debug|x86.ActiveCfg = Debug|Any CPU + {6E98C770-72FF-41FA-8C42-30AABAAF5B4E}.Debug|x86.Build.0 = Debug|Any CPU + {6E98C770-72FF-41FA-8C42-30AABAAF5B4E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E98C770-72FF-41FA-8C42-30AABAAF5B4E}.Release|Any CPU.Build.0 = Release|Any CPU + {6E98C770-72FF-41FA-8C42-30AABAAF5B4E}.Release|x64.ActiveCfg = Release|Any CPU + {6E98C770-72FF-41FA-8C42-30AABAAF5B4E}.Release|x64.Build.0 = Release|Any CPU + {6E98C770-72FF-41FA-8C42-30AABAAF5B4E}.Release|x86.ActiveCfg = Release|Any CPU + {6E98C770-72FF-41FA-8C42-30AABAAF5B4E}.Release|x86.Build.0 = Release|Any CPU + {79B36C92-BA93-4406-AB75-6F2282DDFF01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79B36C92-BA93-4406-AB75-6F2282DDFF01}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79B36C92-BA93-4406-AB75-6F2282DDFF01}.Debug|x64.ActiveCfg = Debug|Any CPU + {79B36C92-BA93-4406-AB75-6F2282DDFF01}.Debug|x64.Build.0 = Debug|Any CPU + {79B36C92-BA93-4406-AB75-6F2282DDFF01}.Debug|x86.ActiveCfg = Debug|Any CPU + {79B36C92-BA93-4406-AB75-6F2282DDFF01}.Debug|x86.Build.0 = Debug|Any CPU + {79B36C92-BA93-4406-AB75-6F2282DDFF01}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79B36C92-BA93-4406-AB75-6F2282DDFF01}.Release|Any CPU.Build.0 = Release|Any CPU + {79B36C92-BA93-4406-AB75-6F2282DDFF01}.Release|x64.ActiveCfg = Release|Any CPU + {79B36C92-BA93-4406-AB75-6F2282DDFF01}.Release|x64.Build.0 = Release|Any CPU + {79B36C92-BA93-4406-AB75-6F2282DDFF01}.Release|x86.ActiveCfg = Release|Any CPU + {79B36C92-BA93-4406-AB75-6F2282DDFF01}.Release|x86.Build.0 = Release|Any CPU + {4B60FA53-81F6-4AB6-BE9F-DE0992E11977}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B60FA53-81F6-4AB6-BE9F-DE0992E11977}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B60FA53-81F6-4AB6-BE9F-DE0992E11977}.Debug|x64.ActiveCfg = Debug|Any CPU + {4B60FA53-81F6-4AB6-BE9F-DE0992E11977}.Debug|x64.Build.0 = Debug|Any CPU + {4B60FA53-81F6-4AB6-BE9F-DE0992E11977}.Debug|x86.ActiveCfg = Debug|Any CPU + {4B60FA53-81F6-4AB6-BE9F-DE0992E11977}.Debug|x86.Build.0 = Debug|Any CPU + {4B60FA53-81F6-4AB6-BE9F-DE0992E11977}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B60FA53-81F6-4AB6-BE9F-DE0992E11977}.Release|Any CPU.Build.0 = Release|Any CPU + {4B60FA53-81F6-4AB6-BE9F-DE0992E11977}.Release|x64.ActiveCfg = Release|Any CPU + {4B60FA53-81F6-4AB6-BE9F-DE0992E11977}.Release|x64.Build.0 = Release|Any CPU + {4B60FA53-81F6-4AB6-BE9F-DE0992E11977}.Release|x86.ActiveCfg = Release|Any CPU + {4B60FA53-81F6-4AB6-BE9F-DE0992E11977}.Release|x86.Build.0 = Release|Any CPU + {6BBA820B-8443-4832-91C3-3AB002006494}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6BBA820B-8443-4832-91C3-3AB002006494}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6BBA820B-8443-4832-91C3-3AB002006494}.Debug|x64.ActiveCfg = Debug|Any CPU + {6BBA820B-8443-4832-91C3-3AB002006494}.Debug|x64.Build.0 = Debug|Any CPU + {6BBA820B-8443-4832-91C3-3AB002006494}.Debug|x86.ActiveCfg = Debug|Any CPU + {6BBA820B-8443-4832-91C3-3AB002006494}.Debug|x86.Build.0 = Debug|Any CPU + {6BBA820B-8443-4832-91C3-3AB002006494}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6BBA820B-8443-4832-91C3-3AB002006494}.Release|Any CPU.Build.0 = Release|Any CPU + {6BBA820B-8443-4832-91C3-3AB002006494}.Release|x64.ActiveCfg = Release|Any CPU + {6BBA820B-8443-4832-91C3-3AB002006494}.Release|x64.Build.0 = Release|Any CPU + {6BBA820B-8443-4832-91C3-3AB002006494}.Release|x86.ActiveCfg = Release|Any CPU + {6BBA820B-8443-4832-91C3-3AB002006494}.Release|x86.Build.0 = Release|Any CPU + {7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}.Debug|x64.ActiveCfg = Debug|Any CPU + {7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}.Debug|x64.Build.0 = Debug|Any CPU + {7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}.Debug|x86.ActiveCfg = Debug|Any CPU + {7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}.Debug|x86.Build.0 = Debug|Any CPU + {7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}.Release|Any CPU.Build.0 = Release|Any CPU + {7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}.Release|x64.ActiveCfg = Release|Any CPU + {7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}.Release|x64.Build.0 = Release|Any CPU + {7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}.Release|x86.ActiveCfg = Release|Any CPU + {7845AE1C-FBD7-4177-A06F-D7AAE8315DB2}.Release|x86.Build.0 = Release|Any CPU + {F892BFFD-9101-4D59-B6FD-C532EB04D51F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F892BFFD-9101-4D59-B6FD-C532EB04D51F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F892BFFD-9101-4D59-B6FD-C532EB04D51F}.Debug|x64.ActiveCfg = Debug|Any CPU + {F892BFFD-9101-4D59-B6FD-C532EB04D51F}.Debug|x64.Build.0 = Debug|Any CPU + {F892BFFD-9101-4D59-B6FD-C532EB04D51F}.Debug|x86.ActiveCfg = Debug|Any CPU + {F892BFFD-9101-4D59-B6FD-C532EB04D51F}.Debug|x86.Build.0 = Debug|Any CPU + {F892BFFD-9101-4D59-B6FD-C532EB04D51F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F892BFFD-9101-4D59-B6FD-C532EB04D51F}.Release|Any CPU.Build.0 = Release|Any CPU + {F892BFFD-9101-4D59-B6FD-C532EB04D51F}.Release|x64.ActiveCfg = Release|Any CPU + {F892BFFD-9101-4D59-B6FD-C532EB04D51F}.Release|x64.Build.0 = Release|Any CPU + {F892BFFD-9101-4D59-B6FD-C532EB04D51F}.Release|x86.ActiveCfg = Release|Any CPU + {F892BFFD-9101-4D59-B6FD-C532EB04D51F}.Release|x86.Build.0 = Release|Any CPU + {EAE910FC-188C-41C3-822A-623964CABE48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EAE910FC-188C-41C3-822A-623964CABE48}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EAE910FC-188C-41C3-822A-623964CABE48}.Debug|x64.ActiveCfg = Debug|Any CPU + {EAE910FC-188C-41C3-822A-623964CABE48}.Debug|x64.Build.0 = Debug|Any CPU + {EAE910FC-188C-41C3-822A-623964CABE48}.Debug|x86.ActiveCfg = Debug|Any CPU + {EAE910FC-188C-41C3-822A-623964CABE48}.Debug|x86.Build.0 = Debug|Any CPU + {EAE910FC-188C-41C3-822A-623964CABE48}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EAE910FC-188C-41C3-822A-623964CABE48}.Release|Any CPU.Build.0 = Release|Any CPU + {EAE910FC-188C-41C3-822A-623964CABE48}.Release|x64.ActiveCfg = Release|Any CPU + {EAE910FC-188C-41C3-822A-623964CABE48}.Release|x64.Build.0 = Release|Any CPU + {EAE910FC-188C-41C3-822A-623964CABE48}.Release|x86.ActiveCfg = Release|Any CPU + {EAE910FC-188C-41C3-822A-623964CABE48}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/StellaOps.Feedser/TASKS.md b/src/StellaOps.Feedser/TASKS.md index 773a7f46..280249f3 100644 --- a/src/StellaOps.Feedser/TASKS.md +++ b/src/StellaOps.Feedser/TASKS.md @@ -4,6 +4,6 @@ |Document missing AGENTS/TASKS for remaining connectors|DevEx/Docs|Source leads|TODO – create `AGENTS.md`/`TASKS.md` for Acsc, Cccs, CertBund, CertCc, Cve, Debian, Suse, Ubuntu, Ghsa, Ics.Cisa, Kev, Kisa, Ru.Bdu, Ru.Nkcki, Vndr.Apple, Vndr.Cisco, Vndr.Msrc.| |Connector option wiring audit|BE-Conn-Shared|Source.Common|TODO – ensure each connector exposes Options (base URLs, allowlisted HttpClient) similar to implemented modules.| |Russian source schema + LLM fallback|BE-Conn-RU|Source.Ru.Bdu, Source.Ru.Nkcki|TODO – match HTML against XML schema; on failure/PDF use configured OpenAI/DeepDive/Qwen API with prompts, honoring observability + config gating.| -|Consolidate sample tests|QA|Tests|TODO – move any remaining connector tests from sample projects into `StellaOps.Feedser.Tests` and rely on mocked data.| +|Consolidate sample tests|QA|Tests|DONE – test suites now live under `StellaOps.Feedser..Tests` with shared fixtures in `StellaOps.Feedser.Testing`.| |Adopt SourceDiagnostics beyond fetch stage|BE-Conn-Shared|Source.Common|TODO – emit spans/counters for parse/map phases so downstream telemetry matches new fetch instrumentation.| |Stabilize exporter test suite (Json parity + Trivy bundle)|QA|Tests|TODO – resolve lingering build failures in parity smoke + Trivy tests and re-enable targeted test runs.|