From cc5d8acd9228947e542f425e4fbd4b2fd56e650c Mon Sep 17 00:00:00 2001 From: LordMathis Date: Tue, 16 Sep 2025 21:45:50 +0200 Subject: [PATCH] Refactor instance and manager tests to use BackendConfig for LlamaExecutable and MLXLMExecutable --- pkg/config/config_test.go | 4 ++-- pkg/instance/instance_test.go | 42 +++++++++++++++++++++++++++++----- pkg/instance/timeout_test.go | 42 +++++++++++++++++++++++++++++----- pkg/manager/manager_test.go | 23 +++++++++++++++---- pkg/manager/operations_test.go | 6 ++++- pkg/manager/timeout_test.go | 6 ++++- 6 files changed, 103 insertions(+), 20 deletions(-) diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 2596dac..5d40844 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -156,8 +156,8 @@ func TestLoadConfig_EnvironmentOverrides(t *testing.T) { if cfg.Instances.MaxInstances != 20 { t.Errorf("Expected max instances 20, got %d", cfg.Instances.MaxInstances) } - if cfg.Instances.LlamaExecutable != "/env/llama-server" { - t.Errorf("Expected executable '/env/llama-server', got %q", cfg.Instances.LlamaExecutable) + if cfg.Backends.LlamaExecutable != "/env/llama-server" { + t.Errorf("Expected executable '/env/llama-server', got %q", cfg.Backends.LlamaExecutable) } if cfg.Instances.DefaultAutoRestart { t.Error("Expected auto restart to be false") diff --git a/pkg/instance/instance_test.go b/pkg/instance/instance_test.go index aa916b9..9ce2d61 100644 --- a/pkg/instance/instance_test.go +++ b/pkg/instance/instance_test.go @@ -11,6 +11,11 @@ import ( ) func TestNewInstance(t *testing.T) { + backendConfig := &config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + globalSettings := &config.InstancesConfig{ LogsDir: "/tmp/test", DefaultAutoRestart: true, @@ -29,7 +34,7 @@ func TestNewInstance(t *testing.T) { // Mock onStatusChange function mockOnStatusChange := func(oldStatus, newStatus instance.InstanceStatus) {} - inst := instance.NewInstance("test-instance", globalSettings, options, mockOnStatusChange) + inst := instance.NewInstance("test-instance", backendConfig, globalSettings, options, mockOnStatusChange) if inst.Name != "test-instance" { t.Errorf("Expected name 'test-instance', got %q", inst.Name) @@ -60,6 +65,11 @@ func TestNewInstance(t *testing.T) { } func TestNewInstance_WithRestartOptions(t *testing.T) { + backendConfig := &config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + globalSettings := &config.InstancesConfig{ LogsDir: "/tmp/test", DefaultAutoRestart: true, @@ -85,7 +95,7 @@ func TestNewInstance_WithRestartOptions(t *testing.T) { // Mock onStatusChange function mockOnStatusChange := func(oldStatus, newStatus instance.InstanceStatus) {} - instance := instance.NewInstance("test-instance", globalSettings, options, mockOnStatusChange) + instance := instance.NewInstance("test-instance", backendConfig, globalSettings, options, mockOnStatusChange) opts := instance.GetOptions() // Check that explicit values override defaults @@ -101,6 +111,11 @@ func TestNewInstance_WithRestartOptions(t *testing.T) { } func TestSetOptions(t *testing.T) { + backendConfig := &config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + globalSettings := &config.InstancesConfig{ LogsDir: "/tmp/test", DefaultAutoRestart: true, @@ -119,7 +134,7 @@ func TestSetOptions(t *testing.T) { // Mock onStatusChange function mockOnStatusChange := func(oldStatus, newStatus instance.InstanceStatus) {} - inst := instance.NewInstance("test-instance", globalSettings, initialOptions, mockOnStatusChange) + inst := instance.NewInstance("test-instance", backendConfig, globalSettings, initialOptions, mockOnStatusChange) // Update options newOptions := &instance.CreateInstanceOptions{ @@ -147,6 +162,11 @@ func TestSetOptions(t *testing.T) { } func TestGetProxy(t *testing.T) { + backendConfig := &config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + globalSettings := &config.InstancesConfig{ LogsDir: "/tmp/test", } @@ -162,7 +182,7 @@ func TestGetProxy(t *testing.T) { // Mock onStatusChange function mockOnStatusChange := func(oldStatus, newStatus instance.InstanceStatus) {} - inst := instance.NewInstance("test-instance", globalSettings, options, mockOnStatusChange) + inst := instance.NewInstance("test-instance", backendConfig, globalSettings, options, mockOnStatusChange) // Get proxy for the first time proxy1, err := inst.GetProxy() @@ -184,6 +204,11 @@ func TestGetProxy(t *testing.T) { } func TestMarshalJSON(t *testing.T) { + backendConfig := &config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + globalSettings := &config.InstancesConfig{ LogsDir: "/tmp/test", DefaultAutoRestart: true, @@ -202,7 +227,7 @@ func TestMarshalJSON(t *testing.T) { // Mock onStatusChange function mockOnStatusChange := func(oldStatus, newStatus instance.InstanceStatus) {} - instance := instance.NewInstance("test-instance", globalSettings, options, mockOnStatusChange) + instance := instance.NewInstance("test-instance", backendConfig, globalSettings, options, mockOnStatusChange) data, err := json.Marshal(instance) if err != nil { @@ -338,6 +363,11 @@ func TestCreateInstanceOptionsValidation(t *testing.T) { }, } + backendConfig := &config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + globalSettings := &config.InstancesConfig{ LogsDir: "/tmp/test", } @@ -356,7 +386,7 @@ func TestCreateInstanceOptionsValidation(t *testing.T) { // Mock onStatusChange function mockOnStatusChange := func(oldStatus, newStatus instance.InstanceStatus) {} - instance := instance.NewInstance("test", globalSettings, options, mockOnStatusChange) + instance := instance.NewInstance("test", backendConfig, globalSettings, options, mockOnStatusChange) opts := instance.GetOptions() if opts.MaxRestarts == nil { diff --git a/pkg/instance/timeout_test.go b/pkg/instance/timeout_test.go index c791bfb..21e3584 100644 --- a/pkg/instance/timeout_test.go +++ b/pkg/instance/timeout_test.go @@ -33,6 +33,11 @@ func (m *MockTimeProvider) SetTime(t time.Time) { // Timeout-related tests func TestUpdateLastRequestTime(t *testing.T) { + backendConfig := &config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + globalSettings := &config.InstancesConfig{ LogsDir: "/tmp/test", } @@ -47,13 +52,18 @@ func TestUpdateLastRequestTime(t *testing.T) { // Mock onStatusChange function mockOnStatusChange := func(oldStatus, newStatus instance.InstanceStatus) {} - inst := instance.NewInstance("test-instance", globalSettings, options, mockOnStatusChange) + inst := instance.NewInstance("test-instance", backendConfig, globalSettings, options, mockOnStatusChange) // Test that UpdateLastRequestTime doesn't panic inst.UpdateLastRequestTime() } func TestShouldTimeout_NotRunning(t *testing.T) { + backendConfig := &config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + globalSettings := &config.InstancesConfig{ LogsDir: "/tmp/test", } @@ -70,7 +80,7 @@ func TestShouldTimeout_NotRunning(t *testing.T) { // Mock onStatusChange function mockOnStatusChange := func(oldStatus, newStatus instance.InstanceStatus) {} - inst := instance.NewInstance("test-instance", globalSettings, options, mockOnStatusChange) + inst := instance.NewInstance("test-instance", backendConfig, globalSettings, options, mockOnStatusChange) // Instance is not running, should not timeout regardless of configuration if inst.ShouldTimeout() { @@ -79,6 +89,11 @@ func TestShouldTimeout_NotRunning(t *testing.T) { } func TestShouldTimeout_NoTimeoutConfigured(t *testing.T) { + backendConfig := &config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + globalSettings := &config.InstancesConfig{ LogsDir: "/tmp/test", } @@ -105,7 +120,7 @@ func TestShouldTimeout_NoTimeoutConfigured(t *testing.T) { }, } - inst := instance.NewInstance("test-instance", globalSettings, options, mockOnStatusChange) + inst := instance.NewInstance("test-instance", backendConfig, globalSettings, options, mockOnStatusChange) // Simulate running state inst.SetStatus(instance.Running) @@ -117,6 +132,11 @@ func TestShouldTimeout_NoTimeoutConfigured(t *testing.T) { } func TestShouldTimeout_WithinTimeLimit(t *testing.T) { + backendConfig := &config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + globalSettings := &config.InstancesConfig{ LogsDir: "/tmp/test", } @@ -133,7 +153,7 @@ func TestShouldTimeout_WithinTimeLimit(t *testing.T) { // Mock onStatusChange function mockOnStatusChange := func(oldStatus, newStatus instance.InstanceStatus) {} - inst := instance.NewInstance("test-instance", globalSettings, options, mockOnStatusChange) + inst := instance.NewInstance("test-instance", backendConfig, globalSettings, options, mockOnStatusChange) inst.SetStatus(instance.Running) // Update last request time to now @@ -146,6 +166,11 @@ func TestShouldTimeout_WithinTimeLimit(t *testing.T) { } func TestShouldTimeout_ExceedsTimeLimit(t *testing.T) { + backendConfig := &config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + globalSettings := &config.InstancesConfig{ LogsDir: "/tmp/test", } @@ -162,7 +187,7 @@ func TestShouldTimeout_ExceedsTimeLimit(t *testing.T) { // Mock onStatusChange function mockOnStatusChange := func(oldStatus, newStatus instance.InstanceStatus) {} - inst := instance.NewInstance("test-instance", globalSettings, options, mockOnStatusChange) + inst := instance.NewInstance("test-instance", backendConfig, globalSettings, options, mockOnStatusChange) inst.SetStatus(instance.Running) // Use MockTimeProvider to simulate old last request time @@ -181,6 +206,11 @@ func TestShouldTimeout_ExceedsTimeLimit(t *testing.T) { } func TestTimeoutConfiguration_Validation(t *testing.T) { + backendConfig := &config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + globalSettings := &config.InstancesConfig{ LogsDir: "/tmp/test", } @@ -209,7 +239,7 @@ func TestTimeoutConfiguration_Validation(t *testing.T) { // Mock onStatusChange function mockOnStatusChange := func(oldStatus, newStatus instance.InstanceStatus) {} - inst := instance.NewInstance("test-instance", globalSettings, options, mockOnStatusChange) + inst := instance.NewInstance("test-instance", backendConfig, globalSettings, options, mockOnStatusChange) opts := inst.GetOptions() if opts.IdleTimeout == nil || *opts.IdleTimeout != tt.expectedTimeout { diff --git a/pkg/manager/manager_test.go b/pkg/manager/manager_test.go index c332739..20fcfa6 100644 --- a/pkg/manager/manager_test.go +++ b/pkg/manager/manager_test.go @@ -15,6 +15,11 @@ import ( ) func TestNewInstanceManager(t *testing.T) { + backendConfig := config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + cfg := config.InstancesConfig{ PortRange: [2]int{8000, 9000}, LogsDir: "/tmp/test", @@ -26,7 +31,7 @@ func TestNewInstanceManager(t *testing.T) { TimeoutCheckInterval: 5, } - mgr := manager.NewInstanceManager(cfg) + mgr := manager.NewInstanceManager(backendConfig, cfg) if mgr == nil { t.Fatal("NewInstanceManager returned nil") } @@ -44,6 +49,11 @@ func TestNewInstanceManager(t *testing.T) { func TestPersistence(t *testing.T) { tempDir := t.TempDir() + backendConfig := config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + cfg := config.InstancesConfig{ PortRange: [2]int{8000, 9000}, InstancesDir: tempDir, @@ -52,7 +62,7 @@ func TestPersistence(t *testing.T) { } // Test instance persistence on creation - manager1 := manager.NewInstanceManager(cfg) + manager1 := manager.NewInstanceManager(backendConfig, cfg) options := &instance.CreateInstanceOptions{ BackendType: backends.BackendTypeLlamaCpp, LlamaServerOptions: &llamacpp.LlamaServerOptions{ @@ -73,7 +83,7 @@ func TestPersistence(t *testing.T) { } // Test loading instances from disk - manager2 := manager.NewInstanceManager(cfg) + manager2 := manager.NewInstanceManager(backendConfig, cfg) instances, err := manager2.ListInstances() if err != nil { t.Fatalf("ListInstances failed: %v", err) @@ -172,6 +182,11 @@ func TestShutdown(t *testing.T) { // Helper function to create a test manager with standard config func createTestManager() manager.InstanceManager { + backendConfig := config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } + cfg := config.InstancesConfig{ PortRange: [2]int{8000, 9000}, LogsDir: "/tmp/test", @@ -182,5 +197,5 @@ func createTestManager() manager.InstanceManager { DefaultRestartDelay: 5, TimeoutCheckInterval: 5, } - return manager.NewInstanceManager(cfg) + return manager.NewInstanceManager(backendConfig, cfg) } diff --git a/pkg/manager/operations_test.go b/pkg/manager/operations_test.go index 7dd4889..87c37d4 100644 --- a/pkg/manager/operations_test.go +++ b/pkg/manager/operations_test.go @@ -62,12 +62,16 @@ func TestCreateInstance_ValidationAndLimits(t *testing.T) { } // Test max instances limit + backendConfig := config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } cfg := config.InstancesConfig{ PortRange: [2]int{8000, 9000}, MaxInstances: 1, // Very low limit for testing TimeoutCheckInterval: 5, } - limitedManager := manager.NewInstanceManager(cfg) + limitedManager := manager.NewInstanceManager(backendConfig, cfg) _, err = limitedManager.CreateInstance("instance1", options) if err != nil { diff --git a/pkg/manager/timeout_test.go b/pkg/manager/timeout_test.go index 23143d2..91b3ad7 100644 --- a/pkg/manager/timeout_test.go +++ b/pkg/manager/timeout_test.go @@ -13,13 +13,17 @@ import ( func TestTimeoutFunctionality(t *testing.T) { // Test timeout checker initialization + backendConfig := config.BackendConfig{ + LlamaExecutable: "llama-server", + MLXLMExecutable: "mlx_lm.server", + } cfg := config.InstancesConfig{ PortRange: [2]int{8000, 9000}, TimeoutCheckInterval: 10, MaxInstances: 5, } - manager := manager.NewInstanceManager(cfg) + manager := manager.NewInstanceManager(backendConfig, cfg) if manager == nil { t.Fatal("Manager should be initialized with timeout checker") }