test: Add tests for sanitizeGuestAddressStrings, parseContainerConfigNetworks, mergeNVMeTempsIntoDisks

- sanitizeGuestAddressStrings: IPv6 loopback with CIDR (::1/128) edge case
  (96.2% -> 100%)
- parseContainerConfigNetworks: parts without equals, mac/ips/ip6addr/ip6prefix
  key variants, whitespace-only values, all-empty results (97.2% -> 100%)
- mergeNVMeTempsIntoDisks: NVMe disk with no legacy temps (continue branch),
  more disks than temps (break branch) (97% -> 100%)
This commit is contained in:
rcourtman 2025-12-01 20:34:48 +00:00
parent 4e33b396e0
commit ed0644035f
3 changed files with 152 additions and 0 deletions

View file

@ -434,6 +434,103 @@ func TestParseContainerConfigNetworks(t *testing.T) {
},
},
},
{
name: "parts without equals sign skipped",
input: map[string]interface{}{
"net0": "name=eth0,invalidpart,hwaddr=AA:BB:CC:DD:EE:FF",
},
want: []containerNetworkDetails{
{
Name: "eth0",
MAC: "AA:BB:CC:DD:EE:FF",
},
},
},
{
name: "mac key variant",
input: map[string]interface{}{
"net0": "name=eth0,mac=AA:BB:CC:DD:EE:FF",
},
want: []containerNetworkDetails{
{
Name: "eth0",
MAC: "AA:BB:CC:DD:EE:FF",
},
},
},
{
name: "ips key variant",
input: map[string]interface{}{
"net0": "name=eth0,ips=192.168.1.100",
},
want: []containerNetworkDetails{
{
Name: "eth0",
Addresses: []string{"192.168.1.100"},
},
},
},
{
name: "ip6addr key variant",
input: map[string]interface{}{
"net0": "name=eth0,ip6addr=2001:db8::1",
},
want: []containerNetworkDetails{
{
Name: "eth0",
Addresses: []string{"2001:db8::1"},
},
},
},
{
name: "ip6prefix key variant",
input: map[string]interface{}{
"net0": "name=eth0,ip6prefix=2001:db8::",
},
want: []containerNetworkDetails{
{
Name: "eth0",
Addresses: []string{"2001:db8::"},
},
},
},
{
name: "whitespace only interface value",
input: map[string]interface{}{
"net0": " ",
},
want: nil,
},
{
name: "all empty net values returns nil",
input: map[string]interface{}{
"net0": "",
"net1": " ",
},
want: nil,
},
{
name: "only unrecognized keys uses key as name",
input: map[string]interface{}{
"net0": "unknown=value,other=data",
},
want: []containerNetworkDetails{
{
Name: "net0",
},
},
},
{
name: "value parts only without equals",
input: map[string]interface{}{
"net0": "noequals,alsonoequals",
},
want: []containerNetworkDetails{
{
Name: "net0",
},
},
},
}
for _, tt := range tests {

View file

@ -434,6 +434,8 @@ func TestSanitizeGuestAddressStrings(t *testing.T) {
{name: "filters loopback from list", input: "192.168.1.1,127.0.0.1,10.0.0.1", want: []string{"192.168.1.1", "10.0.0.1"}},
{name: "ipv6 zone identifier stripped", input: "2001:db8::1%eth0", want: []string{"2001:db8::1"}},
{name: "whitespace trimmed", input: " 192.168.1.100 ", want: []string{"192.168.1.100"}},
// Edge case: ::1 with CIDR notation to hit the HasPrefix(lower, "::1") check after CIDR stripping
{name: "loopback ipv6 with cidr", input: "::1/128", want: nil},
}
for _, tc := range cases {

View file

@ -231,6 +231,59 @@ func TestMergeNVMeTempsIntoDisks(t *testing.T) {
{Node: "node1", DevPath: "/dev/nvme0n1", Type: "nvme", Temperature: 0},
},
},
{
name: "NVMe disk with no legacy temps for node (continue branch)",
disks: []models.PhysicalDisk{
{Node: "node1", DevPath: "/dev/nvme0n1", Type: "nvme", Temperature: 0},
{Node: "node2", DevPath: "/dev/nvme0n1", Type: "nvme", Temperature: 0},
},
nodes: []models.Node{
{
Name: "node1",
Temperature: &models.Temperature{
Available: true,
NVMe: []models.NVMeTemp{
{Device: "nvme0", Temp: 45.0},
},
},
},
{
Name: "node2",
Temperature: &models.Temperature{
Available: true,
// No NVMe temps for node2, but SMART is empty too
},
},
},
expected: []models.PhysicalDisk{
{Node: "node1", DevPath: "/dev/nvme0n1", Type: "nvme", Temperature: 45},
{Node: "node2", DevPath: "/dev/nvme0n1", Type: "nvme", Temperature: 0},
},
},
{
name: "more NVMe disks than temps (break branch)",
disks: []models.PhysicalDisk{
{Node: "node1", DevPath: "/dev/nvme0n1", Type: "nvme", Temperature: 0},
{Node: "node1", DevPath: "/dev/nvme1n1", Type: "nvme", Temperature: 0},
{Node: "node1", DevPath: "/dev/nvme2n1", Type: "nvme", Temperature: 0},
},
nodes: []models.Node{
{
Name: "node1",
Temperature: &models.Temperature{
Available: true,
NVMe: []models.NVMeTemp{
{Device: "nvme0", Temp: 40.0},
},
},
},
},
expected: []models.PhysicalDisk{
{Node: "node1", DevPath: "/dev/nvme0n1", Type: "nvme", Temperature: 40},
{Node: "node1", DevPath: "/dev/nvme1n1", Type: "nvme", Temperature: 0},
{Node: "node1", DevPath: "/dev/nvme2n1", Type: "nvme", Temperature: 0},
},
},
}
for _, tt := range tests {