fix: Removed tests
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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])
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -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])
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user