Move unit tests from tests/unit/scheduler/ to internal/scheduler/ following Go conventions: - capability_routing_test.go - Worker capability-based job routing tests - failure_scenarios_test.go - Scheduler failure handling and recovery tests - heartbeat_test.go - Worker heartbeat monitoring tests - plugin_quota_test.go - Plugin resource quota enforcement tests - port_allocator_test.go - Dynamic port allocation for services tests - priority_queue_test.go - Job priority queue implementation tests - service_templates_test.go - Service template management tests - state_store_test.go - Scheduler state persistence tests Note: orphan_recovery_test.go excluded from this commit - will be handled with hub refactoring due to significant test changes.
67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
package scheduler_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/jfraeys/fetch_ml/internal/scheduler"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestStateStore_BasicOperations(t *testing.T) {
|
|
dir := t.TempDir()
|
|
ss, err := scheduler.NewStateStore(dir + "/state.json")
|
|
require.NoError(t, err)
|
|
|
|
// Append some events
|
|
events := []scheduler.StateEvent{
|
|
{Type: scheduler.EventJobEnqueued, TaskID: "task-1", Timestamp: time.Now()},
|
|
{Type: scheduler.EventJobAssigned, TaskID: "task-1", WorkerID: "worker-1", Timestamp: time.Now()},
|
|
{Type: scheduler.EventJobCompleted, TaskID: "task-1", WorkerID: "worker-1", Timestamp: time.Now()},
|
|
}
|
|
|
|
for _, e := range events {
|
|
err := ss.Append(e)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
// Replay events
|
|
replayed, err := ss.Replay()
|
|
require.NoError(t, err)
|
|
assert.Len(t, replayed, 3)
|
|
assert.Equal(t, "task-1", replayed[0].TaskID)
|
|
}
|
|
|
|
func TestStateStore_Persistence(t *testing.T) {
|
|
dir := t.TempDir()
|
|
|
|
// Create store and append events
|
|
ss1, err := scheduler.NewStateStore(dir + "/state.json")
|
|
require.NoError(t, err)
|
|
event := scheduler.StateEvent{
|
|
Type: scheduler.EventJobEnqueued,
|
|
TaskID: "persistent-task",
|
|
Timestamp: time.Now(),
|
|
}
|
|
err = ss1.Append(event)
|
|
require.NoError(t, err)
|
|
|
|
// Create new store instance pointing to same directory
|
|
ss2, err := scheduler.NewStateStore(dir + "/state.json")
|
|
require.NoError(t, err)
|
|
replayed, err := ss2.Replay()
|
|
require.NoError(t, err)
|
|
assert.Len(t, replayed, 1)
|
|
assert.Equal(t, "persistent-task", replayed[0].TaskID)
|
|
}
|
|
|
|
func TestStateStore_ReplayEmpty(t *testing.T) {
|
|
dir := t.TempDir()
|
|
ss, err := scheduler.NewStateStore(dir + "/state.json")
|
|
require.NoError(t, err)
|
|
|
|
replayed, err := ss.Replay()
|
|
require.NoError(t, err)
|
|
assert.Empty(t, replayed)
|
|
}
|