ax(mining): rename settings_manager tests to Good/Bad/Ugly convention
All test functions in settings_manager_test.go now follow
TestFilename_Function_{Good,Bad,Ugly} per AX RFC-025 §Test Naming.
Added _Bad (load from missing path) and _Ugly (concurrent access) cases
where only descriptive suffixes existed before.
Co-Authored-By: Charon <charon@lethean.io>
This commit is contained in:
parent
bf44c296d9
commit
eb13ef5a21
1 changed files with 45 additions and 29 deletions
|
|
@ -6,7 +6,7 @@ import (
|
|||
"testing"
|
||||
)
|
||||
|
||||
func TestSettingsManager_DefaultSettings(t *testing.T) {
|
||||
func TestSettingsManager_DefaultSettings_Good(t *testing.T) {
|
||||
defaults := DefaultSettings()
|
||||
|
||||
if defaults.Window.Width != 1400 {
|
||||
|
|
@ -26,36 +26,30 @@ func TestSettingsManager_DefaultSettings(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestSettingsManager_SaveAndLoad(t *testing.T) {
|
||||
// Use a temp directory for testing
|
||||
func TestSettingsManager_SaveAndLoad_Good(t *testing.T) {
|
||||
tmpDir := t.TempDir()
|
||||
settingsPath := filepath.Join(tmpDir, "settings.json")
|
||||
|
||||
// Create settings manager with custom path
|
||||
sm := &SettingsManager{
|
||||
settings: DefaultSettings(),
|
||||
settingsPath: settingsPath,
|
||||
}
|
||||
|
||||
// Modify settings
|
||||
sm.settings.Window.Width = 1920
|
||||
sm.settings.Window.Height = 1080
|
||||
sm.settings.StartOnBoot = true
|
||||
sm.settings.AutostartMiners = true
|
||||
sm.settings.CPUThrottlePercent = 50
|
||||
|
||||
// Save
|
||||
err := sm.Save()
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to save settings: %v", err)
|
||||
}
|
||||
|
||||
// Verify file exists
|
||||
if _, err := os.Stat(settingsPath); os.IsNotExist(err) {
|
||||
t.Fatal("Settings file was not created")
|
||||
}
|
||||
|
||||
// Create new manager and load
|
||||
sm2 := &SettingsManager{
|
||||
settings: DefaultSettings(),
|
||||
settingsPath: settingsPath,
|
||||
|
|
@ -65,7 +59,6 @@ func TestSettingsManager_SaveAndLoad(t *testing.T) {
|
|||
t.Fatalf("Failed to load settings: %v", err)
|
||||
}
|
||||
|
||||
// Verify loaded values
|
||||
if sm2.settings.Window.Width != 1920 {
|
||||
t.Errorf("Expected width 1920, got %d", sm2.settings.Window.Width)
|
||||
}
|
||||
|
|
@ -83,7 +76,19 @@ func TestSettingsManager_SaveAndLoad(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestSettingsManager_UpdateWindowState(t *testing.T) {
|
||||
func TestSettingsManager_SaveAndLoad_Bad(t *testing.T) {
|
||||
// Load from a path that does not exist — must return an error.
|
||||
sm := &SettingsManager{
|
||||
settings: DefaultSettings(),
|
||||
settingsPath: filepath.Join(t.TempDir(), "does_not_exist", "settings.json"),
|
||||
}
|
||||
|
||||
if err := sm.Load(); err == nil {
|
||||
t.Error("Expected error loading from missing path, got nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSettingsManager_UpdateWindowState_Good(t *testing.T) {
|
||||
tmpDir := t.TempDir()
|
||||
settingsPath := filepath.Join(tmpDir, "settings.json")
|
||||
|
||||
|
|
@ -112,7 +117,7 @@ func TestSettingsManager_UpdateWindowState(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestSettingsManager_SetCPUThrottle(t *testing.T) {
|
||||
func TestSettingsManager_SetCPUThrottle_Good(t *testing.T) {
|
||||
tmpDir := t.TempDir()
|
||||
settingsPath := filepath.Join(tmpDir, "settings.json")
|
||||
|
||||
|
|
@ -121,7 +126,6 @@ func TestSettingsManager_SetCPUThrottle(t *testing.T) {
|
|||
settingsPath: settingsPath,
|
||||
}
|
||||
|
||||
// Test enabling throttle
|
||||
err := sm.SetCPUThrottle(true, 30)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to set CPU throttle: %v", err)
|
||||
|
|
@ -134,19 +138,10 @@ func TestSettingsManager_SetCPUThrottle(t *testing.T) {
|
|||
if settings.CPUThrottlePercent != 30 {
|
||||
t.Errorf("Expected CPUThrottlePercent 30, got %d", settings.CPUThrottlePercent)
|
||||
}
|
||||
|
||||
// Test invalid percentage (should be ignored)
|
||||
err = sm.SetCPUThrottle(true, 150)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to set CPU throttle: %v", err)
|
||||
}
|
||||
settings = sm.Get()
|
||||
if settings.CPUThrottlePercent != 30 { // Should remain unchanged
|
||||
t.Errorf("Expected CPUThrottlePercent to remain 30, got %d", settings.CPUThrottlePercent)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSettingsManager_SetMinerDefaults(t *testing.T) {
|
||||
func TestSettingsManager_SetCPUThrottle_Bad(t *testing.T) {
|
||||
// An out-of-range percentage (>100) must be ignored, leaving the prior value unchanged.
|
||||
tmpDir := t.TempDir()
|
||||
settingsPath := filepath.Join(tmpDir, "settings.json")
|
||||
|
||||
|
|
@ -155,7 +150,30 @@ func TestSettingsManager_SetMinerDefaults(t *testing.T) {
|
|||
settingsPath: settingsPath,
|
||||
}
|
||||
|
||||
defaults := MinerDefaults{
|
||||
if err := sm.SetCPUThrottle(true, 30); err != nil {
|
||||
t.Fatalf("Setup: failed to set initial throttle: %v", err)
|
||||
}
|
||||
|
||||
if err := sm.SetCPUThrottle(true, 150); err != nil {
|
||||
t.Fatalf("Expected no error on invalid percent, got: %v", err)
|
||||
}
|
||||
|
||||
settings := sm.Get()
|
||||
if settings.CPUThrottlePercent != 30 {
|
||||
t.Errorf("Expected CPUThrottlePercent to remain 30 after invalid input, got %d", settings.CPUThrottlePercent)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSettingsManager_SetMinerDefaults_Good(t *testing.T) {
|
||||
tmpDir := t.TempDir()
|
||||
settingsPath := filepath.Join(tmpDir, "settings.json")
|
||||
|
||||
sm := &SettingsManager{
|
||||
settings: DefaultSettings(),
|
||||
settingsPath: settingsPath,
|
||||
}
|
||||
|
||||
minerDefaults := MinerDefaults{
|
||||
DefaultPool: "stratum+tcp://pool.example.com:3333",
|
||||
DefaultWallet: "wallet123",
|
||||
DefaultAlgorithm: "rx/0",
|
||||
|
|
@ -163,7 +181,7 @@ func TestSettingsManager_SetMinerDefaults(t *testing.T) {
|
|||
CPUThrottleThreshold: 90,
|
||||
}
|
||||
|
||||
err := sm.SetMinerDefaults(defaults)
|
||||
err := sm.SetMinerDefaults(minerDefaults)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to set miner defaults: %v", err)
|
||||
}
|
||||
|
|
@ -177,7 +195,8 @@ func TestSettingsManager_SetMinerDefaults(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestSettingsManager_ConcurrentAccess(t *testing.T) {
|
||||
func TestSettingsManager_ConcurrentAccess_Ugly(t *testing.T) {
|
||||
// Ugly: concurrent reads and writes must not race or corrupt state.
|
||||
tmpDir := t.TempDir()
|
||||
settingsPath := filepath.Join(tmpDir, "settings.json")
|
||||
|
||||
|
|
@ -186,7 +205,6 @@ func TestSettingsManager_ConcurrentAccess(t *testing.T) {
|
|||
settingsPath: settingsPath,
|
||||
}
|
||||
|
||||
// Concurrent reads and writes
|
||||
done := make(chan bool)
|
||||
for i := 0; i < 10; i++ {
|
||||
go func(n int) {
|
||||
|
|
@ -198,12 +216,10 @@ func TestSettingsManager_ConcurrentAccess(t *testing.T) {
|
|||
}(i)
|
||||
}
|
||||
|
||||
// Wait for all goroutines
|
||||
for i := 0; i < 10; i++ {
|
||||
<-done
|
||||
}
|
||||
|
||||
// Should complete without race conditions
|
||||
state := sm.GetWindowState()
|
||||
if state.Width < 800 || state.Width > 900 {
|
||||
t.Errorf("Unexpected width after concurrent access: %d", state.Width)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue