From 82b2375058f7782d43a15f81be077b62e9cdb671 Mon Sep 17 00:00:00 2001 From: Virgil Date: Sun, 5 Apr 2026 03:19:28 +0000 Subject: [PATCH] fix(proxy): trim mode and worker identifiers Co-Authored-By: Virgil --- config_test.go | 33 +++++++++++++++++++++++++++++++++ core_impl.go | 6 +++--- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/config_test.go b/config_test.go index 9d7febb..910d09a 100644 --- a/config_test.go +++ b/config_test.go @@ -55,3 +55,36 @@ func TestConfig_Validate_NoEnabledPool_Good(t *testing.T) { t.Fatalf("expected config with no enabled pools to be valid, got error: %v", result.Error) } } + +func TestProxy_New_WhitespaceMode_Good(t *testing.T) { + originalFactory, hadFactory := splitterFactoryForMode("nicehash") + if hadFactory { + t.Cleanup(func() { + RegisterSplitterFactory("nicehash", originalFactory) + }) + } + + called := false + RegisterSplitterFactory("nicehash", func(*Config, *EventBus) Splitter { + called = true + return &noopSplitter{} + }) + + cfg := &Config{ + Mode: " nicehash ", + Workers: WorkersByRigID, + Bind: []BindAddr{{Host: "0.0.0.0", Port: 3333}}, + Pools: []PoolConfig{{URL: "pool.example:3333", Enabled: true}}, + } + + p, result := New(cfg) + if !result.OK { + t.Fatalf("expected whitespace-padded mode to remain valid, got error: %v", result.Error) + } + if !called { + t.Fatalf("expected trimmed mode lookup to invoke the registered splitter factory") + } + if _, ok := p.splitter.(*noopSplitter); !ok { + t.Fatalf("expected test splitter to be wired, got %#v", p.splitter) + } +} diff --git a/core_impl.go b/core_impl.go index 2bef061..cdc0428 100644 --- a/core_impl.go +++ b/core_impl.go @@ -46,13 +46,13 @@ var splitterFactoriesByMode = map[string]func(*Config, *EventBus) Splitter{} func RegisterSplitterFactory(mode string, factory func(*Config, *EventBus) Splitter) { splitterFactoriesMu.Lock() defer splitterFactoriesMu.Unlock() - splitterFactoriesByMode[strings.ToLower(mode)] = factory + splitterFactoriesByMode[strings.ToLower(strings.TrimSpace(mode))] = factory } func splitterFactoryForMode(mode string) (func(*Config, *EventBus) Splitter, bool) { splitterFactoriesMu.RLock() defer splitterFactoriesMu.RUnlock() - factory, ok := splitterFactoriesByMode[strings.ToLower(mode)] + factory, ok := splitterFactoriesByMode[strings.ToLower(strings.TrimSpace(mode))] return factory, ok } @@ -119,7 +119,7 @@ func isValidMode(mode string) bool { } func isValidWorkersMode(mode WorkersMode) bool { - switch mode { + switch WorkersMode(strings.TrimSpace(string(mode))) { case WorkersByRigID, WorkersByUser, WorkersByPass, WorkersByAgent, WorkersByIP, WorkersDisabled: return true default: