feat: implement proto-gen platform
- Config loader with env var expansion and validation - SQLite database with tasks and toolchain_versions tables - Gitea REST API client for repository and branch operations - K8s client for Job lifecycle management (with noop fallback for local dev) - REST API: tasks CRUD, retry, plugins, version management - Worker/scheduler with polling, concurrency control, and job tracking - Static frontend: generate, tasks, settings pages - Toolchain images: Go and Node.js Dockerfiles with entrypoint scripts - Helm chart with deployment, service, configmap, ingress, PVC - Multi-stage Dockerfile for service - Unit tests for config, database, gitclient, k8s, api, worker - E2E tests for idempotency, version switch, failure recovery
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
package worker
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"proto-gen/internal/config"
|
||||
"proto-gen/internal/database"
|
||||
"proto-gen/internal/k8s"
|
||||
)
|
||||
|
||||
func newTestScheduler(t *testing.T) (*Scheduler, *database.DB) {
|
||||
t.Helper()
|
||||
db, err := database.New(t.TempDir() + "/test.db")
|
||||
if err != nil {
|
||||
t.Fatalf("creating db: %v", err)
|
||||
}
|
||||
t.Cleanup(func() { db.Close() })
|
||||
|
||||
cfg := &config.Config{
|
||||
Cluster: config.ClusterConfig{
|
||||
Namespace: "test",
|
||||
JobTimeout: 300,
|
||||
MaxConcurrent: 2,
|
||||
},
|
||||
ToolchainRegistry: "registry.example.com",
|
||||
}
|
||||
|
||||
k8sClient := k8s.NewClientFromInterface(nil)
|
||||
scheduler := NewScheduler(db, k8sClient, cfg)
|
||||
scheduler.pollInterval = 100 * time.Millisecond
|
||||
|
||||
return scheduler, db
|
||||
}
|
||||
|
||||
func TestNewScheduler(t *testing.T) {
|
||||
scheduler, db := newTestScheduler(t)
|
||||
defer db.Close()
|
||||
|
||||
if scheduler.db == nil {
|
||||
t.Error("db is nil")
|
||||
}
|
||||
if scheduler.k8sClient == nil {
|
||||
t.Error("k8sClient is nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestProcessPendingTasks_Empty(t *testing.T) {
|
||||
scheduler, db := newTestScheduler(t)
|
||||
defer db.Close()
|
||||
|
||||
scheduler.processPendingTasks()
|
||||
}
|
||||
Reference in New Issue
Block a user