34 lines
1.6 KiB
C#
34 lines
1.6 KiB
C#
using Ludarium.Application;
|
|
using Ludarium.Domain;
|
|
|
|
namespace Ludarium.UnitTests;
|
|
|
|
public sealed class FirmwarePolicyTests
|
|
{
|
|
[Fact]
|
|
public void PersonalFirmwareSlotsAreExplicitAndRuntimeClaimsStayHonest()
|
|
{
|
|
var requirements = FirmwarePolicy.Describe();
|
|
|
|
Assert.Contains(requirements, item => item.Platform == "psx" && item.Slot == "bios" && item.BrowserDelivery);
|
|
Assert.Contains(requirements, item => item.Platform == "ps2" && item.Kind == FirmwareAssetKind.Bios && !item.BrowserDelivery);
|
|
Assert.Equal(2, requirements.Count(item => item.Platform == "switch" && item.Kind == FirmwareAssetKind.KeySet && !item.BrowserDelivery));
|
|
Assert.All(requirements, item => Assert.Contains("runtime", item.RuntimeState, StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("psx", "bios", "scph.bin")]
|
|
[InlineData("ps2", "bios", "personal.rom")]
|
|
[InlineData("switch", "prod-keys", "prod.keys")]
|
|
public void AllowlistedNamesAreAccepted(string platform, string slot, string fileName) =>
|
|
Assert.Equal(fileName, FirmwarePolicy.ValidateFileName(FirmwarePolicy.Get(platform, slot), fileName));
|
|
|
|
[Theory]
|
|
[InlineData("psx", "bios", "setup.exe")]
|
|
[InlineData("switch", "prod-keys", "keys.zip")]
|
|
[InlineData("switch", "firmware", "firmware.bin")]
|
|
public void UnknownSlotsAndUnsafeExtensionsFailClosed(string platform, string slot, string fileName) =>
|
|
Assert.Throws<FirmwareValidationException>(() =>
|
|
FirmwarePolicy.ValidateFileName(FirmwarePolicy.Get(platform, slot), fileName));
|
|
}
|