feat(cli): upgrade command, rich status, and version cache
- Replace `upgrade` stub with real command (alias for `self-update`) - Also register `update` as alias: `unarr update` works too - Rewrite `status` to show full config, disk usage, daemon state, and update availability with colored sections - Add version check cache (1h TTL) so `status` is instant on repeat runs - Guard against division by zero on empty filesystems - Guard against negative durations from clock skew - Guard against stale PID via heartbeat recency check (2 min) - Add comprehensive test coverage across agent, engine, upgrade, usenet, arr, library, mediaserver, and UI packages - Improve Makefile coverage target to exclude cmd/ glue code - Fix stream handler resource cleanup and ffprobe error handling
This commit is contained in:
parent
01d62ffa13
commit
3e0f3a5a64
33 changed files with 7084 additions and 65 deletions
47
internal/sentry/sentry_test.go
Normal file
47
internal/sentry/sentry_test.go
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
package sentry
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestEnvironment(t *testing.T) {
|
||||
tests := []struct {
|
||||
version string
|
||||
want string
|
||||
}{
|
||||
{"", "development"},
|
||||
{"dev", "development"},
|
||||
{"0.1.0-dev", "development"},
|
||||
{"1.0.0", "production"},
|
||||
{"0.3.5", "production"},
|
||||
{"2.0.0-beta", "production"},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.version, func(t *testing.T) {
|
||||
got := environment(tt.version)
|
||||
if got != tt.want {
|
||||
t.Errorf("environment(%q) = %q, want %q", tt.version, got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestInitNoOp(t *testing.T) {
|
||||
// With empty dsn (default in tests), Init should be a no-op
|
||||
Init("1.0.0")
|
||||
// Should not panic
|
||||
}
|
||||
|
||||
func TestCloseNoOp(t *testing.T) {
|
||||
// Close should be safe to call without Init
|
||||
Close()
|
||||
}
|
||||
|
||||
func TestCaptureErrorNil(t *testing.T) {
|
||||
// Should not panic with nil error
|
||||
CaptureError(nil, "test")
|
||||
}
|
||||
|
||||
func TestSetUser(t *testing.T) {
|
||||
// Should not panic without initialization
|
||||
SetUser("agent-123")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue