Add unit tests for SBOM ingestion and transformation
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled

- Implement `SbomIngestServiceCollectionExtensionsTests` to verify the SBOM ingestion pipeline exports snapshots correctly.
- Create `SbomIngestTransformerTests` to ensure the transformation produces expected nodes and edges, including deduplication of license nodes and normalization of timestamps.
- Add `SbomSnapshotExporterTests` to test the export functionality for manifest, adjacency, nodes, and edges.
- Introduce `VexOverlayTransformerTests` to validate the transformation of VEX nodes and edges.
- Set up project file for the test project with necessary dependencies and configurations.
- Include JSON fixture files for testing purposes.
This commit is contained in:
master
2025-11-04 07:49:39 +02:00
parent f72c5c513a
commit 2eb6852d34
491 changed files with 39445 additions and 3917 deletions

View File

@@ -17,6 +17,11 @@ public static class ServiceCollectionExtensions
ArgumentNullException.ThrowIfNull(services);
ArgumentNullException.ThrowIfNull(configure);
services.RemoveAll<IKmsClient>();
services.RemoveAll<IAwsKmsFacade>();
services.RemoveAll<IGcpKmsFacade>();
services.RemoveAll<IPkcs11Facade>();
services.Configure(configure);
services.TryAddSingleton<IKmsClient>(sp =>
@@ -29,4 +34,134 @@ public static class ServiceCollectionExtensions
return services;
}
public static IServiceCollection AddAwsKms(
this IServiceCollection services,
Action<AwsKmsOptions> configure)
{
ArgumentNullException.ThrowIfNull(services);
ArgumentNullException.ThrowIfNull(configure);
services.RemoveAll<IKmsClient>();
services.RemoveAll<IAwsKmsFacade>();
services.RemoveAll<IGcpKmsFacade>();
services.RemoveAll<IPkcs11Facade>();
services.Configure(configure);
services.AddSingleton<IAwsKmsFacade>(sp =>
{
var options = sp.GetRequiredService<IOptions<AwsKmsOptions>>().Value ?? new AwsKmsOptions();
return options.FacadeFactory?.Invoke(sp) ?? new AwsKmsFacade(options);
});
services.AddSingleton<IKmsClient>(sp =>
{
var options = sp.GetRequiredService<IOptions<AwsKmsOptions>>().Value ?? new AwsKmsOptions();
var facade = sp.GetRequiredService<IAwsKmsFacade>();
return new AwsKmsClient(facade, options);
});
services.TryAddEnumerable(ServiceDescriptor.Singleton<ICryptoProvider, KmsCryptoProvider>());
return services;
}
public static IServiceCollection AddGcpKms(
this IServiceCollection services,
Action<GcpKmsOptions> configure)
{
ArgumentNullException.ThrowIfNull(services);
ArgumentNullException.ThrowIfNull(configure);
services.RemoveAll<IKmsClient>();
services.RemoveAll<IAwsKmsFacade>();
services.RemoveAll<IGcpKmsFacade>();
services.RemoveAll<IPkcs11Facade>();
services.Configure(configure);
services.AddSingleton<IGcpKmsFacade>(sp =>
{
var options = sp.GetRequiredService<IOptions<GcpKmsOptions>>().Value ?? new GcpKmsOptions();
return options.FacadeFactory?.Invoke(sp) ?? new GcpKmsFacade(options);
});
services.AddSingleton<IKmsClient>(sp =>
{
var options = sp.GetRequiredService<IOptions<GcpKmsOptions>>().Value ?? new GcpKmsOptions();
var facade = sp.GetRequiredService<IGcpKmsFacade>();
return new GcpKmsClient(facade, options);
});
services.TryAddEnumerable(ServiceDescriptor.Singleton<ICryptoProvider, KmsCryptoProvider>());
return services;
}
public static IServiceCollection AddPkcs11Kms(
this IServiceCollection services,
Action<Pkcs11Options> configure)
{
ArgumentNullException.ThrowIfNull(services);
ArgumentNullException.ThrowIfNull(configure);
services.RemoveAll<IKmsClient>();
services.RemoveAll<IAwsKmsFacade>();
services.RemoveAll<IGcpKmsFacade>();
services.RemoveAll<IPkcs11Facade>();
services.Configure(configure);
services.AddSingleton<IPkcs11Facade>(sp =>
{
var options = sp.GetRequiredService<IOptions<Pkcs11Options>>().Value ?? new Pkcs11Options();
return options.FacadeFactory?.Invoke(sp) ?? new Pkcs11InteropFacade(options);
});
services.AddSingleton<IKmsClient>(sp =>
{
var options = sp.GetRequiredService<IOptions<Pkcs11Options>>().Value ?? new Pkcs11Options();
var facade = sp.GetRequiredService<IPkcs11Facade>();
return new Pkcs11KmsClient(facade, options);
});
services.TryAddEnumerable(ServiceDescriptor.Singleton<ICryptoProvider, KmsCryptoProvider>());
return services;
}
public static IServiceCollection AddFido2Kms(
this IServiceCollection services,
Action<Fido2Options> configure)
{
ArgumentNullException.ThrowIfNull(services);
ArgumentNullException.ThrowIfNull(configure);
services.RemoveAll<IKmsClient>();
services.Configure(configure);
services.TryAddSingleton<IFido2Authenticator>(sp =>
{
var options = sp.GetRequiredService<IOptions<Fido2Options>>().Value ?? new Fido2Options();
if (options.AuthenticatorFactory is null)
{
throw new InvalidOperationException("Fido2Options.AuthenticatorFactory must be provided or IFido2Authenticator registered separately.");
}
return options.AuthenticatorFactory(sp);
});
services.AddSingleton<IKmsClient>(sp =>
{
var options = sp.GetRequiredService<IOptions<Fido2Options>>().Value ?? new Fido2Options();
var authenticator = sp.GetRequiredService<IFido2Authenticator>();
return new Fido2KmsClient(authenticator, options);
});
services.TryAddEnumerable(ServiceDescriptor.Singleton<ICryptoProvider, KmsCryptoProvider>());
return services;
}
}