test: Add comprehensive tests for clearStorageOfflineAlert function
- clears existing offline alert and confirmation - triggers resolved callback - noop when no alert exists - clears offline confirmation even without alert - clearStorageOfflineAlert 50%→100%
This commit is contained in:
parent
2fbf9cbe7b
commit
a3aef773ec
1 changed files with 98 additions and 0 deletions
|
|
@ -3095,3 +3095,101 @@ func TestDockerServiceResourceID(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestClearStorageOfflineAlert(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
t.Run("clears existing offline alert", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
m := NewManager()
|
||||
|
||||
storage := models.Storage{
|
||||
ID: "storage-1",
|
||||
Name: "local-lvm",
|
||||
Node: "pve1",
|
||||
}
|
||||
|
||||
alertID := fmt.Sprintf("storage-offline-%s", storage.ID)
|
||||
|
||||
// Create an existing offline alert
|
||||
m.mu.Lock()
|
||||
m.activeAlerts[alertID] = &Alert{
|
||||
ID: alertID,
|
||||
Type: "storage-offline",
|
||||
Level: "critical",
|
||||
StartTime: time.Now().Add(-10 * time.Minute),
|
||||
}
|
||||
m.offlineConfirmations[storage.ID] = 3
|
||||
m.mu.Unlock()
|
||||
|
||||
var resolvedID string
|
||||
m.SetResolvedCallback(func(id string) {
|
||||
resolvedID = id
|
||||
})
|
||||
|
||||
m.clearStorageOfflineAlert(storage)
|
||||
|
||||
m.mu.RLock()
|
||||
_, alertExists := m.activeAlerts[alertID]
|
||||
_, confirmExists := m.offlineConfirmations[storage.ID]
|
||||
m.mu.RUnlock()
|
||||
|
||||
if alertExists {
|
||||
t.Error("expected alert to be cleared")
|
||||
}
|
||||
if confirmExists {
|
||||
t.Error("expected offline confirmation to be cleared")
|
||||
}
|
||||
if resolvedID != alertID {
|
||||
t.Errorf("expected resolved callback with %q, got %q", alertID, resolvedID)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("noop when no alert exists", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
m := NewManager()
|
||||
|
||||
storage := models.Storage{
|
||||
ID: "storage-2",
|
||||
Name: "local-zfs",
|
||||
Node: "pve1",
|
||||
}
|
||||
|
||||
var callbackCalled bool
|
||||
m.SetResolvedCallback(func(id string) {
|
||||
callbackCalled = true
|
||||
})
|
||||
|
||||
m.clearStorageOfflineAlert(storage)
|
||||
|
||||
if callbackCalled {
|
||||
t.Error("expected no callback when no alert exists")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("clears offline confirmation even when no alert", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
m := NewManager()
|
||||
|
||||
storage := models.Storage{
|
||||
ID: "storage-3",
|
||||
Name: "ceph-pool",
|
||||
Node: "pve2",
|
||||
}
|
||||
|
||||
// Set confirmation without alert
|
||||
m.mu.Lock()
|
||||
m.offlineConfirmations[storage.ID] = 2
|
||||
m.mu.Unlock()
|
||||
|
||||
m.clearStorageOfflineAlert(storage)
|
||||
|
||||
m.mu.RLock()
|
||||
_, confirmExists := m.offlineConfirmations[storage.ID]
|
||||
m.mu.RUnlock()
|
||||
|
||||
if confirmExists {
|
||||
t.Error("expected offline confirmation to be cleared")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue