Fix warnings, update version format, organize DLLs in subfolder, and use System.Reflection.Assembly::LoadBytes

This commit is contained in:
GraceSolutions
2025-04-14 22:57:09 -04:00
parent afcb6dbbfa
commit bfbc031a76
15 changed files with 49 additions and 12 deletions
Binary file not shown.
Binary file not shown.
+2 -2
View File
@@ -1,6 +1,6 @@
@{
RootModule = 'PSOPNSenseAPI.dll'
ModuleVersion = '2025.04.14.2246'
RootModule = 'PSOPNSenseAPI.psm1'
ModuleVersion = '2025.04.14.2253'
GUID = '1f0e4b77-cc7c-4a1e-b45a-d7c51a3c562e'
Author = 'PSOPNSenseAPI Contributors'
CompanyName = 'PSOPNSenseAPI'
+25
View File
@@ -0,0 +1,25 @@
# Load assemblies from the lib folder using System.Reflection.Assembly::LoadBytes
# This avoids file lock issues when the module is loaded
$libPath = Join-Path $PSScriptRoot "lib"
$dllFiles = Get-ChildItem -Path $libPath -Filter "*.dll"
foreach ($dll in $dllFiles) {
try {
$dllBytes = [System.IO.File]::ReadAllBytes($dll.FullName)
[System.Reflection.Assembly]::Load($dllBytes) | Out-Null
Write-Verbose "Loaded assembly: $($dll.Name)"
}
catch {
Write-Warning "Failed to load assembly $($dll.Name): $_"
}
}
# Export all cmdlets
$cmdlets = [System.AppDomain]::CurrentDomain.GetAssemblies() |
Where-Object { $_.FullName -like "*PSOPNSenseAPI*" } |
ForEach-Object { $_.GetTypes() } |
Where-Object { $_.IsPublic -and $_.IsClass -and $_.Name -like "*Cmdlet" } |
ForEach-Object { $_.Name }
Export-ModuleMember -Cmdlet $cmdlets
+12
View File
@@ -0,0 +1,12 @@
## What's New
### Added
- Port forwarding management (Get, New, Set, Remove)
- Added unit tests for interface management
### Changed
- Updated IPNetwork2 library from version 2.6.618 to 3.1.764
- Updated code to use the new namespace (System.Net) for IPNetwork2
- Added support for .NET 8.0 and .NET 9.0
- Improved XML documentation for all classes and methods
- Made OPNSenseApiClient more testable by introducing an interface
+1 -1
View File
@@ -4,7 +4,7 @@
<TargetFrameworks>netstandard2.0;net472</TargetFrameworks>
<AssemblyName>PSOPNSenseAPI</AssemblyName>
<RootNamespace>PSOPNSenseAPI</RootNamespace>
<Version>2025.04.14.2246</Version>
<Version>2025.04.14.2253</Version>
<Authors>PSOPNSenseAPI Contributors</Authors>
<Company>PSOPNSenseAPI</Company>
<Description>PowerShell module for interacting with the OPNSense API to configure firewalls</Description>
@@ -11,9 +11,9 @@ namespace PSOPNSenseAPI.Tests
[TestClass]
public class InterfaceServiceTests
{
private Mock<IOPNSenseApiClient> _mockApiClient;
private Mock<ILogger> _mockLogger;
private InterfaceService _interfaceService;
private Mock<IOPNSenseApiClient>? _mockApiClient;
private Mock<ILogger>? _mockLogger;
private InterfaceService? _interfaceService;
[TestInitialize]
public void Setup()
@@ -43,11 +43,11 @@ namespace PSOPNSenseAPI.Tests
}
};
_mockApiClient.Setup(x => x.GetAsync<InterfaceListResponse>("interfaces/overview/searchInterfaces"))
_mockApiClient!.Setup(x => x.GetAsync<InterfaceListResponse>("interfaces/overview/searchInterfaces"))
.ReturnsAsync(response);
// Act
var result = await _interfaceService.GetInterfacesAsync();
var result = await _interfaceService!.GetInterfacesAsync();
// Assert
Assert.IsNotNull(result);
@@ -78,11 +78,11 @@ namespace PSOPNSenseAPI.Tests
}
};
_mockApiClient.Setup(x => x.GetAsync<InterfaceDetailResponse>($"interfaces/overview/getInterface/{interfaceName}"))
_mockApiClient!.Setup(x => x.GetAsync<InterfaceDetailResponse>($"interfaces/overview/getInterface/{interfaceName}"))
.ReturnsAsync(response);
// Act
var result = await _interfaceService.GetInterfaceDetailAsync(interfaceName);
var result = await _interfaceService!.GetInterfaceDetailAsync(interfaceName);
// Assert
Assert.IsNotNull(result);
@@ -114,11 +114,11 @@ namespace PSOPNSenseAPI.Tests
Result = "saved"
};
_mockApiClient.Setup(x => x.PostAsync<InterfaceUpdateResponse>($"interfaces/overview/setInterface/{interfaceName}", It.IsAny<object>()))
_mockApiClient!.Setup(x => x.PostAsync<InterfaceUpdateResponse>($"interfaces/overview/setInterface/{interfaceName}", It.IsAny<object>()))
.ReturnsAsync(response);
// Act
var result = await _interfaceService.UpdateInterfaceAsync(interfaceName, interfaceConfig);
var result = await _interfaceService!.UpdateInterfaceAsync(interfaceName, interfaceConfig);
// Assert
Assert.IsNotNull(result);