- agent-readable-repository-refactor 완료: 기존 테스트 파일 아카이브 이동 - 새 테스트 파일 추가 (edge, node, client, config, readability) - readability_audit 스크립트 및 baseline 추가 - roadmap/SDD 문서 갱신 - agent-client/pi/extensions/openai-sampling-parameters 추가
229 lines
6.7 KiB
Go
229 lines
6.7 KiB
Go
package config_test
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"iop/packages/go/config"
|
|
)
|
|
|
|
func TestEdgeRefreshDefaults(t *testing.T) {
|
|
dir := t.TempDir()
|
|
f := filepath.Join(dir, "edge.yaml")
|
|
if err := os.WriteFile(f, []byte("server:\n listen: \"0.0.0.0:9090\"\n"), 0o600); err != nil {
|
|
t.Fatalf("write yaml: %v", err)
|
|
}
|
|
cfg, err := config.LoadEdge(f)
|
|
if err != nil {
|
|
t.Fatalf("load: %v", err)
|
|
}
|
|
if cfg.Refresh.Enabled {
|
|
t.Fatalf("expected refresh.enabled=false by default, got true")
|
|
}
|
|
if cfg.Refresh.Listen != "127.0.0.1:19093" {
|
|
t.Fatalf("expected refresh.listen=%q by default, got %q", "127.0.0.1:19093", cfg.Refresh.Listen)
|
|
}
|
|
}
|
|
|
|
func TestEdgeRefreshUnmarshal(t *testing.T) {
|
|
dir := t.TempDir()
|
|
f := filepath.Join(dir, "edge.yaml")
|
|
yaml := "server:\n listen: \"0.0.0.0:9090\"\nrefresh:\n enabled: true\n listen: \"127.0.0.1:0\"\n"
|
|
if err := os.WriteFile(f, []byte(yaml), 0o600); err != nil {
|
|
t.Fatalf("write yaml: %v", err)
|
|
}
|
|
cfg, err := config.LoadEdge(f)
|
|
if err != nil {
|
|
t.Fatalf("load: %v", err)
|
|
}
|
|
if !cfg.Refresh.Enabled {
|
|
t.Fatalf("expected refresh.enabled=true")
|
|
}
|
|
if cfg.Refresh.Listen != "127.0.0.1:0" {
|
|
t.Fatalf("expected refresh.listen=%q, got %q", "127.0.0.1:0", cfg.Refresh.Listen)
|
|
}
|
|
}
|
|
|
|
func TestLoadEdge_AdvertiseHostAndArtifactDefaultsEmpty(t *testing.T) {
|
|
dir := t.TempDir()
|
|
f := filepath.Join(dir, "edge.yaml")
|
|
if err := os.WriteFile(f, []byte("server:\n listen: \"0.0.0.0:9090\"\n"), 0o600); err != nil {
|
|
t.Fatalf("write yaml: %v", err)
|
|
}
|
|
cfg, err := config.LoadEdge(f)
|
|
if err != nil {
|
|
t.Fatalf("load: %v", err)
|
|
}
|
|
if cfg.Server.AdvertiseHost != "" {
|
|
t.Errorf("expected empty server.advertise_host by default, got %q", cfg.Server.AdvertiseHost)
|
|
}
|
|
if cfg.Bootstrap.ArtifactBaseURL != "" {
|
|
t.Errorf("expected empty bootstrap.artifact_base_url by default, got %q", cfg.Bootstrap.ArtifactBaseURL)
|
|
}
|
|
if cfg.Logging.Path != "" {
|
|
t.Errorf("expected empty logging.path by default, got %q", cfg.Logging.Path)
|
|
}
|
|
}
|
|
|
|
func TestLoadEdge_AdvertiseHostAndArtifactExplicit(t *testing.T) {
|
|
dir := t.TempDir()
|
|
f := filepath.Join(dir, "edge.yaml")
|
|
yaml := `server:
|
|
listen: "0.0.0.0:9090"
|
|
advertise_host: "edge.example.test"
|
|
bootstrap:
|
|
artifact_base_url: "http://edge.example.test:18080"
|
|
logging:
|
|
path: "/var/log/iop/edge.log"
|
|
`
|
|
if err := os.WriteFile(f, []byte(yaml), 0o600); err != nil {
|
|
t.Fatalf("write yaml: %v", err)
|
|
}
|
|
cfg, err := config.LoadEdge(f)
|
|
if err != nil {
|
|
t.Fatalf("load: %v", err)
|
|
}
|
|
if cfg.Server.AdvertiseHost != "edge.example.test" {
|
|
t.Errorf("server.advertise_host=%q", cfg.Server.AdvertiseHost)
|
|
}
|
|
if cfg.Bootstrap.ArtifactBaseURL != "http://edge.example.test:18080" {
|
|
t.Errorf("bootstrap.artifact_base_url=%q", cfg.Bootstrap.ArtifactBaseURL)
|
|
}
|
|
if cfg.Logging.Path != "/var/log/iop/edge.log" {
|
|
t.Errorf("logging.path=%q", cfg.Logging.Path)
|
|
}
|
|
}
|
|
|
|
func TestLoadEdge_A2ADefaults(t *testing.T) {
|
|
dir := t.TempDir()
|
|
f := filepath.Join(dir, "edge.yaml")
|
|
if err := os.WriteFile(f, []byte("server:\n listen: \"0.0.0.0:9090\"\n"), 0o600); err != nil {
|
|
t.Fatalf("write yaml: %v", err)
|
|
}
|
|
cfg, err := config.LoadEdge(f)
|
|
if err != nil {
|
|
t.Fatalf("load: %v", err)
|
|
}
|
|
if cfg.A2A.Enabled {
|
|
t.Fatal("expected a2a.enabled=false by default")
|
|
}
|
|
if cfg.A2A.Listen != "0.0.0.0:8081" {
|
|
t.Fatalf("expected a2a.listen default, got %q", cfg.A2A.Listen)
|
|
}
|
|
if cfg.A2A.Path != "/a2a" {
|
|
t.Fatalf("expected a2a.path=%q, got %q", "/a2a", cfg.A2A.Path)
|
|
}
|
|
if cfg.A2A.Adapter != "cli" {
|
|
t.Fatalf("expected a2a.adapter=%q, got %q", "cli", cfg.A2A.Adapter)
|
|
}
|
|
if cfg.A2A.SessionID != "a2a" {
|
|
t.Fatalf("expected a2a.session_id=%q, got %q", "a2a", cfg.A2A.SessionID)
|
|
}
|
|
if cfg.A2A.TimeoutSec != 120 {
|
|
t.Fatalf("expected a2a.timeout_sec=120, got %d", cfg.A2A.TimeoutSec)
|
|
}
|
|
if cfg.A2A.BearerToken != "" {
|
|
t.Fatalf("expected a2a.bearer_token empty by default, got %q", cfg.A2A.BearerToken)
|
|
}
|
|
}
|
|
|
|
func TestLoadEdge_A2AOverride(t *testing.T) {
|
|
dir := t.TempDir()
|
|
f := filepath.Join(dir, "edge.yaml")
|
|
yaml := `
|
|
server:
|
|
listen: "0.0.0.0:9090"
|
|
a2a:
|
|
enabled: true
|
|
listen: "127.0.0.1:8082"
|
|
path: "/agent"
|
|
node: "node0"
|
|
adapter: "cli"
|
|
target: "claude"
|
|
session_id: "nomad"
|
|
timeout_sec: 60
|
|
bearer_token: "secret-token"
|
|
`
|
|
if err := os.WriteFile(f, []byte(yaml), 0o600); err != nil {
|
|
t.Fatalf("write yaml: %v", err)
|
|
}
|
|
cfg, err := config.LoadEdge(f)
|
|
if err != nil {
|
|
t.Fatalf("load: %v", err)
|
|
}
|
|
if !cfg.A2A.Enabled {
|
|
t.Fatal("expected a2a.enabled=true")
|
|
}
|
|
if cfg.A2A.Listen != "127.0.0.1:8082" {
|
|
t.Fatalf("expected a2a.listen=%q, got %q", "127.0.0.1:8082", cfg.A2A.Listen)
|
|
}
|
|
if cfg.A2A.Path != "/agent" {
|
|
t.Fatalf("expected a2a.path=%q, got %q", "/agent", cfg.A2A.Path)
|
|
}
|
|
if cfg.A2A.NodeRef != "node0" {
|
|
t.Fatalf("expected a2a.node=%q, got %q", "node0", cfg.A2A.NodeRef)
|
|
}
|
|
if cfg.A2A.Target != "claude" {
|
|
t.Fatalf("expected a2a.target=%q, got %q", "claude", cfg.A2A.Target)
|
|
}
|
|
if cfg.A2A.SessionID != "nomad" {
|
|
t.Fatalf("expected a2a.session_id=%q, got %q", "nomad", cfg.A2A.SessionID)
|
|
}
|
|
if cfg.A2A.TimeoutSec != 60 {
|
|
t.Fatalf("expected a2a.timeout_sec=60, got %d", cfg.A2A.TimeoutSec)
|
|
}
|
|
if cfg.A2A.BearerToken != "secret-token" {
|
|
t.Fatalf("expected a2a.bearer_token=%q, got %q", "secret-token", cfg.A2A.BearerToken)
|
|
}
|
|
}
|
|
|
|
func TestLoadEdge_ControlPlaneDefaults(t *testing.T) {
|
|
dir := t.TempDir()
|
|
f := filepath.Join(dir, "edge.yaml")
|
|
if err := os.WriteFile(f, []byte("server:\n listen: \"0.0.0.0:9090\"\n"), 0o600); err != nil {
|
|
t.Fatalf("write yaml: %v", err)
|
|
}
|
|
cfg, err := config.LoadEdge(f)
|
|
if err != nil {
|
|
t.Fatalf("load: %v", err)
|
|
}
|
|
if cfg.ControlPlane.Enabled {
|
|
t.Fatal("expected control_plane.enabled=false by default")
|
|
}
|
|
if cfg.ControlPlane.WireAddr != "" {
|
|
t.Fatalf("expected control_plane.wire_addr empty by default, got %q", cfg.ControlPlane.WireAddr)
|
|
}
|
|
if cfg.ControlPlane.ReconnectIntervalSec != 5 {
|
|
t.Fatalf("expected control_plane.reconnect_interval_sec=5, got %d", cfg.ControlPlane.ReconnectIntervalSec)
|
|
}
|
|
}
|
|
|
|
func TestLoadEdge_ControlPlaneOverride(t *testing.T) {
|
|
dir := t.TempDir()
|
|
f := filepath.Join(dir, "edge.yaml")
|
|
yaml := `
|
|
server:
|
|
listen: "0.0.0.0:9090"
|
|
control_plane:
|
|
enabled: true
|
|
wire_addr: "cp.example.test:7070"
|
|
reconnect_interval_sec: 10
|
|
`
|
|
if err := os.WriteFile(f, []byte(yaml), 0o600); err != nil {
|
|
t.Fatalf("write yaml: %v", err)
|
|
}
|
|
cfg, err := config.LoadEdge(f)
|
|
if err != nil {
|
|
t.Fatalf("load: %v", err)
|
|
}
|
|
if !cfg.ControlPlane.Enabled {
|
|
t.Fatal("expected control_plane.enabled=true")
|
|
}
|
|
if cfg.ControlPlane.WireAddr != "cp.example.test:7070" {
|
|
t.Fatalf("expected control_plane.wire_addr=%q, got %q", "cp.example.test:7070", cfg.ControlPlane.WireAddr)
|
|
}
|
|
if cfg.ControlPlane.ReconnectIntervalSec != 10 {
|
|
t.Fatalf("expected control_plane.reconnect_interval_sec=10, got %d", cfg.ControlPlane.ReconnectIntervalSec)
|
|
}
|
|
}
|