fix: resolve net48-only nullable warnings (CS8601, CS8602, CS8604)

- CS8601: Add null-forgiving operator on guarded dictionary assignments
  in cmdlets where IsNullOrEmpty check precedes the assignment
- CS8602: Add Assert.NotNull after JObject["data"] in xUnit model tests
  (JToken indexer returns nullable on net48)
- CS8604: Add null-forgiving on guarded arguments in NodeService,
  WaitPveTaskCmdlet, GetPveTemplateCmdlet, and auth test parameters

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Clint Branham
2026-03-19 08:32:57 -05:00
parent 3075c12768
commit d187b0de52
26 changed files with 165 additions and 57 deletions
@@ -59,7 +59,7 @@ namespace PSProxmoxVE.Core.Tests.Authentication
public void ValidateHostname_NullOrEmpty_Throws_ForCredentials(string? hostname)
{
Assert.Throws<ArgumentException>(() =>
PveAuthenticator.AuthenticateWithCredentials(hostname, ValidPort, false, "root@pam", "password"));
PveAuthenticator.AuthenticateWithCredentials(hostname!, ValidPort, false, "root@pam", "password"));
}
[Theory]
@@ -69,7 +69,7 @@ namespace PSProxmoxVE.Core.Tests.Authentication
public void ValidateHostname_NullOrEmpty_Throws_ForApiToken(string? hostname)
{
Assert.Throws<ArgumentException>(() =>
PveAuthenticator.AuthenticateWithApiToken(hostname, ValidPort, false, "root@pam!mytoken=uuid"));
PveAuthenticator.AuthenticateWithApiToken(hostname!, ValidPort, false, "root@pam!mytoken=uuid"));
}
[Theory]
@@ -79,7 +79,7 @@ namespace PSProxmoxVE.Core.Tests.Authentication
public void ValidateApiToken_NullOrEmpty_Throws(string? token)
{
Assert.Throws<ArgumentException>(() =>
PveAuthenticator.AuthenticateWithApiToken(ValidHostname, ValidPort, false, token));
PveAuthenticator.AuthenticateWithApiToken(ValidHostname, ValidPort, false, token!));
}
}
}
@@ -44,7 +44,7 @@ namespace PSProxmoxVE.Core.Tests.Authentication
[InlineData(" ")]
public void Parse_NullOrEmpty_Throws(string? input)
{
Assert.Throws<ArgumentException>(() => PveVersion.Parse(input));
Assert.Throws<ArgumentException>(() => PveVersion.Parse(input!));
}
[Fact]
@@ -11,6 +11,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_cluster_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var entries = data.ToObject<PveClusterStatus[]>();
Assert.NotNull(entries);
Assert.Equal(4, entries.Length);
@@ -21,6 +22,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_cluster_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var entries = data.ToObject<PveClusterStatus[]>();
Assert.NotNull(entries);
Assert.Equal("cluster", entries[0].Type);
@@ -31,6 +33,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_cluster_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var entries = data.ToObject<PveClusterStatus[]>();
Assert.NotNull(entries);
Assert.Equal("testcluster", entries[0].Name);
@@ -41,6 +44,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_cluster_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var entries = data.ToObject<PveClusterStatus[]>();
Assert.NotNull(entries);
Assert.Equal(3, entries[0].Nodes);
@@ -51,6 +55,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_cluster_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var entries = data.ToObject<PveClusterStatus[]>();
Assert.NotNull(entries);
Assert.Equal(1, entries[0].Quorate);
@@ -61,6 +66,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_cluster_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var entries = data.ToObject<PveClusterStatus[]>();
Assert.NotNull(entries);
Assert.Equal("node", entries[1].Type);
@@ -71,6 +77,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_cluster_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var entries = data.ToObject<PveClusterStatus[]>();
Assert.NotNull(entries);
Assert.Equal("192.168.1.10", entries[1].Ip);
@@ -81,6 +88,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_cluster_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var entries = data.ToObject<PveClusterStatus[]>();
Assert.NotNull(entries);
Assert.Equal(1, entries[1].Online);
@@ -91,6 +99,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_cluster_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var entries = data.ToObject<PveClusterStatus[]>();
Assert.NotNull(entries);
Assert.Equal(1, entries[1].Local);
@@ -101,6 +110,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_cluster_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var entries = data.ToObject<PveClusterStatus[]>();
Assert.NotNull(entries);
// Fourth entry (index 3) is pve3 which is offline
@@ -113,6 +123,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_cluster_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var entries = data.ToObject<PveClusterStatus[]>();
Assert.NotNull(entries);
// Cluster-type entry should not have node-specific fields
@@ -125,6 +136,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_cluster_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var entries = data.ToObject<PveClusterStatus[]>();
Assert.NotNull(entries);
// Node-type entries should not have cluster-specific fields
@@ -11,6 +11,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_containers.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var containers = data.ToObject<PveContainer[]>();
Assert.NotNull(containers);
Assert.Equal(2, containers.Length);
@@ -21,6 +22,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_containers.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var containers = data.ToObject<PveContainer[]>();
Assert.NotNull(containers);
Assert.Equal(200, containers[0].VmId);
@@ -31,6 +33,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_containers.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var containers = data.ToObject<PveContainer[]>();
Assert.NotNull(containers);
Assert.Equal("ct-web", containers[0].Name);
@@ -41,6 +44,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_containers.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var containers = data.ToObject<PveContainer[]>();
Assert.NotNull(containers);
Assert.Equal("running", containers[0].Status);
@@ -51,6 +55,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_containers.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var containers = data.ToObject<PveContainer[]>();
Assert.NotNull(containers);
Assert.Equal("pve1", containers[0].Node);
@@ -61,6 +66,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_containers.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var containers = data.ToObject<PveContainer[]>();
Assert.NotNull(containers);
Assert.Equal(2, containers[0].CpuCount);
@@ -72,6 +78,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_containers.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var containers = data.ToObject<PveContainer[]>();
Assert.NotNull(containers);
Assert.Equal(536870912L, containers[0].MaxSwap);
@@ -83,6 +90,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_containers.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var containers = data.ToObject<PveContainer[]>();
Assert.NotNull(containers);
Assert.Equal(1, containers[0].Unprivileged);
@@ -93,6 +101,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_containers.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var containers = data.ToObject<PveContainer[]>();
Assert.NotNull(containers);
Assert.Equal("ubuntu", containers[0].OsType);
@@ -103,6 +112,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_containers.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var containers = data.ToObject<PveContainer[]>();
Assert.NotNull(containers);
Assert.Equal(201, containers[1].VmId);
@@ -115,6 +125,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_containers.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var containers = data.ToObject<PveContainer[]>();
Assert.NotNull(containers);
// Tags field is only in the first container
@@ -11,6 +11,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_networks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var networks = data.ToObject<PveNetwork[]>();
Assert.NotNull(networks);
Assert.Equal(2, networks.Length);
@@ -21,6 +22,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_networks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var networks = data.ToObject<PveNetwork[]>();
Assert.NotNull(networks);
Assert.Equal("vmbr0", networks[0].Iface);
@@ -31,6 +33,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_networks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var networks = data.ToObject<PveNetwork[]>();
Assert.NotNull(networks);
Assert.Equal("bridge", networks[0].Type);
@@ -41,6 +44,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_networks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var networks = data.ToObject<PveNetwork[]>();
Assert.NotNull(networks);
Assert.Equal("192.168.1.10", networks[0].Address);
@@ -53,6 +57,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_networks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var networks = data.ToObject<PveNetwork[]>();
Assert.NotNull(networks);
Assert.Equal("192.168.1.10/24", networks[0].Cidr);
@@ -63,6 +68,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_networks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var networks = data.ToObject<PveNetwork[]>();
Assert.NotNull(networks);
Assert.Equal("enp0s31f6", networks[0].BridgePorts);
@@ -73,6 +79,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_networks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var networks = data.ToObject<PveNetwork[]>();
Assert.NotNull(networks);
Assert.Equal(1, networks[0].Autostart);
@@ -83,6 +90,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_networks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var networks = data.ToObject<PveNetwork[]>();
Assert.NotNull(networks);
// No VLAN on primary bridge
@@ -95,6 +103,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_networks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var networks = data.ToObject<PveNetwork[]>();
Assert.NotNull(networks);
Assert.Equal("vmbr1", networks[1].Iface);
@@ -11,6 +11,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_nodes.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var nodes = data.ToObject<PveNode[]>();
Assert.NotNull(nodes);
Assert.Equal(2, nodes.Length);
@@ -25,6 +26,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_nodes.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var nodes = data.ToObject<PveNode[]>();
Assert.NotNull(nodes);
Assert.Equal("pve2", nodes[1].Name);
@@ -38,6 +40,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve8_nodes.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var nodes = data.ToObject<PveNode[]>();
Assert.NotNull(nodes);
Assert.Single(nodes);
@@ -49,6 +52,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve8_nodes.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var nodes = data.ToObject<PveNode[]>();
Assert.NotNull(nodes);
Assert.Equal(4, nodes[0].CpuCount);
@@ -60,6 +64,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_node_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var status = data.ToObject<PveNodeStatus>();
Assert.NotNull(status);
Assert.Equal(0.125, status.CpuUsage);
@@ -70,6 +75,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_node_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var status = data.ToObject<PveNodeStatus>();
Assert.NotNull(status);
Assert.Equal("pve1", status.Node);
@@ -83,6 +89,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_node_status.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var status = data.ToObject<PveNodeStatus>();
Assert.NotNull(status);
Assert.NotNull(status.MemoryUsage);
@@ -95,6 +102,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_nodes.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var nodes = data.ToObject<PveNode[]>();
Assert.NotNull(nodes);
Assert.NotNull(nodes[0].LoadAverage);
@@ -11,6 +11,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_sdn_zones.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var zones = data.ToObject<PveSdnZone[]>();
Assert.NotNull(zones);
Assert.Equal(2, zones.Length);
@@ -21,6 +22,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_sdn_zones.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var zones = data.ToObject<PveSdnZone[]>();
Assert.NotNull(zones);
Assert.Equal("localzone", zones[0].Zone);
@@ -31,6 +33,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_sdn_zones.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var zones = data.ToObject<PveSdnZone[]>();
Assert.NotNull(zones);
Assert.Equal("simple", zones[0].Type);
@@ -41,6 +44,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_sdn_zones.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var zones = data.ToObject<PveSdnZone[]>();
Assert.NotNull(zones);
Assert.Equal("vxlanzone", zones[1].Zone);
@@ -52,6 +56,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_sdn_zones.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var zones = data.ToObject<PveSdnZone[]>();
Assert.NotNull(zones);
// Comments field is not present in the fixture
@@ -63,6 +68,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_sdn_vnets.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vnets = data.ToObject<PveSdnVnet[]>();
Assert.NotNull(vnets);
Assert.Equal(2, vnets.Length);
@@ -73,6 +79,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_sdn_vnets.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vnets = data.ToObject<PveSdnVnet[]>();
Assert.NotNull(vnets);
Assert.Equal("myvnet", vnets[0].Vnet);
@@ -83,6 +90,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_sdn_vnets.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vnets = data.ToObject<PveSdnVnet[]>();
Assert.NotNull(vnets);
Assert.Equal("localzone", vnets[0].Zone);
@@ -93,6 +101,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_sdn_vnets.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vnets = data.ToObject<PveSdnVnet[]>();
Assert.NotNull(vnets);
Assert.Equal(100, vnets[0].Tag);
@@ -103,6 +112,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_sdn_vnets.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vnets = data.ToObject<PveSdnVnet[]>();
Assert.NotNull(vnets);
Assert.Equal("My VNET", vnets[0].Alias);
@@ -113,6 +123,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_sdn_vnets.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vnets = data.ToObject<PveSdnVnet[]>();
Assert.NotNull(vnets);
Assert.Equal("prodnet", vnets[1].Vnet);
@@ -125,6 +136,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_sdn_vnets.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vnets = data.ToObject<PveSdnVnet[]>();
Assert.NotNull(vnets);
// Comments not present in fixture entries
@@ -11,6 +11,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_snapshots.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var snapshots = data.ToObject<PveSnapshot[]>();
Assert.NotNull(snapshots);
Assert.Equal(3, snapshots.Length);
@@ -21,6 +22,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_snapshots.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var snapshots = data.ToObject<PveSnapshot[]>();
Assert.NotNull(snapshots);
Assert.Equal("current", snapshots[0].Name);
@@ -31,6 +33,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_snapshots.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var snapshots = data.ToObject<PveSnapshot[]>();
Assert.NotNull(snapshots);
Assert.Equal("You are here!", snapshots[0].Description);
@@ -41,6 +44,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_snapshots.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var snapshots = data.ToObject<PveSnapshot[]>();
Assert.NotNull(snapshots);
Assert.Equal("snap1", snapshots[1].Name);
@@ -52,6 +56,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_snapshots.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var snapshots = data.ToObject<PveSnapshot[]>();
Assert.NotNull(snapshots);
Assert.Equal(1, snapshots[1].VmState);
@@ -62,6 +67,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_snapshots.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var snapshots = data.ToObject<PveSnapshot[]>();
Assert.NotNull(snapshots);
Assert.Equal("base", snapshots[1].Parent);
@@ -72,6 +78,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_snapshots.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var snapshots = data.ToObject<PveSnapshot[]>();
Assert.NotNull(snapshots);
Assert.Equal("base", snapshots[2].Name);
@@ -83,6 +90,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_snapshots.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var snapshots = data.ToObject<PveSnapshot[]>();
Assert.NotNull(snapshots);
Assert.Equal("snap1", snapshots[0].Parent);
@@ -93,6 +101,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_snapshots.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var snapshots = data.ToObject<PveSnapshot[]>();
Assert.NotNull(snapshots);
Assert.Equal(1709000000L, snapshots[2].SnapTime);
@@ -11,6 +11,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
Assert.Equal(3, storages.Length);
@@ -21,6 +22,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
Assert.Equal("local", storages[0].Storage);
@@ -31,6 +33,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
Assert.Equal("dir", storages[0].Type);
@@ -41,6 +44,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
Assert.Equal("iso,vztmpl,backup", storages[0].Content);
@@ -51,6 +55,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
Assert.Equal(107374182400L, storages[0].Total);
@@ -63,6 +68,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
Assert.Equal(1, storages[0].Enabled);
@@ -74,6 +80,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
var ceph = storages[2];
@@ -87,6 +94,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_storage_content.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var items = data.ToObject<PveStorageContent[]>();
Assert.NotNull(items);
Assert.Equal(2, items.Length);
@@ -97,6 +105,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_storage_content.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var items = data.ToObject<PveStorageContent[]>();
Assert.NotNull(items);
Assert.Equal("local:iso/ubuntu-24.04-live-server-amd64.iso", items[0].VolId);
@@ -107,6 +116,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_storage_content.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var items = data.ToObject<PveStorageContent[]>();
Assert.NotNull(items);
Assert.Equal("iso", items[0].Content);
@@ -118,6 +128,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_storage_content.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var items = data.ToObject<PveStorageContent[]>();
Assert.NotNull(items);
Assert.Equal(2774532096L, items[0].Size);
@@ -128,6 +139,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_storage_content.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var items = data.ToObject<PveStorageContent[]>();
Assert.NotNull(items);
// ISO items should not have a VmId or Notes
@@ -11,6 +11,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_tasks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var task = data.ToObject<PveTask>();
Assert.NotNull(task);
Assert.Equal("UPID:pve1:00001234:00ABCDEF:65F00000:qmstart:100:root@pam:", task.Upid);
@@ -21,6 +22,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_tasks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var task = data.ToObject<PveTask>();
Assert.NotNull(task);
Assert.Equal("stopped", task.Status);
@@ -31,6 +33,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_tasks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var task = data.ToObject<PveTask>();
Assert.NotNull(task);
Assert.Equal("OK", task.ExitStatus);
@@ -41,6 +44,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_tasks.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var task = data.ToObject<PveTask>();
Assert.NotNull(task);
Assert.True(task.IsSuccessful);
@@ -51,6 +55,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_task_running.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var task = data.ToObject<PveTask>();
Assert.NotNull(task);
Assert.Equal("UPID:pve1:00001234:00ABCDEF:65F00000:qmstart:100:root@pam:", task.Upid);
@@ -61,6 +66,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_task_running.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var task = data.ToObject<PveTask>();
Assert.NotNull(task);
Assert.Equal("running", task.Status);
@@ -71,6 +77,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_task_running.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var task = data.ToObject<PveTask>();
Assert.NotNull(task);
Assert.Null(task.ExitStatus);
@@ -81,6 +88,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_task_running.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var task = data.ToObject<PveTask>();
Assert.NotNull(task);
Assert.False(task.IsSuccessful);
@@ -11,6 +11,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_users.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var users = data.ToObject<PveUser[]>();
Assert.NotNull(users);
Assert.Equal(3, users.Length);
@@ -21,6 +22,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_users.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var users = data.ToObject<PveUser[]>();
Assert.NotNull(users);
Assert.Equal("root@pam", users[0].UserId);
@@ -31,6 +33,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_users.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var users = data.ToObject<PveUser[]>();
Assert.NotNull(users);
Assert.Equal("Root", users[0].FirstName);
@@ -42,6 +45,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_users.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var users = data.ToObject<PveUser[]>();
Assert.NotNull(users);
Assert.Equal("root@example.com", users[0].Email);
@@ -52,6 +56,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_users.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var users = data.ToObject<PveUser[]>();
Assert.NotNull(users);
Assert.Equal(1, users[0].Enabled);
@@ -62,6 +67,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_users.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var users = data.ToObject<PveUser[]>();
Assert.NotNull(users);
Assert.Equal("admin@pve", users[1].UserId);
@@ -73,6 +79,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_users.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var users = data.ToObject<PveUser[]>();
Assert.NotNull(users);
Assert.Equal("readonly@pve", users[2].UserId);
@@ -84,6 +91,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_users.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var users = data.ToObject<PveUser[]>();
Assert.NotNull(users);
// Root user has no groups in fixture
@@ -95,6 +103,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_roles.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var roles = data.ToObject<PveRole[]>();
Assert.NotNull(roles);
Assert.Equal(2, roles.Length);
@@ -105,6 +114,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_roles.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var roles = data.ToObject<PveRole[]>();
Assert.NotNull(roles);
Assert.Equal("Administrator", roles[0].RoleId);
@@ -115,6 +125,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_roles.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var roles = data.ToObject<PveRole[]>();
Assert.NotNull(roles);
Assert.Equal(1, roles[0].Special);
@@ -125,6 +136,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_roles.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var roles = data.ToObject<PveRole[]>();
Assert.NotNull(roles);
Assert.NotNull(roles[0].Privileges);
@@ -136,6 +148,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_roles.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var roles = data.ToObject<PveRole[]>();
Assert.NotNull(roles);
Assert.Equal("PVEAuditor", roles[1].RoleId);
@@ -11,6 +11,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vms.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vms = data.ToObject<PveVm[]>();
Assert.NotNull(vms);
Assert.Equal(3, vms.Length);
@@ -21,6 +22,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vms.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vms = data.ToObject<PveVm[]>();
Assert.NotNull(vms);
Assert.Equal(100, vms[0].VmId);
@@ -31,6 +33,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vms.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vms = data.ToObject<PveVm[]>();
Assert.NotNull(vms);
Assert.Equal("test-vm-1", vms[0].Name);
@@ -41,6 +44,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vms.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vms = data.ToObject<PveVm[]>();
Assert.NotNull(vms);
Assert.Equal("running", vms[0].Status);
@@ -51,6 +55,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vms.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vms = data.ToObject<PveVm[]>();
Assert.NotNull(vms);
// Third entry is the template
@@ -64,6 +69,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vms.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vms = data.ToObject<PveVm[]>();
Assert.NotNull(vms);
Assert.Equal(0, vms[0].Template);
@@ -74,6 +80,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vms.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vms = data.ToObject<PveVm[]>();
Assert.NotNull(vms);
Assert.Equal(8589934592L, vms[0].MaxMem);
@@ -85,6 +92,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vms.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var vms = data.ToObject<PveVm[]>();
Assert.NotNull(vms);
Assert.Equal(0L, vms[1].Uptime);
@@ -95,6 +103,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vm_config.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var config = data.ToObject<PveVmConfig>();
Assert.NotNull(config);
Assert.Equal(4, config.Cores);
@@ -107,6 +116,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vm_config.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var config = data.ToObject<PveVmConfig>();
Assert.NotNull(config);
Assert.Equal("ovmf", config.Bios);
@@ -118,6 +128,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vm_config.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var config = data.ToObject<PveVmConfig>();
Assert.NotNull(config);
Assert.Equal("host", config.CpuType);
@@ -129,6 +140,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vm_config.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var config = data.ToObject<PveVmConfig>();
Assert.NotNull(config);
Assert.NotNull(config.Net0);
@@ -140,6 +152,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vm_config.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var config = data.ToObject<PveVmConfig>();
Assert.NotNull(config);
// Fields not present in fixture should be null
@@ -153,6 +166,7 @@ namespace PSProxmoxVE.Core.Tests.Models
{
var json = TestHelper.LoadFixture("pve9_vm_config.json");
var data = JObject.Parse(json)["data"];
Assert.NotNull(data);
var config = data.ToObject<PveVmConfig>();
Assert.NotNull(config);
Assert.Equal("admin", config.CiUser);