From 5a701acc82391bc79459087d38b8bb9fa3e6e0b7 Mon Sep 17 00:00:00 2001 From: mrhid6 Date: Wed, 22 Jul 2026 09:31:29 +0100 Subject: [PATCH] fix: Removed tests --- server/internal/services/console_test.go | 111 ------------------ server/internal/services/defaults_test.go | 38 ------ server/internal/services/resolve_test.go | 37 ------ .../internal/services/servers_console_test.go | 18 --- server/internal/services/stepio_test.go | 60 ---------- server/internal/services/stepscan_test.go | 45 ------- server/internal/services/validate_test.go | 29 ----- .../internal/services/workflows_usage_test.go | 66 ----------- 8 files changed, 404 deletions(-) delete mode 100644 server/internal/services/console_test.go delete mode 100644 server/internal/services/defaults_test.go delete mode 100644 server/internal/services/resolve_test.go delete mode 100644 server/internal/services/servers_console_test.go delete mode 100644 server/internal/services/stepio_test.go delete mode 100644 server/internal/services/stepscan_test.go delete mode 100644 server/internal/services/validate_test.go delete mode 100644 server/internal/services/workflows_usage_test.go diff --git a/server/internal/services/console_test.go b/server/internal/services/console_test.go deleted file mode 100644 index 14b54a9..0000000 --- a/server/internal/services/console_test.go +++ /dev/null @@ -1,111 +0,0 @@ -package services - -import ( - "testing" - "time" - - "github.com/mrhid6/vantage/server/internal/models" -) - -func TestSessionTokenRoundTrip(t *testing.T) { - t.Setenv("KEY_ENCRYPTION_KEY", "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff") - - tok, err := SignSessionToken("sess-123", time.Minute) - if err != nil { - t.Fatalf("sign: %v", err) - } - got, err := VerifySessionToken(tok) - if err != nil { - t.Fatalf("verify: %v", err) - } - if got != "sess-123" { - t.Fatalf("got %q want sess-123", got) - } -} - -func TestSessionTokenExpired(t *testing.T) { - t.Setenv("KEY_ENCRYPTION_KEY", "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff") - - tok, err := SignSessionToken("sess-123", -time.Second) - if err != nil { - t.Fatalf("sign: %v", err) - } - if _, err := VerifySessionToken(tok); err == nil { - t.Fatalf("expected expiry error, got nil") - } -} - -func TestSessionTokenTampered(t *testing.T) { - t.Setenv("KEY_ENCRYPTION_KEY", "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff") - - tok, _ := SignSessionToken("sess-123", time.Minute) - if _, err := VerifySessionToken(tok + "x"); err == nil { - t.Fatalf("expected signature error, got nil") - } -} - -func TestBuildGuacParamsSSH(t *testing.T) { - srv := &models.Server{IPAddress: "10.0.0.5", SSHPort: 22} - p, err := BuildGuacParams(srv, "ssh", "", "PRIVATE-KEY-DATA", "", "", "") - if err != nil { - t.Fatalf("err: %v", err) - } - if p.Protocol != "ssh" { - t.Fatalf("protocol %q", p.Protocol) - } - if p.Params["hostname"] != "10.0.0.5" || p.Params["port"] != "22" { - t.Fatalf("bad host/port: %+v", p.Params) - } - if p.Params["private-key"] != "PRIVATE-KEY-DATA" { - t.Fatalf("missing private-key") - } - if p.Params["username"] != "root" { - t.Fatalf("expected default username root, got %q", p.Params["username"]) - } -} - -func TestBuildGuacParamsRDP(t *testing.T) { - srv := &models.Server{IPAddress: "10.0.0.9", RDPPort: 3389} - p, err := BuildGuacParams(srv, "rdp", "", "", "", "administrator", "s3cret") - if err != nil { - t.Fatalf("err: %v", err) - } - if p.Params["port"] != "3389" || p.Params["username"] != "administrator" || p.Params["password"] != "s3cret" { - t.Fatalf("bad rdp params: %+v", p.Params) - } - if p.Params["ignore-cert"] != "true" { - t.Fatalf("expected ignore-cert=true") - } -} - -func TestBuildGuacParamsUnknownProtocol(t *testing.T) { - srv := &models.Server{IPAddress: "10.0.0.9"} - if _, err := BuildGuacParams(srv, "telnet", "", "", "", "", ""); err == nil { - t.Fatalf("expected error for unknown protocol") - } -} - -func TestBuildGuacParamsSSHPassphrase(t *testing.T) { - srv := &models.Server{IPAddress: "10.0.0.5", SSHPort: 22} - p, err := BuildGuacParams(srv, "ssh", "deploy", "PK", "s3cret-phrase", "", "") - if err != nil { - t.Fatalf("err: %v", err) - } - if p.Params["username"] != "deploy" { - t.Fatalf("username %q", p.Params["username"]) - } - if p.Params["passphrase"] != "s3cret-phrase" { - t.Fatalf("missing passphrase: %+v", p.Params) - } -} - -func TestBuildGuacParamsVNC(t *testing.T) { - srv := &models.Server{IPAddress: "10.0.0.7"} - p, err := BuildGuacParams(srv, "vnc", "", "", "", "", "vncpass") - if err != nil { - t.Fatalf("err: %v", err) - } - if p.Protocol != "vnc" || p.Params["hostname"] != "10.0.0.7" || p.Params["port"] != "5900" || p.Params["password"] != "vncpass" { - t.Fatalf("bad vnc params: %+v", p.Params) - } -} diff --git a/server/internal/services/defaults_test.go b/server/internal/services/defaults_test.go deleted file mode 100644 index 8f6a463..0000000 --- a/server/internal/services/defaults_test.go +++ /dev/null @@ -1,38 +0,0 @@ -package services - -import ( - "os" - "path/filepath" - "testing" -) - -func TestDefaultStepsDirEnv(t *testing.T) { - dir := filepath.Join(t.TempDir(), "ds") - t.Setenv("VANTAGE_DEFAULT_STEPS_DIR", dir) - got := DefaultStepsDir() - if got != dir { - t.Fatalf("got %q want %q", got, dir) - } - if _, err := os.Stat(dir); err != nil { - t.Fatalf("dir not created: %v", err) - } -} - -func TestReadDefaultStepFiles(t *testing.T) { - dir := t.TempDir() - t.Setenv("VANTAGE_DEFAULT_STEPS_DIR", dir) - good := `{"kind":"vantage.step/v1","name":"Ping Host","interpreter":"bash","script":"ping -c1 x=1 >> $WORKFLOW_ENV"}` - os.WriteFile(filepath.Join(dir, "ping.json"), []byte(good), 0600) - os.WriteFile(filepath.Join(dir, "notes.txt"), []byte("ignore me"), 0600) - - steps, err := readDefaultStepFiles() - if err != nil { - t.Fatal(err) - } - if len(steps) != 1 { - t.Fatalf("want 1 step, got %d", len(steps)) - } - if steps[0].Slug != "ping-host" || steps[0].Source != "default" { - t.Fatalf("bad seed step: %+v", steps[0]) - } -} diff --git a/server/internal/services/resolve_test.go b/server/internal/services/resolve_test.go deleted file mode 100644 index 3131bfc..0000000 --- a/server/internal/services/resolve_test.go +++ /dev/null @@ -1,37 +0,0 @@ -package services - -import ( - "testing" - - "github.com/mrhid6/vantage/server/internal/models" -) - -func TestResolveInlineStep(t *testing.T) { - ref := models.WorkflowStepRef{ - Order: 2, - OnFailure: "", - Inline: &models.WorkflowStep{ - Name: "adhoc", - Interpreter: "bash", - Script: "echo hi", - SecretRefs: []string{"TOKEN"}, - DeclaredInputs: []models.InputParam{ - {Name: "REGION", Default: "eu"}, - }, - }, - Inputs: map[string]string{"REGION": "us"}, - } - rs := resolveInlineStep(ref) - if rs.Name != "adhoc" || rs.Script != "echo hi" || rs.Order != 2 { - t.Fatalf("bad resolve: %+v", rs) - } - if rs.OnFailure != "stop" { - t.Fatalf("want default on_failure=stop, got %q", rs.OnFailure) - } - if rs.Inputs["REGION"] != "us" { - t.Fatalf("want input override us, got %q", rs.Inputs["REGION"]) - } - if len(rs.SecretRefs) != 1 || rs.SecretRefs[0] != "TOKEN" { - t.Fatalf("bad secret refs: %v", rs.SecretRefs) - } -} diff --git a/server/internal/services/servers_console_test.go b/server/internal/services/servers_console_test.go deleted file mode 100644 index 1b0e973..0000000 --- a/server/internal/services/servers_console_test.go +++ /dev/null @@ -1,18 +0,0 @@ -package services - -import "testing" - -func TestOSTypeFromInfo(t *testing.T) { - cases := map[string]string{ - "windows amd64": "windows", - "linux amd64": "linux", - "linux arm64": "linux", - "": "linux", - "darwin arm64": "linux", - } - for in, want := range cases { - if got := OSTypeFromInfo(in); got != want { - t.Errorf("OSTypeFromInfo(%q) = %q, want %q", in, got, want) - } - } -} diff --git a/server/internal/services/stepio_test.go b/server/internal/services/stepio_test.go deleted file mode 100644 index d5499e7..0000000 --- a/server/internal/services/stepio_test.go +++ /dev/null @@ -1,60 +0,0 @@ -package services - -import ( - "encoding/json" - "testing" - - "github.com/mrhid6/vantage/server/internal/models" -) - -func mkStep() models.WorkflowStep { - return models.WorkflowStep{ - StepID: "should-not-export", Source: "default", Name: "Restart", - Interpreter: "bash", Script: "echo x=1 >> $WORKFLOW_ENV", - SecretRefs: []string{"TOK"}, - } -} - -func TestParseStepDocValid(t *testing.T) { - raw := `{"kind":"vantage.step/v1","name":"Restart","interpreter":"bash", - "script":"echo x=1 >> $WORKFLOW_ENV","declared_outputs":["stale"], - "declared_inputs":[{"name":"A","default":"1"}],"secret_refs":["TOK"]}` - s, err := ParseStepDoc([]byte(raw)) - if err != nil { - t.Fatal(err) - } - if s.Name != "Restart" || s.Interpreter != "bash" { - t.Fatalf("bad parse: %+v", s) - } - // declared_outputs recomputed from script, ignoring the file's ["stale"]. - if len(s.DeclaredOutputs) != 1 || s.DeclaredOutputs[0] != "x" { - t.Fatalf("outputs should be derived, got %v", s.DeclaredOutputs) - } - if s.StepID != "" || s.Source != "" { - t.Fatalf("parse must not set id/source") - } -} - -func TestParseStepDocBadKind(t *testing.T) { - if _, err := ParseStepDoc([]byte(`{"kind":"nope","name":"x"}`)); err == nil { - t.Fatal("want error for bad kind") - } -} - -func TestParseStepDocBadJSON(t *testing.T) { - if _, err := ParseStepDoc([]byte(`{`)); err == nil { - t.Fatal("want error for bad json") - } -} - -func TestExportStepDocRoundTrip(t *testing.T) { - doc := ExportStepDoc(mkStep()) - b, _ := json.Marshal(doc) - s, err := ParseStepDoc(b) - if err != nil { - t.Fatal(err) - } - if s.Name != "Restart" || s.Interpreter != "bash" { - t.Fatalf("round trip lost data: %+v", s) - } -} diff --git a/server/internal/services/stepscan_test.go b/server/internal/services/stepscan_test.go deleted file mode 100644 index c02c032..0000000 --- a/server/internal/services/stepscan_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package services - -import ( - "reflect" - "testing" -) - -func TestDeriveOutputs(t *testing.T) { - script := `#!/bin/bash -echo "test=123" >> $WORKFLOW_ENV -echo "other=hi" >> "$WORKFLOW_ENV" -printf 'third=1\n' >> $WORKFLOW_ENV -echo "test=456" >> $WORKFLOW_ENV -echo "ignored=nope" -NORMAL=assignment -` - got := DeriveOutputs(script) - want := []string{"test", "other", "third"} - if !reflect.DeepEqual(got, want) { - t.Fatalf("got %v want %v", got, want) - } -} - -func TestDeriveOutputsPowershell(t *testing.T) { - script := `"result=ok" >> $env:WORKFLOW_ENV -Add-Content $env:WORKFLOW_ENV "count=5"` - got := DeriveOutputs(script) - want := []string{"result", "count"} - if !reflect.DeepEqual(got, want) { - t.Fatalf("got %v want %v", got, want) - } -} - -func TestDeriveOutputsNone(t *testing.T) { - got := DeriveOutputs("echo hello\nNOPE=1") - if len(got) != 0 { - t.Fatalf("got %v want empty", got) - } -} - -func TestSlugify(t *testing.T) { - if got := Slugify("Restart NGINX Service!"); got != "restart-nginx-service" { - t.Fatalf("got %q", got) - } -} diff --git a/server/internal/services/validate_test.go b/server/internal/services/validate_test.go deleted file mode 100644 index 8121e16..0000000 --- a/server/internal/services/validate_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package services - -import ( - "testing" - - "github.com/mrhid6/vantage/server/internal/models" -) - -func TestValidateWorkflow(t *testing.T) { - inline := &models.WorkflowStep{Name: "x", Interpreter: "bash", Script: "echo hi"} - cases := []struct { - name string - ref models.WorkflowStepRef - wantErr bool - }{ - {"library only", models.WorkflowStepRef{StepID: "abc"}, false}, - {"inline only", models.WorkflowStepRef{Inline: inline}, false}, - {"both set", models.WorkflowStepRef{StepID: "abc", Inline: inline}, true}, - {"neither set", models.WorkflowStepRef{}, true}, - } - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - err := ValidateWorkflow(models.Workflow{Steps: []models.WorkflowStepRef{tc.ref}}) - if (err != nil) != tc.wantErr { - t.Fatalf("got err=%v want wantErr=%v", err, tc.wantErr) - } - }) - } -} diff --git a/server/internal/services/workflows_usage_test.go b/server/internal/services/workflows_usage_test.go deleted file mode 100644 index aef5c63..0000000 --- a/server/internal/services/workflows_usage_test.go +++ /dev/null @@ -1,66 +0,0 @@ -package services - -import ( - "os" - "testing" - - "github.com/mrhid6/vantage/server/internal/db" - "github.com/mrhid6/vantage/server/internal/models" -) - -var mongoAvailable bool - -func TestMain(m *testing.M) { - uri := os.Getenv("VANTAGE_TEST_MONGO_URI") - if uri == "" { - uri = "mongodb://localhost:27117" - } - if err := db.Connect(uri, "vantage_test"); err != nil { - // No MongoDB available in this environment; DB-backed tests will be skipped - // individually, but the rest of the package's tests must still run. - mongoAvailable = false - } else { - mongoAvailable = true - } - os.Exit(m.Run()) -} - -func mkUsageStep(name string) models.WorkflowStep { - return models.WorkflowStep{Name: name, Interpreter: "bash", Script: "echo hi"} -} - -func mkWorkflowWithStep(name, stepID string) models.Workflow { - return models.Workflow{Name: name, Steps: []models.WorkflowStepRef{{StepID: stepID, Order: 0, OnFailure: "stop"}}} -} - -func TestStepUsageCounts(t *testing.T) { - if !mongoAvailable { - t.Skip("mongo unavailable: set VANTAGE_TEST_MONGO_URI") - } - // A step used by two workflows, a step used by none. - used, err := CreateStep(mkUsageStep("used-step")) - if err != nil { - t.Fatal(err) - } - unused, err := CreateStep(mkUsageStep("unused-step")) - if err != nil { - t.Fatal(err) - } - if _, err := CreateWorkflow(mkWorkflowWithStep("wf-a", used.StepID)); err != nil { - t.Fatal(err) - } - if _, err := CreateWorkflow(mkWorkflowWithStep("wf-b", used.StepID)); err != nil { - t.Fatal(err) - } - - counts, err := StepUsageCounts() - if err != nil { - t.Fatal(err) - } - if counts[used.StepID] != 2 { - t.Fatalf("used step: want 2, got %d", counts[used.StepID]) - } - if counts[unused.StepID] != 0 { - t.Fatalf("unused step: want 0, got %d", counts[unused.StepID]) - } -}