Files
PSProxmox/PSProxmox.Tests/IPAM/IPAMManagerTests.cs
T
2025-04-28 14:11:32 -04:00

248 lines
7.3 KiB
C#

using Microsoft.VisualStudio.TestTools.UnitTesting;
using PSProxmox.IPAM;
using System;
using System.Linq;
using System.Net;
namespace PSProxmox.Tests.IPAM
{
[TestClass]
public class IPAMManagerTests
{
[TestMethod]
public void CreatePool_CreatesPool()
{
// Arrange
var ipamManager = new IPAMManager();
string name = "test-pool";
string cidr = "192.168.1.0/24";
// Act
var pool = ipamManager.CreatePool(name, cidr);
// Assert
Assert.AreEqual(name, pool.Name);
Assert.AreEqual(cidr, pool.CIDR);
Assert.AreEqual(254, pool.TotalIPs); // 256 - 2 (network and broadcast)
Assert.AreEqual(254, pool.AvailableIPs);
Assert.AreEqual(0, pool.UsedIPs);
}
[TestMethod]
public void CreatePool_WithExcludedIPs_CreatesPool()
{
// Arrange
var ipamManager = new IPAMManager();
string name = "test-pool";
string cidr = "192.168.1.0/24";
string[] excludeIPs = new[] { "192.168.1.1", "192.168.1.254" };
// Act
var pool = ipamManager.CreatePool(name, cidr, excludeIPs);
// Assert
Assert.AreEqual(name, pool.Name);
Assert.AreEqual(cidr, pool.CIDR);
Assert.AreEqual(254, pool.TotalIPs);
Assert.AreEqual(252, pool.AvailableIPs); // 254 - 2 excluded
Assert.AreEqual(0, pool.UsedIPs);
Assert.AreEqual(2, pool.ExcludedIPs);
}
[TestMethod]
public void GetPool_ReturnsPool()
{
// Arrange
var ipamManager = new IPAMManager();
string name = "test-pool";
string cidr = "192.168.1.0/24";
ipamManager.CreatePool(name, cidr);
// Act
var pool = ipamManager.GetPool(name);
// Assert
Assert.AreEqual(name, pool.Name);
Assert.AreEqual(cidr, pool.CIDR);
}
[TestMethod]
[ExpectedException(typeof(KeyNotFoundException))]
public void GetPool_ThrowsOnNonExistentPool()
{
// Arrange
var ipamManager = new IPAMManager();
// Act
var pool = ipamManager.GetPool("non-existent-pool");
}
[TestMethod]
public void GetPools_ReturnsAllPools()
{
// Arrange
var ipamManager = new IPAMManager();
ipamManager.CreatePool("pool1", "192.168.1.0/24");
ipamManager.CreatePool("pool2", "192.168.2.0/24");
// Act
var pools = ipamManager.GetPools().ToList();
// Assert
Assert.AreEqual(2, pools.Count);
Assert.IsTrue(pools.Any(p => p.Name == "pool1"));
Assert.IsTrue(pools.Any(p => p.Name == "pool2"));
}
[TestMethod]
public void RemovePool_RemovesPool()
{
// Arrange
var ipamManager = new IPAMManager();
ipamManager.CreatePool("pool1", "192.168.1.0/24");
ipamManager.CreatePool("pool2", "192.168.2.0/24");
// Act
ipamManager.RemovePool("pool1");
var pools = ipamManager.GetPools().ToList();
// Assert
Assert.AreEqual(1, pools.Count);
Assert.IsTrue(pools.Any(p => p.Name == "pool2"));
}
[TestMethod]
[ExpectedException(typeof(KeyNotFoundException))]
public void RemovePool_ThrowsOnNonExistentPool()
{
// Arrange
var ipamManager = new IPAMManager();
// Act
ipamManager.RemovePool("non-existent-pool");
}
[TestMethod]
public void ClearPools_ClearsAllPools()
{
// Arrange
var ipamManager = new IPAMManager();
ipamManager.CreatePool("pool1", "192.168.1.0/24");
ipamManager.CreatePool("pool2", "192.168.2.0/24");
// Act
ipamManager.ClearPools();
var pools = ipamManager.GetPools().ToList();
// Assert
Assert.AreEqual(0, pools.Count);
}
}
[TestClass]
public class IPPoolTests
{
[TestMethod]
public void Constructor_InitializesPool()
{
// Arrange
string name = "test-pool";
string cidr = "192.168.1.0/24";
// Act
var pool = new IPPool(name, cidr);
// Assert
Assert.AreEqual(name, pool.Name);
Assert.AreEqual(cidr, pool.CIDR);
Assert.AreEqual(IPAddress.Parse("192.168.1.0"), pool.NetworkAddress);
Assert.AreEqual(IPAddress.Parse("255.255.255.0"), pool.SubnetMask);
Assert.AreEqual(24, pool.PrefixLength);
Assert.AreEqual(254, pool.TotalIPs);
Assert.AreEqual(254, pool.AvailableIPs);
Assert.AreEqual(0, pool.UsedIPs);
}
[TestMethod]
public void Constructor_WithExcludedIPs_InitializesPool()
{
// Arrange
string name = "test-pool";
string cidr = "192.168.1.0/24";
string[] excludeIPs = new[] { "192.168.1.1", "192.168.1.254" };
// Act
var pool = new IPPool(name, cidr, excludeIPs);
// Assert
Assert.AreEqual(name, pool.Name);
Assert.AreEqual(cidr, pool.CIDR);
Assert.AreEqual(254, pool.TotalIPs);
Assert.AreEqual(252, pool.AvailableIPs);
Assert.AreEqual(0, pool.UsedIPs);
Assert.AreEqual(2, pool.ExcludedIPs);
}
[TestMethod]
public void GetNextIP_ReturnsNextIP()
{
// Arrange
var pool = new IPPool("test-pool", "192.168.1.0/24");
// Act
var ip1 = pool.GetNextIP();
var ip2 = pool.GetNextIP();
// Assert
Assert.AreEqual(IPAddress.Parse("192.168.1.1"), ip1);
Assert.AreEqual(IPAddress.Parse("192.168.1.2"), ip2);
Assert.AreEqual(252, pool.AvailableIPs);
Assert.AreEqual(2, pool.UsedIPs);
}
[TestMethod]
public void ReleaseIP_ReleasesIP()
{
// Arrange
var pool = new IPPool("test-pool", "192.168.1.0/24");
var ip1 = pool.GetNextIP();
var ip2 = pool.GetNextIP();
// Act
pool.ReleaseIP(ip1);
// Assert
Assert.AreEqual(253, pool.AvailableIPs);
Assert.AreEqual(1, pool.UsedIPs);
}
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void ReleaseIP_ThrowsOnUnusedIP()
{
// Arrange
var pool = new IPPool("test-pool", "192.168.1.0/24");
var ip = IPAddress.Parse("192.168.1.10");
// Act
pool.ReleaseIP(ip);
}
[TestMethod]
public void Clear_ClearsAllUsedIPs()
{
// Arrange
var pool = new IPPool("test-pool", "192.168.1.0/24");
pool.GetNextIP();
pool.GetNextIP();
// Act
pool.Clear();
// Assert
Assert.AreEqual(254, pool.AvailableIPs);
Assert.AreEqual(0, pool.UsedIPs);
}
}
}