software steht so weit.
jetzt build + docker build und testen
This commit is contained in:
1 parent
42f0c0accb
commit
ca6cdcca63
90 files changed
+10298
-480
No files matched your search
+99
-17
@@ -38,41 +38,42 @@ func TestRun_Version(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRun_NotYetImplemented(t *testing.T) {
|
||||
for _, cmd := range []string{"agent", "token"} {
|
||||
code, _, stderr := run(context.Background(), cmd)
|
||||
if code != 1 || !strings.Contains(stderr, "noch nicht implementiert") {
|
||||
t.Errorf("%s: code=%d stderr=%q", cmd, code, stderr)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestServerFlags(t *testing.T) {
|
||||
cfg, err := parseServerFlags(nil, &bytes.Buffer{})
|
||||
cfg, err := parseServerFlags(nil, &bytes.Buffer{}, noEnv)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if cfg.DataDir != "./suldata" || cfg.AgentAddr != ":8443" || cfg.ProviderAddr != "127.0.0.1:8080" ||
|
||||
cfg.InterceptorURL != "http://127.0.0.1:8081" || cfg.RefreshInterval != time.Minute {
|
||||
cfg.LanderAddr != "127.0.0.1:8081" || cfg.InterceptorURL != "" || cfg.RefreshInterval != time.Minute {
|
||||
t.Errorf("Defaults: %+v", cfg)
|
||||
}
|
||||
|
||||
cfg, err = parseServerFlags([]string{
|
||||
"--data-dir=/srv/sul", "--agent-addr", ":9443", "--provider-addr=:8080",
|
||||
"--interceptor-url=http://lander:8081", "--refresh=30s",
|
||||
}, &bytes.Buffer{})
|
||||
"--interceptor-url=http://lander:8081", "--refresh=30s", "--lander-addr=none",
|
||||
"--hoster-name=Beispiel-Hosting", "--hoster-url=https://hoster.example", "--pro-url=https://hoster.example/pro",
|
||||
"--public-url=https://ingress.example:8443", "--public-url=https://100.64.0.1:8443",
|
||||
"--lease-duration=1h",
|
||||
"--notify-slack=https://hooks.example/a", "--notify-slack=https://hooks.example/b",
|
||||
"--notify-ntfy=https://ntfy.example/sultan", "--notify-ntfy-token=tk_x", "--offline-alert-after=10m",
|
||||
}, &bytes.Buffer{}, noEnv)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if cfg.DataDir != "/srv/sul" || cfg.AgentAddr != ":9443" || cfg.ProviderAddr != ":8080" ||
|
||||
cfg.InterceptorURL != "http://lander:8081" || cfg.RefreshInterval != 30*time.Second {
|
||||
cfg.InterceptorURL != "http://lander:8081" || cfg.RefreshInterval != 30*time.Second || cfg.LanderAddr != "none" ||
|
||||
cfg.HosterName != "Beispiel-Hosting" || cfg.HosterURL != "https://hoster.example" || cfg.ProURL != "https://hoster.example/pro" ||
|
||||
strings.Join(cfg.PublicURLs, ",") != "https://ingress.example:8443,https://100.64.0.1:8443" || cfg.LeaseDuration != time.Hour ||
|
||||
strings.Join(cfg.SlackWebhooks, ",") != "https://hooks.example/a,https://hooks.example/b" ||
|
||||
strings.Join(cfg.NtfyURLs, ",") != "https://ntfy.example/sultan" || cfg.NtfyToken != "tk_x" ||
|
||||
cfg.OfflineAlertAfter != 10*time.Minute {
|
||||
t.Errorf("Overrides: %+v", cfg)
|
||||
}
|
||||
|
||||
if _, err := parseServerFlags([]string{"--gibts-nicht"}, &bytes.Buffer{}); err == nil {
|
||||
if _, err := parseServerFlags([]string{"--gibts-nicht"}, &bytes.Buffer{}, noEnv); err == nil {
|
||||
t.Error("unbekanntes Flag akzeptiert")
|
||||
}
|
||||
if _, err := parseServerFlags([]string{"überzählig"}, &bytes.Buffer{}); err == nil {
|
||||
if _, err := parseServerFlags([]string{"überzählig"}, &bytes.Buffer{}, noEnv); err == nil {
|
||||
t.Error("überzähliges Argument akzeptiert")
|
||||
}
|
||||
}
|
||||
@@ -99,7 +100,7 @@ func TestRun_ServerStartsAndStops(t *testing.T) {
|
||||
}
|
||||
done := make(chan result, 1)
|
||||
go func() {
|
||||
code, _, stderr := run(ctx, "server", "--data-dir="+dir, "--agent-addr=127.0.0.1:0", "--provider-addr=127.0.0.1:0")
|
||||
code, _, stderr := run(ctx, "server", "--data-dir="+dir, "--agent-addr=127.0.0.1:0", "--provider-addr=127.0.0.1:0", "--lander-addr=127.0.0.1:0")
|
||||
done <- result{code, stderr}
|
||||
}()
|
||||
|
||||
@@ -137,3 +138,84 @@ func TestRun_ServerStartError(t *testing.T) {
|
||||
t.Errorf("unbrauchbares Datenverzeichnis: code=%d stderr=%q", code, stderr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRun_DumpLanding(t *testing.T) {
|
||||
dir := filepath.Join(t.TempDir(), "landing")
|
||||
code, stdout, stderr := run(context.Background(), "dump-landing", "--out="+dir)
|
||||
if code != 0 {
|
||||
t.Fatalf("code=%d stderr=%s", code, stderr)
|
||||
}
|
||||
if !strings.Contains(stdout, "maintenance.html") {
|
||||
t.Errorf("Ausgabe ohne Dateiliste: %q", stdout)
|
||||
}
|
||||
if _, err := os.Stat(filepath.Join(dir, "README.txt")); err != nil {
|
||||
t.Error("README.txt fehlt")
|
||||
}
|
||||
if code, _, stderr := run(context.Background(), "dump-landing", "--out="+dir); code != 1 || !strings.Contains(stderr, "--force") {
|
||||
t.Errorf("ohne --force: code=%d stderr=%q", code, stderr)
|
||||
}
|
||||
if code, _, _ := run(context.Background(), "dump-landing", "--out="+dir, "--force"); code != 0 {
|
||||
t.Errorf("mit --force: code=%d", code)
|
||||
}
|
||||
if code, _, _ := run(context.Background(), "dump-landing", "überzählig"); code != 2 {
|
||||
t.Errorf("überzähliges Argument: code=%d", code)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDumpLandingDefaultDir(t *testing.T) {
|
||||
out, err := parseDumpFlags(nil, &bytes.Buffer{})
|
||||
if err != nil || out.dir != "./suldata/landing" || out.force {
|
||||
t.Errorf("Defaults: %+v %v", out, err)
|
||||
}
|
||||
}
|
||||
|
||||
func envMap(m map[string]string) func(string) string { return func(k string) string { return m[k] } }
|
||||
|
||||
// Jedes Flag ist auch als SULTAN_<FLAG> setzbar; Flags gewinnen, Listen
|
||||
// sind kommagetrennt und werden durch ein Flag ersetzt, nicht ergänzt.
|
||||
func TestServerFlags_Environment(t *testing.T) {
|
||||
env := envMap(map[string]string{
|
||||
"SULTAN_DATA_DIR": "/srv/sul",
|
||||
"SULTAN_PUBLIC_URL": "https://a.example:8443, https://100.64.0.1:8443",
|
||||
"SULTAN_NOTIFY_NTFY_TOKEN": "tk_geheim",
|
||||
"SULTAN_REFRESH": "30s",
|
||||
"SULTAN_ENROLL_LIMIT": "5",
|
||||
})
|
||||
cfg, err := parseServerFlags(nil, &bytes.Buffer{}, env)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if cfg.DataDir != "/srv/sul" || strings.Join(cfg.PublicURLs, ",") != "https://a.example:8443,https://100.64.0.1:8443" ||
|
||||
cfg.NtfyToken != "tk_geheim" || cfg.RefreshInterval != 30*time.Second || cfg.EnrollLimit != 5 {
|
||||
t.Errorf("aus Umgebung: %+v", cfg)
|
||||
}
|
||||
|
||||
cfg, err = parseServerFlags([]string{"--public-url=https://c.example:8443", "--data-dir=/anders"}, &bytes.Buffer{}, env)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if strings.Join(cfg.PublicURLs, ",") != "https://c.example:8443" || cfg.DataDir != "/anders" {
|
||||
t.Errorf("Flags müssen gewinnen (Listen ersetzen): %v %q", cfg.PublicURLs, cfg.DataDir)
|
||||
}
|
||||
|
||||
if _, err := parseServerFlags(nil, &bytes.Buffer{}, envMap(map[string]string{"SULTAN_REFRESH": "bald"})); err == nil ||
|
||||
!strings.Contains(err.Error(), "SULTAN_REFRESH") {
|
||||
t.Errorf("fehlerhafte Variable nicht benannt: %v", err)
|
||||
}
|
||||
var help bytes.Buffer
|
||||
parseServerFlags([]string{"--help"}, &help, noEnv)
|
||||
if !strings.Contains(help.String(), "SULTAN_PUBLIC_URL") || !strings.Contains(help.String(), "SULTAN_NOTIFY_NTFY_TOKEN") {
|
||||
t.Errorf("Hilfe ohne Variablennamen:\n%s", help.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestServerFlags_EnrollLimit(t *testing.T) {
|
||||
cfg, _ := parseServerFlags(nil, &bytes.Buffer{}, noEnv)
|
||||
if cfg.EnrollLimit != 10 {
|
||||
t.Errorf("Default %d", cfg.EnrollLimit)
|
||||
}
|
||||
cfg, _ = parseServerFlags([]string{"--enroll-limit=-1"}, &bytes.Buffer{}, noEnv) // -1 = unbegrenzt
|
||||
if cfg.EnrollLimit != -1 {
|
||||
t.Errorf("--enroll-limit=-1: %d", cfg.EnrollLimit)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user