This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
using System.Text;
|
||||
using Ludarium.Application;
|
||||
using Ludarium.Infrastructure;
|
||||
|
||||
namespace Ludarium.IntegrationTests;
|
||||
|
||||
public sealed class SwitchRuntimeProvisionerTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task VerifiedPersonalKeysAreAtomicallyProvisionedOutsideTheSourceLibrary()
|
||||
{
|
||||
var root = Path.Combine(Path.GetTempPath(), $"ludarium-switch-{Guid.NewGuid():N}");
|
||||
var vaultRoot = Path.Combine(root, "vault");
|
||||
var runtimeRoot = Path.Combine(root, "eden-keys");
|
||||
try
|
||||
{
|
||||
var vault = new FirmwareVaultFileStore(vaultRoot);
|
||||
var provisioner = new SwitchRuntimeProvisioner(runtimeRoot);
|
||||
var requirement = FirmwarePolicy.Get("switch", "prod-keys");
|
||||
const string fixture = "synthetic-switch-provisioning-fixture\n";
|
||||
await using var input = new MemoryStream(Encoding.UTF8.GetBytes(fixture));
|
||||
var asset = await vault.SaveAsync(requirement, Guid.NewGuid(), "prod.keys", input,
|
||||
input.Length, CancellationToken.None);
|
||||
|
||||
await provisioner.ProvisionAsync(asset, vault, CancellationToken.None);
|
||||
|
||||
var target = Path.Combine(runtimeRoot, "prod.keys");
|
||||
Assert.True(provisioner.Configured);
|
||||
Assert.Equal(fixture, await File.ReadAllTextAsync(target));
|
||||
if (!OperatingSystem.IsWindows())
|
||||
Assert.Equal(UnixFileMode.UserRead | UnixFileMode.UserWrite, File.GetUnixFileMode(target));
|
||||
Assert.Empty(Directory.GetFiles(runtimeRoot, "*.uploading"));
|
||||
provisioner.Remove(asset);
|
||||
Assert.False(File.Exists(target));
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (Directory.Exists(root)) Directory.Delete(root, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DisabledProvisionerNeverCopiesKeys()
|
||||
{
|
||||
var provisioner = new SwitchRuntimeProvisioner(null);
|
||||
var asset = new Ludarium.Domain.FirmwareAsset(Guid.NewGuid(), "switch", "prod-keys",
|
||||
Ludarium.Domain.FirmwareAssetKind.KeySet, "prod.keys", 1, new string('0', 64), "missing", true,
|
||||
DateTimeOffset.UtcNow, DateTimeOffset.UtcNow);
|
||||
|
||||
await provisioner.ProvisionAsync(asset, null!, CancellationToken.None);
|
||||
|
||||
Assert.False(provisioner.Configured);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user