Files
XingfenD 4e467e1136 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
2026-08-10 16:54:30 +08:00

54 lines
1.0 KiB
Go

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