55 lines
2.2 KiB
C#
55 lines
2.2 KiB
C#
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);
|
|
}
|
|
}
|