feat: Add tests for RichGraphPublisher and RichGraphWriter
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Mirror Thin Bundle Sign & Verify / mirror-sign (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Export Center CI / export-ci (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
Docs CI / lint-and-preview (push) Has been cancelled
Mirror Thin Bundle Sign & Verify / mirror-sign (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Export Center CI / export-ci (push) Has been cancelled
- Implement unit tests for RichGraphPublisher to verify graph publishing to CAS. - Implement unit tests for RichGraphWriter to ensure correct writing of canonical graphs and metadata. feat: Implement AOC Guard validation logic - Add AOC Guard validation logic to enforce document structure and field constraints. - Introduce violation codes for various validation errors. - Implement tests for AOC Guard to validate expected behavior. feat: Create Console Status API client and service - Implement ConsoleStatusClient for fetching console status and streaming run events. - Create ConsoleStatusService to manage console status polling and event subscriptions. - Add tests for ConsoleStatusClient to verify API interactions. feat: Develop Console Status component - Create ConsoleStatusComponent for displaying console status and run events. - Implement UI for showing status metrics and handling user interactions. - Add styles for console status display. test: Add tests for Console Status store - Implement tests for ConsoleStatusStore to verify event handling and state management.
This commit is contained in:
@@ -16,6 +16,9 @@ builder.Services.Configure<DevPortalOfflineStorageOptions>(builder.Configuration
|
||||
builder.Services.Configure<RiskBundleWorkerOptions>(builder.Configuration.GetSection("RiskBundles"));
|
||||
builder.Services.Configure<RiskBundleManifestSigningOptions>(builder.Configuration.GetSection("RiskBundles:Signing"));
|
||||
builder.Services.Configure<FileSystemRiskBundleStorageOptions>(builder.Configuration.GetSection("RiskBundles:Storage"));
|
||||
builder.Services.AddSingleton<IValidateOptions<RiskBundleWorkerOptions>, RiskBundleWorkerOptionsValidator>();
|
||||
builder.Services.AddSingleton<IValidateOptions<RiskBundleManifestSigningOptions>, RiskBundleSigningOptionsValidator>();
|
||||
builder.Services.AddSingleton<IValidateOptions<FileSystemRiskBundleStorageOptions>, RiskBundleStorageOptionsValidator>();
|
||||
|
||||
builder.Services.AddSingleton<DevPortalOfflineBundleBuilder>();
|
||||
builder.Services.AddSingleton<IDevPortalOfflineManifestSigner, HmacDevPortalOfflineManifestSigner>();
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
using Microsoft.Extensions.Options;
|
||||
using StellaOps.ExportCenter.RiskBundles;
|
||||
|
||||
namespace StellaOps.ExportCenter.Worker;
|
||||
|
||||
internal sealed class RiskBundleWorkerOptionsValidator : IValidateOptions<RiskBundleWorkerOptions>
|
||||
{
|
||||
public ValidateOptionsResult Validate(string? name, RiskBundleWorkerOptions options)
|
||||
{
|
||||
if (options is null)
|
||||
{
|
||||
return ValidateOptionsResult.Fail("Options instance is null.");
|
||||
}
|
||||
|
||||
if (!options.Enabled)
|
||||
{
|
||||
return ValidateOptionsResult.Success;
|
||||
}
|
||||
|
||||
var failures = new List<string>();
|
||||
|
||||
if (options.Providers is null || options.Providers.Count == 0)
|
||||
{
|
||||
failures.Add("At least one provider must be configured when RiskBundles.Enabled = true.");
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var (provider, index) in options.Providers.Select((p, i) => (p, i)))
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(provider.ProviderId))
|
||||
{
|
||||
failures.Add($"Providers[{index}].ProviderId is required.");
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(provider.SourcePath))
|
||||
{
|
||||
failures.Add($"Providers[{index}].SourcePath is required.");
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(provider.Source))
|
||||
{
|
||||
failures.Add($"Providers[{index}].Source is required.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return failures.Count == 0
|
||||
? ValidateOptionsResult.Success
|
||||
: ValidateOptionsResult.Fail(failures);
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class RiskBundleSigningOptionsValidator : IValidateOptions<RiskBundleManifestSigningOptions>
|
||||
{
|
||||
public ValidateOptionsResult Validate(string? name, RiskBundleManifestSigningOptions options)
|
||||
{
|
||||
if (options is null)
|
||||
{
|
||||
return ValidateOptionsResult.Fail("Signing options instance is null.");
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(options.Key))
|
||||
{
|
||||
return ValidateOptionsResult.Fail("RiskBundles:Signing:Key must be configured.");
|
||||
}
|
||||
|
||||
return ValidateOptionsResult.Success;
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class RiskBundleStorageOptionsValidator : IValidateOptions<FileSystemRiskBundleStorageOptions>
|
||||
{
|
||||
public ValidateOptionsResult Validate(string? name, FileSystemRiskBundleStorageOptions options)
|
||||
{
|
||||
if (options is null)
|
||||
{
|
||||
return ValidateOptionsResult.Fail("Storage options instance is null.");
|
||||
}
|
||||
|
||||
return string.IsNullOrWhiteSpace(options.RootPath)
|
||||
? ValidateOptionsResult.Fail("RiskBundles:Storage:RootPath must be configured.")
|
||||
: ValidateOptionsResult.Success;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user