Refactor code structure and optimize performance across multiple modules

This commit is contained in:
StellaOps Bot
2025-12-26 20:03:22 +02:00
parent c786faae84
commit b4fc66feb6
3353 changed files with 88254 additions and 1590657 deletions

View File

@@ -3,6 +3,7 @@ using Microsoft.Extensions.Logging.Abstractions;
using StellaOps.Scanner.Analyzers.OS.Homebrew;
using Xunit;
using StellaOps.TestKit;
namespace StellaOps.Scanner.Analyzers.OS.Homebrew.Tests;
public sealed class HomebrewPackageAnalyzerTests
@@ -29,13 +30,15 @@ public sealed class HomebrewPackageAnalyzerTests
_logger);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void AnalyzerId_ReturnsHomebrew()
{
Assert.Equal("homebrew", _analyzer.AnalyzerId);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task AnalyzeAsync_WithValidCellar_ReturnsPackages()
{
// Arrange
@@ -50,7 +53,8 @@ public sealed class HomebrewPackageAnalyzerTests
Assert.True(result.Packages.Count > 0, "Expected at least one package");
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task AnalyzeAsync_FindsIntelCellarPackages()
{
// Arrange
@@ -67,7 +71,8 @@ public sealed class HomebrewPackageAnalyzerTests
Assert.Contains("pkg:brew/homebrew%2Fcore/openssl%403@3.1.0", openssl.PackageUrl);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task AnalyzeAsync_FindsAppleSiliconCellarPackages()
{
// Arrange
@@ -83,7 +88,8 @@ public sealed class HomebrewPackageAnalyzerTests
Assert.Equal("arm64", jq.Architecture);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task AnalyzeAsync_PackageWithRevision_IncludesRevisionInPurl()
{
// Arrange
@@ -99,7 +105,8 @@ public sealed class HomebrewPackageAnalyzerTests
Assert.Equal("1", wget.Release);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task AnalyzeAsync_ExtractsDependencies()
{
// Arrange
@@ -115,7 +122,8 @@ public sealed class HomebrewPackageAnalyzerTests
Assert.Contains("gettext", wget.Depends);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task AnalyzeAsync_ExtractsVendorMetadata()
{
// Arrange
@@ -133,7 +141,8 @@ public sealed class HomebrewPackageAnalyzerTests
Assert.Equal("https://openssl.org/", openssl.VendorMetadata["homepage"]);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task AnalyzeAsync_SetsEvidenceSourceToHomebrewCellar()
{
// Arrange
@@ -149,7 +158,8 @@ public sealed class HomebrewPackageAnalyzerTests
}
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task AnalyzeAsync_DiscoversBinFiles()
{
// Arrange
@@ -164,7 +174,8 @@ public sealed class HomebrewPackageAnalyzerTests
Assert.Contains(wget.Files, f => f.Path.Contains("wget"));
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task AnalyzeAsync_ResultsAreDeterministicallySorted()
{
// Arrange
@@ -182,7 +193,8 @@ public sealed class HomebrewPackageAnalyzerTests
}
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task AnalyzeAsync_NoCellar_ReturnsEmptyPackages()
{
// Arrange - use temp directory without Cellar structure
@@ -205,7 +217,8 @@ public sealed class HomebrewPackageAnalyzerTests
}
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task AnalyzeAsync_PopulatesTelemetry()
{
// Arrange

View File

@@ -2,13 +2,16 @@ using System.Text;
using StellaOps.Scanner.Analyzers.OS.Homebrew;
using Xunit;
using StellaOps.TestKit;
namespace StellaOps.Scanner.Analyzers.OS.Homebrew.Tests;
public sealed class HomebrewReceiptParserTests
{
private readonly HomebrewReceiptParser _parser = new();
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Parse_ValidReceipt_ReturnsExpectedValues()
{
// Arrange
@@ -51,7 +54,8 @@ public sealed class HomebrewReceiptParserTests
Assert.Equal("x86_64", receipt.Architecture);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Parse_WithRevision_ReturnsCorrectRevision()
{
// Arrange
@@ -77,7 +81,8 @@ public sealed class HomebrewReceiptParserTests
Assert.Equal(1, receipt.Revision);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Parse_AppleSilicon_ReturnsArm64Architecture()
{
// Arrange
@@ -100,7 +105,8 @@ public sealed class HomebrewReceiptParserTests
Assert.Equal("arm64", receipt.Architecture);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Parse_WithSourceInfo_ExtractsSourceUrlAndChecksum()
{
// Arrange
@@ -126,7 +132,8 @@ public sealed class HomebrewReceiptParserTests
Assert.Equal("sha256:abcdef123456", receipt.SourceChecksum);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Parse_MultipleDependencies_SortsAlphabetically()
{
// Arrange
@@ -155,7 +162,8 @@ public sealed class HomebrewReceiptParserTests
Assert.Equal("zlib", receipt.RuntimeDependencies[2]);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Parse_InvalidJson_ReturnsNull()
{
// Arrange
@@ -169,7 +177,8 @@ public sealed class HomebrewReceiptParserTests
Assert.Null(receipt);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Parse_EmptyJson_ReturnsNull()
{
// Arrange
@@ -183,7 +192,8 @@ public sealed class HomebrewReceiptParserTests
Assert.Null(receipt);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Parse_MissingName_ReturnsNull()
{
// Arrange
@@ -202,7 +212,8 @@ public sealed class HomebrewReceiptParserTests
Assert.Null(receipt);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Parse_TappedFrom_UsesTappedFromOverTap()
{
// Arrange
@@ -224,7 +235,8 @@ public sealed class HomebrewReceiptParserTests
Assert.Equal("custom/tap", receipt.Tap);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Parse_FallbackVersion_UsesVersionFieldWhenVersionsStableMissing()
{
// Arrange - older receipt format uses version field directly
@@ -245,7 +257,8 @@ public sealed class HomebrewReceiptParserTests
Assert.Equal("2.0.0", receipt.Version);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Parse_NormalizesArchitecture_AArch64ToArm64()
{
// Arrange

View File

@@ -20,6 +20,7 @@
<ItemGroup>
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS/StellaOps.Scanner.Analyzers.OS.csproj" />
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS.Homebrew/StellaOps.Scanner.Analyzers.OS.Homebrew.csproj" />
<ProjectReference Include="../../../__Libraries/StellaOps.TestKit/StellaOps.TestKit.csproj" />
</ItemGroup>
<ItemGroup>
<None Include="Fixtures\**\*" CopyToOutputDirectory="PreserveNewest" />