feat: Implement BerkeleyDB reader for RPM databases
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Scanner Analyzers / Discover Analyzers (push) Has been cancelled
Scanner Analyzers / Build Analyzers (push) Has been cancelled
Scanner Analyzers / Test Language Analyzers (push) Has been cancelled
Scanner Analyzers / Validate Test Fixtures (push) Has been cancelled
Scanner Analyzers / Verify Deterministic Output (push) Has been cancelled
console-runner-image / build-runner-image (push) Has been cancelled
wine-csp-build / Build Wine CSP Image (push) Has been cancelled
wine-csp-build / Integration Tests (push) Has been cancelled
wine-csp-build / Security Scan (push) Has been cancelled
wine-csp-build / Generate SBOM (push) Has been cancelled
wine-csp-build / Publish Image (push) Has been cancelled
wine-csp-build / Air-Gap Bundle (push) Has been cancelled
wine-csp-build / Test Summary (push) Has been cancelled
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Scanner Analyzers / Discover Analyzers (push) Has been cancelled
Scanner Analyzers / Build Analyzers (push) Has been cancelled
Scanner Analyzers / Test Language Analyzers (push) Has been cancelled
Scanner Analyzers / Validate Test Fixtures (push) Has been cancelled
Scanner Analyzers / Verify Deterministic Output (push) Has been cancelled
console-runner-image / build-runner-image (push) Has been cancelled
wine-csp-build / Build Wine CSP Image (push) Has been cancelled
wine-csp-build / Integration Tests (push) Has been cancelled
wine-csp-build / Security Scan (push) Has been cancelled
wine-csp-build / Generate SBOM (push) Has been cancelled
wine-csp-build / Publish Image (push) Has been cancelled
wine-csp-build / Air-Gap Bundle (push) Has been cancelled
wine-csp-build / Test Summary (push) Has been cancelled
- Added BerkeleyDbReader class to read and extract RPM header blobs from BerkeleyDB hash databases. - Implemented methods to detect BerkeleyDB format and extract values, including handling of page sizes and magic numbers. - Added tests for BerkeleyDbReader to ensure correct functionality and header extraction. feat: Add Yarn PnP data tests - Created YarnPnpDataTests to validate package resolution and data loading from Yarn PnP cache. - Implemented tests for resolved keys, package presence, and loading from cache structure. test: Add egg-info package fixtures for Python tests - Created egg-info package fixtures for testing Python analyzers. - Included PKG-INFO, entry_points.txt, and installed-files.txt for comprehensive coverage. test: Enhance RPM database reader tests - Added tests for RpmDatabaseReader to validate fallback to legacy packages when SQLite is missing. - Implemented helper methods to create legacy package files and RPM headers for testing. test: Implement dual signing tests - Added DualSignTests to validate secondary signature addition when configured. - Created stub implementations for crypto providers and key resolvers to facilitate testing. chore: Update CI script for Playwright Chromium installation - Modified ci-console-exports.sh to ensure deterministic Chromium binary installation for console exports tests. - Added checks for Windows compatibility and environment variable setups for Playwright browsers.
This commit is contained in:
@@ -24,8 +24,8 @@ using StellaOps.Concelier.Connector.Vndr.Adobe;
|
||||
using StellaOps.Concelier.Connector.Vndr.Adobe.Configuration;
|
||||
using StellaOps.Concelier.Storage.Mongo;
|
||||
using StellaOps.Concelier.Storage.Mongo.Advisories;
|
||||
using StellaOps.Concelier.Storage.Mongo.Documents;
|
||||
using StellaOps.Concelier.Storage.Mongo.Dtos;
|
||||
using StellaOps.Concelier.Storage.Mongo;
|
||||
using StellaOps.Concelier.Storage.Mongo;
|
||||
using StellaOps.Concelier.Storage.Mongo.PsirtFlags;
|
||||
using StellaOps.Concelier.Testing;
|
||||
|
||||
@@ -157,19 +157,19 @@ public sealed class AdobeConnectorFetchTests : IAsyncLifetime
|
||||
Assert.NotNull(acrobatWindowsRange.Primitives);
|
||||
var windowsExtensions = acrobatWindowsRange.Primitives!.VendorExtensions;
|
||||
Assert.NotNull(windowsExtensions);
|
||||
Assert.True(windowsExtensions!.TryGetValue("adobe.affected.raw", out var rawAffectedWin));
|
||||
Assert.Equal("25.001.20672 and earlier", rawAffectedWin);
|
||||
Assert.True(windowsExtensions.TryGetValue("adobe.updated.raw", out var rawUpdatedWin));
|
||||
Assert.Equal("25.001.20680", rawUpdatedWin);
|
||||
Assert.Contains(
|
||||
AffectedPackageStatusCatalog.Fixed,
|
||||
acrobatWindowsPackage.Statuses.Select(static status => status.Status));
|
||||
var windowsNormalized = Assert.Single(acrobatWindowsPackage.NormalizedVersions.ToArray());
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, windowsNormalized.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.LessThan, windowsNormalized.Type);
|
||||
Assert.Equal("25.1.20680", windowsNormalized.Max);
|
||||
Assert.False(windowsNormalized.MaxInclusive);
|
||||
Assert.Equal("adobe:Acrobat DC:Windows", windowsNormalized.Notes);
|
||||
Assert.True(windowsExtensions!.TryGetValue("adobe.affected.raw", out var rawAffectedWin));
|
||||
Assert.Equal("25.001.20672 and earlier", rawAffectedWin);
|
||||
Assert.True(windowsExtensions.TryGetValue("adobe.updated.raw", out var rawUpdatedWin));
|
||||
Assert.Equal("25.001.20680", rawUpdatedWin);
|
||||
Assert.Contains(
|
||||
AffectedPackageStatusCatalog.Fixed,
|
||||
acrobatWindowsPackage.Statuses.Select(static status => status.Status));
|
||||
var windowsNormalized = Assert.Single(acrobatWindowsPackage.NormalizedVersions.ToArray());
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, windowsNormalized.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.LessThan, windowsNormalized.Type);
|
||||
Assert.Equal("25.1.20680", windowsNormalized.Max);
|
||||
Assert.False(windowsNormalized.MaxInclusive);
|
||||
Assert.Equal("adobe:Acrobat DC:Windows", windowsNormalized.Notes);
|
||||
|
||||
var acrobatMacPackage = Assert.Single(
|
||||
acrobatAdvisory.AffectedPackages,
|
||||
@@ -182,19 +182,19 @@ public sealed class AdobeConnectorFetchTests : IAsyncLifetime
|
||||
Assert.NotNull(acrobatMacRange.Primitives);
|
||||
var macExtensions = acrobatMacRange.Primitives!.VendorExtensions;
|
||||
Assert.NotNull(macExtensions);
|
||||
Assert.True(macExtensions!.TryGetValue("adobe.affected.raw", out var rawAffectedMac));
|
||||
Assert.Equal("25.001.20668 and earlier", rawAffectedMac);
|
||||
Assert.True(macExtensions.TryGetValue("adobe.updated.raw", out var rawUpdatedMac));
|
||||
Assert.Equal("25.001.20678", rawUpdatedMac);
|
||||
Assert.Contains(
|
||||
AffectedPackageStatusCatalog.Fixed,
|
||||
acrobatMacPackage.Statuses.Select(static status => status.Status));
|
||||
var macNormalized = Assert.Single(acrobatMacPackage.NormalizedVersions.ToArray());
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, macNormalized.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.LessThan, macNormalized.Type);
|
||||
Assert.Equal("25.1.20678", macNormalized.Max);
|
||||
Assert.False(macNormalized.MaxInclusive);
|
||||
Assert.Equal("adobe:Acrobat DC:macOS", macNormalized.Notes);
|
||||
Assert.True(macExtensions!.TryGetValue("adobe.affected.raw", out var rawAffectedMac));
|
||||
Assert.Equal("25.001.20668 and earlier", rawAffectedMac);
|
||||
Assert.True(macExtensions.TryGetValue("adobe.updated.raw", out var rawUpdatedMac));
|
||||
Assert.Equal("25.001.20678", rawUpdatedMac);
|
||||
Assert.Contains(
|
||||
AffectedPackageStatusCatalog.Fixed,
|
||||
acrobatMacPackage.Statuses.Select(static status => status.Status));
|
||||
var macNormalized = Assert.Single(acrobatMacPackage.NormalizedVersions.ToArray());
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, macNormalized.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.LessThan, macNormalized.Type);
|
||||
Assert.Equal("25.1.20678", macNormalized.Max);
|
||||
Assert.False(macNormalized.MaxInclusive);
|
||||
Assert.Equal("adobe:Acrobat DC:macOS", macNormalized.Notes);
|
||||
|
||||
var premiereAdvisory = advisories.Single(a => a.AdvisoryKey == "APSB25-87");
|
||||
Assert.Contains("APSB25-87", premiereAdvisory.Aliases);
|
||||
@@ -211,17 +211,17 @@ public sealed class AdobeConnectorFetchTests : IAsyncLifetime
|
||||
Assert.NotNull(premiereWindowsRange.Primitives);
|
||||
var premiereWindowsExtensions = premiereWindowsRange.Primitives!.VendorExtensions;
|
||||
Assert.NotNull(premiereWindowsExtensions);
|
||||
Assert.True(premiereWindowsExtensions!.TryGetValue("adobe.priority", out var premierePriorityWin));
|
||||
Assert.Equal("Priority 3", premierePriorityWin);
|
||||
Assert.Contains(
|
||||
AffectedPackageStatusCatalog.Fixed,
|
||||
premiereWindowsPackage.Statuses.Select(static status => status.Status));
|
||||
var premiereWinNormalized = Assert.Single(premiereWindowsPackage.NormalizedVersions.ToArray());
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, premiereWinNormalized.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.LessThan, premiereWinNormalized.Type);
|
||||
Assert.Equal("24.6", premiereWinNormalized.Max);
|
||||
Assert.False(premiereWinNormalized.MaxInclusive);
|
||||
Assert.Equal("adobe:Premiere Pro:Windows", premiereWinNormalized.Notes);
|
||||
Assert.True(premiereWindowsExtensions!.TryGetValue("adobe.priority", out var premierePriorityWin));
|
||||
Assert.Equal("Priority 3", premierePriorityWin);
|
||||
Assert.Contains(
|
||||
AffectedPackageStatusCatalog.Fixed,
|
||||
premiereWindowsPackage.Statuses.Select(static status => status.Status));
|
||||
var premiereWinNormalized = Assert.Single(premiereWindowsPackage.NormalizedVersions.ToArray());
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, premiereWinNormalized.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.LessThan, premiereWinNormalized.Type);
|
||||
Assert.Equal("24.6", premiereWinNormalized.Max);
|
||||
Assert.False(premiereWinNormalized.MaxInclusive);
|
||||
Assert.Equal("adobe:Premiere Pro:Windows", premiereWinNormalized.Notes);
|
||||
|
||||
var premiereMacPackage = Assert.Single(
|
||||
premiereAdvisory.AffectedPackages,
|
||||
@@ -233,29 +233,29 @@ public sealed class AdobeConnectorFetchTests : IAsyncLifetime
|
||||
Assert.NotNull(premiereMacRange.Primitives);
|
||||
var premiereMacExtensions = premiereMacRange.Primitives!.VendorExtensions;
|
||||
Assert.NotNull(premiereMacExtensions);
|
||||
Assert.True(premiereMacExtensions!.TryGetValue("adobe.priority", out var premierePriorityMac));
|
||||
Assert.Equal("Priority 3", premierePriorityMac);
|
||||
Assert.Contains(
|
||||
AffectedPackageStatusCatalog.Fixed,
|
||||
premiereMacPackage.Statuses.Select(static status => status.Status));
|
||||
var premiereMacNormalized = Assert.Single(premiereMacPackage.NormalizedVersions.ToArray());
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, premiereMacNormalized.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.LessThan, premiereMacNormalized.Type);
|
||||
Assert.Equal("24.6", premiereMacNormalized.Max);
|
||||
Assert.False(premiereMacNormalized.MaxInclusive);
|
||||
Assert.Equal("adobe:Premiere Pro:macOS", premiereMacNormalized.Notes);
|
||||
Assert.True(premiereMacExtensions!.TryGetValue("adobe.priority", out var premierePriorityMac));
|
||||
Assert.Equal("Priority 3", premierePriorityMac);
|
||||
Assert.Contains(
|
||||
AffectedPackageStatusCatalog.Fixed,
|
||||
premiereMacPackage.Statuses.Select(static status => status.Status));
|
||||
var premiereMacNormalized = Assert.Single(premiereMacPackage.NormalizedVersions.ToArray());
|
||||
Assert.Equal(NormalizedVersionSchemes.SemVer, premiereMacNormalized.Scheme);
|
||||
Assert.Equal(NormalizedVersionRuleTypes.LessThan, premiereMacNormalized.Type);
|
||||
Assert.Equal("24.6", premiereMacNormalized.Max);
|
||||
Assert.False(premiereMacNormalized.MaxInclusive);
|
||||
Assert.Equal("adobe:Premiere Pro:macOS", premiereMacNormalized.Notes);
|
||||
|
||||
var ordered = advisories.OrderBy(static a => a.AdvisoryKey, StringComparer.Ordinal).ToArray();
|
||||
var snapshot = SnapshotSerializer.ToSnapshot(ordered);
|
||||
var expected = ReadFixture("adobe-advisories.snapshot.json");
|
||||
var normalizedSnapshot = NormalizeLineEndings(snapshot);
|
||||
var normalizedExpected = NormalizeLineEndings(expected);
|
||||
if (!string.Equals(normalizedExpected, normalizedSnapshot, StringComparison.Ordinal))
|
||||
{
|
||||
var actualPath = Path.Combine(AppContext.BaseDirectory, "Source", "Vndr", "Adobe", "Fixtures", "adobe-advisories.actual.json");
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(actualPath)!);
|
||||
File.WriteAllText(actualPath, snapshot);
|
||||
}
|
||||
var normalizedExpected = NormalizeLineEndings(expected);
|
||||
if (!string.Equals(normalizedExpected, normalizedSnapshot, StringComparison.Ordinal))
|
||||
{
|
||||
var actualPath = Path.Combine(AppContext.BaseDirectory, "Source", "Vndr", "Adobe", "Fixtures", "adobe-advisories.actual.json");
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(actualPath)!);
|
||||
File.WriteAllText(actualPath, snapshot);
|
||||
}
|
||||
|
||||
Assert.Equal(normalizedExpected, normalizedSnapshot);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user