Files
git.stella-ops.org/src/BinaryIndex/__Tests/StellaOps.BinaryIndex.Disassembly.Tests/PluginCapabilitiesTests.cs
StellaOps Bot ca578801fd save progress
2026-01-03 00:49:19 +02:00

95 lines
3.9 KiB
C#

// Copyright (c) StellaOps. All rights reserved.
// Licensed under AGPL-3.0-or-later. See LICENSE in the project root.
using FluentAssertions;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using StellaOps.BinaryIndex.Disassembly.B2R2;
using StellaOps.BinaryIndex.Disassembly.Iced;
using Xunit;
namespace StellaOps.BinaryIndex.Disassembly.Tests;
/// <summary>
/// Tests for the disassembly plugin capabilities reporting.
/// </summary>
[Trait("Category", "Unit")]
public sealed class PluginCapabilitiesTests
{
[Fact]
public void IcedPlugin_ReportsCorrectCapabilities()
{
// Arrange
var logger = NullLogger<IcedDisassemblyPlugin>.Instance;
var plugin = new IcedDisassemblyPlugin(logger);
// Act
var capabilities = plugin.Capabilities;
// Assert
capabilities.PluginId.Should().Be("stellaops.disasm.iced");
capabilities.Name.Should().Contain("Iced");
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.X86);
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.X86_64);
capabilities.SupportedArchitectures.Should().NotContain(CpuArchitecture.ARM64);
capabilities.SupportedFormats.Should().Contain(BinaryFormat.ELF);
capabilities.SupportedFormats.Should().Contain(BinaryFormat.PE);
capabilities.SupportedFormats.Should().Contain(BinaryFormat.Raw);
capabilities.SupportsLifting.Should().BeFalse();
capabilities.Priority.Should().BeGreaterThan(0);
}
[Fact]
public void B2R2Plugin_ReportsCorrectCapabilities()
{
// Arrange
var logger = NullLogger<B2R2DisassemblyPlugin>.Instance;
var plugin = new B2R2DisassemblyPlugin(logger);
// Act
var capabilities = plugin.Capabilities;
// Assert
capabilities.PluginId.Should().Be("stellaops.disasm.b2r2");
capabilities.Name.Should().Contain("B2R2");
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.X86);
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.X86_64);
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.ARM32);
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.ARM64);
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.MIPS32);
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.RISCV64);
capabilities.SupportedFormats.Should().Contain(BinaryFormat.ELF);
capabilities.SupportedFormats.Should().Contain(BinaryFormat.PE);
capabilities.SupportedFormats.Should().Contain(BinaryFormat.MachO);
capabilities.SupportsLifting.Should().BeTrue();
capabilities.SupportsCfgRecovery.Should().BeTrue();
}
[Fact]
public void IcedPlugin_CanHandle_ReturnsTrueForX86Elf()
{
// Arrange
var logger = NullLogger<IcedDisassemblyPlugin>.Instance;
var plugin = new IcedDisassemblyPlugin(logger);
// Act & Assert
plugin.Capabilities.CanHandle(CpuArchitecture.X86, BinaryFormat.ELF).Should().BeTrue();
plugin.Capabilities.CanHandle(CpuArchitecture.X86_64, BinaryFormat.PE).Should().BeTrue();
plugin.Capabilities.CanHandle(CpuArchitecture.ARM64, BinaryFormat.ELF).Should().BeFalse();
}
[Fact]
public void B2R2Plugin_CanHandle_ReturnsTrueForArm64Elf()
{
// Arrange
var logger = NullLogger<B2R2DisassemblyPlugin>.Instance;
var plugin = new B2R2DisassemblyPlugin(logger);
// Act & Assert
plugin.Capabilities.CanHandle(CpuArchitecture.ARM64, BinaryFormat.ELF).Should().BeTrue();
plugin.Capabilities.CanHandle(CpuArchitecture.ARM32, BinaryFormat.MachO).Should().BeTrue();
plugin.Capabilities.CanHandle(CpuArchitecture.RISCV64, BinaryFormat.ELF).Should().BeTrue();
}
}