mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 11:30:15 +00:00
Fixed an issue where all Docker containers were showing 'click to update' even when they were up to date. The root cause was comparing the wrong digest types: - Previously: Compared ImageID (local config hash) vs registry manifest digest - Now: Uses RepoDigests from image inspect, which is the actual manifest digest that Docker received from the registry when pulling the image For multi-arch images, the registry returns a manifest list digest, while Docker stores the platform-specific image config digest locally. These will never match, causing false positives for all multi-arch images. Changes: - Added ImageInspectWithRaw to dockerClient interface - Added getImageRepoDigest method to extract RepoDigest from image - Added matchesImageReference helper for Docker Hub naming conventions - Added tests for matchesImageReference Fixes #955
84 lines
2.8 KiB
Go
84 lines
2.8 KiB
Go
package ai
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/alerts"
|
|
)
|
|
|
|
func TestAlertThresholdAdapter_Defaults(t *testing.T) {
|
|
a := NewAlertThresholdAdapter(nil)
|
|
if a.GetNodeCPUThreshold() != 80 {
|
|
t.Fatalf("GetNodeCPUThreshold default = %v", a.GetNodeCPUThreshold())
|
|
}
|
|
if a.GetNodeMemoryThreshold() != 85 {
|
|
t.Fatalf("GetNodeMemoryThreshold default = %v", a.GetNodeMemoryThreshold())
|
|
}
|
|
if a.GetGuestMemoryThreshold() != 85 {
|
|
t.Fatalf("GetGuestMemoryThreshold default = %v", a.GetGuestMemoryThreshold())
|
|
}
|
|
if a.GetGuestDiskThreshold() != 90 {
|
|
t.Fatalf("GetGuestDiskThreshold default = %v", a.GetGuestDiskThreshold())
|
|
}
|
|
if a.GetStorageThreshold() != 85 {
|
|
t.Fatalf("GetStorageThreshold default = %v", a.GetStorageThreshold())
|
|
}
|
|
}
|
|
|
|
func TestAlertThresholdAdapter_UsesAlertManagerConfig(t *testing.T) {
|
|
mgr := alerts.NewManager()
|
|
cfg := mgr.GetConfig()
|
|
cfg.NodeDefaults.CPU = &alerts.HysteresisThreshold{Trigger: 70, Clear: 65}
|
|
cfg.NodeDefaults.Memory = &alerts.HysteresisThreshold{Trigger: 75, Clear: 70}
|
|
cfg.GuestDefaults.Memory = &alerts.HysteresisThreshold{Trigger: 72, Clear: 70}
|
|
cfg.GuestDefaults.Disk = &alerts.HysteresisThreshold{Trigger: 91, Clear: 90}
|
|
cfg.StorageDefault.Trigger = 77
|
|
mgr.UpdateConfig(cfg)
|
|
|
|
a := NewAlertThresholdAdapter(mgr)
|
|
if a.GetNodeCPUThreshold() != 70 {
|
|
t.Fatalf("GetNodeCPUThreshold = %v", a.GetNodeCPUThreshold())
|
|
}
|
|
if a.GetNodeMemoryThreshold() != 75 {
|
|
t.Fatalf("GetNodeMemoryThreshold = %v", a.GetNodeMemoryThreshold())
|
|
}
|
|
if a.GetGuestMemoryThreshold() != 72 {
|
|
t.Fatalf("GetGuestMemoryThreshold = %v", a.GetGuestMemoryThreshold())
|
|
}
|
|
if a.GetGuestDiskThreshold() != 91 {
|
|
t.Fatalf("GetGuestDiskThreshold = %v", a.GetGuestDiskThreshold())
|
|
}
|
|
if a.GetStorageThreshold() != 77 {
|
|
t.Fatalf("GetStorageThreshold = %v", a.GetStorageThreshold())
|
|
}
|
|
}
|
|
|
|
func TestAlertThresholdAdapter_Fallbacks(t *testing.T) {
|
|
mgr := alerts.NewManager()
|
|
cfg := mgr.GetConfig()
|
|
|
|
cfg.NodeDefaults.CPU = nil
|
|
cfg.NodeDefaults.Memory = &alerts.HysteresisThreshold{Trigger: 0, Clear: 0}
|
|
cfg.GuestDefaults.Memory = nil
|
|
cfg.GuestDefaults.Disk = &alerts.HysteresisThreshold{Trigger: 0, Clear: 0}
|
|
cfg.StorageDefault.Trigger = 0
|
|
|
|
mgr.UpdateConfig(cfg)
|
|
|
|
a := NewAlertThresholdAdapter(mgr)
|
|
if a.GetNodeCPUThreshold() != 80 {
|
|
t.Fatalf("GetNodeCPUThreshold default = %v", a.GetNodeCPUThreshold())
|
|
}
|
|
if a.GetNodeMemoryThreshold() != 85 {
|
|
t.Fatalf("GetNodeMemoryThreshold default = %v", a.GetNodeMemoryThreshold())
|
|
}
|
|
if a.GetGuestMemoryThreshold() != 85 {
|
|
t.Fatalf("GetGuestMemoryThreshold default = %v", a.GetGuestMemoryThreshold())
|
|
}
|
|
if a.GetGuestDiskThreshold() != 90 {
|
|
t.Fatalf("GetGuestDiskThreshold default = %v", a.GetGuestDiskThreshold())
|
|
}
|
|
if a.GetStorageThreshold() != 85 {
|
|
t.Fatalf("GetStorageThreshold default = %v", a.GetStorageThreshold())
|
|
}
|
|
}
|