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

81 lines
2.0 KiB
Go

package k8s
import (
"testing"
batchv1 "k8s.io/api/batch/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes/fake"
)
func TestCreateJob(t *testing.T) {
clientset := fake.NewSimpleClientset()
client := NewClientFromInterface(clientset)
job, err := client.CreateJob(&JobSpec{
Name: "test-job",
Namespace: "default",
Image: "test-image:v1",
EnvVars: map[string]string{"KEY": "value"},
TimeoutSecond: 300,
})
if err != nil {
t.Fatalf("CreateJob: %v", err)
}
if job.Name != "test-job" {
t.Errorf("Name = %q, want %q", job.Name, "test-job")
}
if job.Status != JobPending {
t.Errorf("Status = %q, want %q", job.Status, JobPending)
}
}
func TestGetJob(t *testing.T) {
clientset := fake.NewSimpleClientset(&batchv1.Job{
ObjectMeta: metav1.ObjectMeta{Name: "done-job", Namespace: "default"},
Status: batchv1.JobStatus{Succeeded: 1},
})
client := NewClientFromInterface(clientset)
job, err := client.GetJob("done-job", "default")
if err != nil {
t.Fatalf("GetJob: %v", err)
}
if job.Status != JobSucceeded {
t.Errorf("Status = %q, want %q", job.Status, JobSucceeded)
}
}
func TestGetJob_Running(t *testing.T) {
clientset := fake.NewSimpleClientset(&batchv1.Job{
ObjectMeta: metav1.ObjectMeta{Name: "run-job", Namespace: "default"},
Status: batchv1.JobStatus{Active: 1},
})
client := NewClientFromInterface(clientset)
job, err := client.GetJob("run-job", "default")
if err != nil {
t.Fatalf("GetJob: %v", err)
}
if job.Status != JobRunning {
t.Errorf("Status = %q, want %q", job.Status, JobRunning)
}
}
func TestDeleteJob(t *testing.T) {
clientset := fake.NewSimpleClientset(&batchv1.Job{
ObjectMeta: metav1.ObjectMeta{Name: "del-job", Namespace: "default"},
})
client := NewClientFromInterface(clientset)
err := client.DeleteJob("del-job", "default")
if err != nil {
t.Fatalf("DeleteJob: %v", err)
}
_, err = clientset.BatchV1().Jobs("default").Get(nil, "del-job", metav1.GetOptions{})
if err == nil {
t.Error("expected error getting deleted job")
}
}