mirror of
https://github.com/tw93/Mole.git
synced 2026-03-22 22:30:08 +00:00
* feat(status): alert on persistent high-cpu processes * refactor(status): keep high-cpu alerts read-only * fix(status): address lint and sudo test regressions --------- Co-authored-by: Tw93 <hitw93@gmail.com>
93 lines
2.1 KiB
Go
93 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestShouldUseJSONOutput_ForceFlag(t *testing.T) {
|
|
if !shouldUseJSONOutput(true, nil) {
|
|
t.Fatalf("expected force JSON flag to enable JSON mode")
|
|
}
|
|
}
|
|
|
|
func TestShouldUseJSONOutput_NilStdout(t *testing.T) {
|
|
if shouldUseJSONOutput(false, nil) {
|
|
t.Fatalf("expected nil stdout to keep TUI mode")
|
|
}
|
|
}
|
|
|
|
func TestShouldUseJSONOutput_NonTTYPipe(t *testing.T) {
|
|
reader, writer, err := os.Pipe()
|
|
if err != nil {
|
|
t.Fatalf("create pipe: %v", err)
|
|
}
|
|
defer reader.Close()
|
|
defer writer.Close()
|
|
|
|
if !shouldUseJSONOutput(false, writer) {
|
|
t.Fatalf("expected pipe stdout to use JSON mode")
|
|
}
|
|
}
|
|
|
|
func TestShouldUseJSONOutput_NonTTYFile(t *testing.T) {
|
|
tmpFile, err := os.CreateTemp("", "mole-status-stdout-*.txt")
|
|
if err != nil {
|
|
t.Fatalf("create temp file: %v", err)
|
|
}
|
|
defer os.Remove(tmpFile.Name())
|
|
defer tmpFile.Close()
|
|
|
|
if !shouldUseJSONOutput(false, tmpFile) {
|
|
t.Fatalf("expected file stdout to use JSON mode")
|
|
}
|
|
}
|
|
|
|
func TestProcessWatchOptionsFromFlags(t *testing.T) {
|
|
oldThreshold := *procCPUThreshold
|
|
oldWindow := *procCPUWindow
|
|
oldAlerts := *procCPUAlerts
|
|
defer func() {
|
|
*procCPUThreshold = oldThreshold
|
|
*procCPUWindow = oldWindow
|
|
*procCPUAlerts = oldAlerts
|
|
}()
|
|
|
|
*procCPUThreshold = 125
|
|
*procCPUWindow = 2 * time.Minute
|
|
*procCPUAlerts = false
|
|
|
|
opts := processWatchOptionsFromFlags()
|
|
if opts.CPUThreshold != 125 {
|
|
t.Fatalf("CPUThreshold = %v, want 125", opts.CPUThreshold)
|
|
}
|
|
if opts.Window != 2*time.Minute {
|
|
t.Fatalf("Window = %v, want 2m", opts.Window)
|
|
}
|
|
if opts.Enabled {
|
|
t.Fatal("Enabled = true, want false")
|
|
}
|
|
}
|
|
|
|
func TestValidateFlags(t *testing.T) {
|
|
oldThreshold := *procCPUThreshold
|
|
oldWindow := *procCPUWindow
|
|
defer func() {
|
|
*procCPUThreshold = oldThreshold
|
|
*procCPUWindow = oldWindow
|
|
}()
|
|
|
|
*procCPUThreshold = -1
|
|
*procCPUWindow = 5 * time.Minute
|
|
if err := validateFlags(); err == nil {
|
|
t.Fatal("expected negative threshold to fail validation")
|
|
}
|
|
|
|
*procCPUThreshold = 100
|
|
*procCPUWindow = 0
|
|
if err := validateFlags(); err == nil {
|
|
t.Fatal("expected zero window to fail validation")
|
|
}
|
|
}
|