Add unit tests for SBOM ingestion and transformation
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user