fetch_ml/internal/scheduler/state_store_test.go
Jeremie Fraeys 74e06017b5
refactor: co-locate scheduler non-hub tests with source code
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.
2026-03-12 16:36:29 -04:00

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)
}