- ControlPlane 라우터에 워커/에이전트 구독 채널을 추가한다 - ProtoSocket 기반 실시간 양방향 채널( dispatcher, envelope, server)을 구현한다 - Forgejo push 이벤트를 provider 어댑터로 처리하도록 연동한다 - PostgreSQL 스토리지 백엔드를 분리하여 postgres.go로 신설한다 - Git engine command에 diff/checkout/merge 연쇄 연산을 추가한다 - 런타임 모델에 agentSession, runtimeChannel 스키마를 추가한다 - 데이터베이스 마이그레이션에 agent_session, runtime_channel, lease 테이블을 추가한다 - agent-contract에 Forgejo branch events 계약 문서를 작성한다 - 로드맵 마일스톤과 아카이브 작업을 갱신한다
66 lines
2 KiB
Go
66 lines
2 KiB
Go
package config
|
|
|
|
import "testing"
|
|
|
|
func TestLoadDefaults(t *testing.T) {
|
|
t.Setenv("APP_ENV", "")
|
|
t.Setenv("HTTP_ADDR", "")
|
|
t.Setenv("PROTO_SOCKET_PATH", "")
|
|
t.Setenv("PROTO_SOCKET_HEARTBEAT_SEC", "")
|
|
t.Setenv("PROTO_SOCKET_HEARTBEAT_WAIT_SEC", "")
|
|
t.Setenv("FORGEJO_WEBHOOK_SECRET", "")
|
|
|
|
cfg := Load()
|
|
if cfg.AppEnv != "local" {
|
|
t.Fatalf("AppEnv: got %q, want local", cfg.AppEnv)
|
|
}
|
|
if cfg.HTTPAddr != ":8080" {
|
|
t.Fatalf("HTTPAddr: got %q, want :8080", cfg.HTTPAddr)
|
|
}
|
|
if cfg.ProtoSocketPath != "/proto-socket" {
|
|
t.Fatalf("ProtoSocketPath: got %q, want /proto-socket", cfg.ProtoSocketPath)
|
|
}
|
|
if cfg.ProtoSocketHeartbeatSec != 30 {
|
|
t.Fatalf("ProtoSocketHeartbeatSec: got %d, want 30", cfg.ProtoSocketHeartbeatSec)
|
|
}
|
|
if cfg.ProtoSocketHeartbeatWait != 10 {
|
|
t.Fatalf("ProtoSocketHeartbeatWait: got %d, want 10", cfg.ProtoSocketHeartbeatWait)
|
|
}
|
|
if cfg.ForgejoWebhookSecret != "" {
|
|
t.Fatalf("ForgejoWebhookSecret should default empty")
|
|
}
|
|
if !cfg.WorkerEnabled {
|
|
t.Fatal("WorkerEnabled default should be true")
|
|
}
|
|
}
|
|
|
|
func TestLoadEnvOverrides(t *testing.T) {
|
|
t.Setenv("APP_ENV", "test")
|
|
t.Setenv("HTTP_ADDR", ":18080")
|
|
t.Setenv("PROTO_SOCKET_PATH", "/gito")
|
|
t.Setenv("PROTO_SOCKET_HEARTBEAT_SEC", "5")
|
|
t.Setenv("PROTO_SOCKET_HEARTBEAT_WAIT_SEC", "2")
|
|
t.Setenv("FORGEJO_WEBHOOK_SECRET", "secret-ref-value")
|
|
t.Setenv("WORKER_ENABLED", "false")
|
|
t.Setenv("GITO_SHELL_ID", "runner-1")
|
|
|
|
cfg := Load()
|
|
if cfg.AppEnv != "test" || cfg.HTTPAddr != ":18080" {
|
|
t.Fatalf("unexpected config: %+v", cfg)
|
|
}
|
|
if cfg.ProtoSocketPath != "/gito" {
|
|
t.Fatalf("ProtoSocketPath: got %q", cfg.ProtoSocketPath)
|
|
}
|
|
if cfg.ProtoSocketHeartbeatSec != 5 || cfg.ProtoSocketHeartbeatWait != 2 {
|
|
t.Fatalf("unexpected proto-socket heartbeat config: %+v", cfg)
|
|
}
|
|
if cfg.ForgejoWebhookSecret != "secret-ref-value" {
|
|
t.Fatalf("ForgejoWebhookSecret: got %q", cfg.ForgejoWebhookSecret)
|
|
}
|
|
if cfg.WorkerEnabled {
|
|
t.Fatal("WorkerEnabled should be false")
|
|
}
|
|
if cfg.ShellID != "runner-1" {
|
|
t.Fatalf("ShellID: got %q", cfg.ShellID)
|
|
}
|
|
}
|