98 lines
3.6 KiB
Go
98 lines
3.6 KiB
Go
package cli
|
||
|
||
import (
|
||
"bytes"
|
||
"context"
|
||
"path/filepath"
|
||
"strings"
|
||
"testing"
|
||
)
|
||
|
||
func TestAgentFlags(t *testing.T) {
|
||
cfg, err := parseAgentFlags(nil, &bytes.Buffer{}, noEnv)
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
if cfg.DataDir != "./suldata" || cfg.DockerSocket != "/var/run/docker.sock" || cfg.ServerURL != "" || cfg.Token != "" ||
|
||
cfg.ConfigDir != "/etc/sultan.d" {
|
||
t.Errorf("Defaults: %+v", cfg)
|
||
}
|
||
cfg, err = parseAgentFlags([]string{
|
||
"--server=https://ingress:8443", "--token", "sltn_enroll_x.y", "--data-dir=/srv/sul",
|
||
"--node-id=pi", "--docker-socket=none", "--backend-host=100.64.0.42", "--backend-interface=wt0",
|
||
"--config-dir=/srv/sultan.d", "--fqdn=webdocker11.lan.r25dc.de",
|
||
}, &bytes.Buffer{}, noEnv)
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
if cfg.ServerURL != "https://ingress:8443" || cfg.Token != "sltn_enroll_x.y" || cfg.DataDir != "/srv/sul" ||
|
||
cfg.NodeID != "pi" || cfg.DockerSocket != "none" || cfg.BackendHost != "100.64.0.42" || cfg.BackendInterface != "wt0" ||
|
||
cfg.ConfigDir != "/srv/sultan.d" || cfg.FQDN != "webdocker11.lan.r25dc.de" {
|
||
t.Errorf("Overrides: %+v", cfg)
|
||
}
|
||
if _, err := parseAgentFlags([]string{"--gibts-nicht"}, &bytes.Buffer{}, noEnv); err == nil {
|
||
t.Error("unbekanntes Flag akzeptiert")
|
||
}
|
||
}
|
||
|
||
func TestRun_AgentNotEnrolled(t *testing.T) {
|
||
dir := filepath.Join(t.TempDir(), "suldata")
|
||
code, _, stderr := run(context.Background(), "agent", "--data-dir="+dir, "--docker-socket=none")
|
||
if code != 1 || !strings.Contains(stderr, "--token") {
|
||
t.Errorf("code=%d stderr=%q", code, stderr)
|
||
}
|
||
}
|
||
|
||
func TestRun_AgentBadConfig(t *testing.T) {
|
||
code, _, stderr := run(context.Background(), "agent", "--server=http://ingress:8443", "--token=x")
|
||
if code != 2 || !strings.Contains(stderr, "https") {
|
||
t.Errorf("http-URL: code=%d stderr=%q", code, stderr)
|
||
}
|
||
if code, _, _ := run(context.Background(), "agent", "--help"); code != 0 {
|
||
t.Errorf("--help: code=%d", code)
|
||
}
|
||
}
|
||
|
||
func noEnv(string) string { return "" }
|
||
|
||
// Token und Server auch per Umgebung (curl | sh, Compose) – Flags gewinnen.
|
||
func TestAgentFlags_Environment(t *testing.T) {
|
||
env := map[string]string{"SULTAN_TOKEN": "sltn_enroll_env", "SULTAN_SERVER": "https://env:8443"}
|
||
getenv := func(k string) string { return env[k] }
|
||
|
||
cfg, err := parseAgentFlags(nil, &bytes.Buffer{}, getenv)
|
||
if err != nil || cfg.Token != "sltn_enroll_env" || cfg.ServerURL != "https://env:8443" {
|
||
t.Errorf("aus Umgebung: %+v %v", cfg, err)
|
||
}
|
||
cfg, _ = parseAgentFlags([]string{"--token=flag", "--server=https://flag:8443"}, &bytes.Buffer{}, getenv)
|
||
if cfg.Token != "flag" || cfg.ServerURL != "https://flag:8443" {
|
||
t.Errorf("Flags müssen gewinnen: %+v", cfg)
|
||
}
|
||
}
|
||
|
||
func TestRun_AgentMaintenanceCommand(t *testing.T) {
|
||
dir := filepath.Join(t.TempDir(), "suldata")
|
||
code, _, stderr := run(context.Background(), "agent", "maintenance", "on", "--data-dir="+dir)
|
||
if code != 1 || !strings.Contains(stderr, "registriert") {
|
||
t.Errorf("nicht registriert: code=%d stderr=%q", code, stderr)
|
||
}
|
||
for _, args := range [][]string{
|
||
{"agent", "maintenance"},
|
||
{"agent", "maintenance", "vielleicht"},
|
||
{"agent", "maintenance", "on", "--for=bald"},
|
||
} {
|
||
if code, _, _ := run(context.Background(), args...); code != 2 {
|
||
t.Errorf("%v: code=%d", args, code)
|
||
}
|
||
}
|
||
}
|
||
|
||
func TestAgentFlags_EnvironmentAll(t *testing.T) {
|
||
cfg, err := parseAgentFlags(nil, &bytes.Buffer{}, envMap(map[string]string{
|
||
"SULTAN_DATA_DIR": "/srv/agent", "SULTAN_NODE_ID": "pi", "SULTAN_CONFIG_DIR": "none", "SULTAN_BACKEND_INTERFACE": "wt0",
|
||
}))
|
||
if err != nil || cfg.DataDir != "/srv/agent" || cfg.NodeID != "pi" || cfg.ConfigDir != "none" || cfg.BackendInterface != "wt0" {
|
||
t.Errorf("aus Umgebung: %+v %v", cfg, err)
|
||
}
|
||
}
|