36b3af2e3d
PR Check / Code Quality: Format (push) Failing after 1s
PR Check / Code Quality: Lint (darwin) (push) Failing after 0s
PR Check / Code Quality: Lint (freebsd) (push) Failing after 1s
PR Check / Code Quality: Lint (windows) (push) Failing after 1s
PR Check / Code Quality: Lint (linux) (push) Failing after 1s
PR Check / Security: Vulnerability Scan (push) Failing after 0s
Update Documentation / update-docs (push) Failing after 2s
PR Check / Code Quality: Vendor (push) Failing after 1s
PR Check / Code Quality: Coverage (push) Failing after 0s
PR Check / Tests: Unit (macos-latest) (push) Has been cancelled
PR Check / Tests: Unit (ubuntu-24.04) (push) Has been cancelled
PR Check / Tests: Unit (ubuntu-24.04-arm) (push) Has been cancelled
PR Check / Tests: Unit (windows-latest) (push) Has been cancelled
174 lines
3.3 KiB
Go
174 lines
3.3 KiB
Go
//go:build linux || darwin || freebsd || windows
|
|
|
|
package target
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/pranshuparmar/witr/pkg/model"
|
|
)
|
|
|
|
func TestResolveWithExactFlag(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
exact bool
|
|
}{
|
|
{
|
|
name: "fuzzy matching",
|
|
exact: false,
|
|
},
|
|
{
|
|
name: "exact matching",
|
|
exact: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
target := model.Target{
|
|
Type: model.TargetName,
|
|
Value: "test",
|
|
}
|
|
|
|
_, err := Resolve(target, tt.exact)
|
|
|
|
if err == nil {
|
|
t.Log("Resolve returned successfully (may have found matches)")
|
|
} else {
|
|
t.Logf("Resolve returned error: %v", err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestResolvePIDWithExactFlag(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
exact bool
|
|
pid string
|
|
}{
|
|
{"exact flag true", true, "1"},
|
|
{"exact flag false", false, "1"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
target := model.Target{
|
|
Type: model.TargetPID,
|
|
Value: tt.pid,
|
|
}
|
|
|
|
pids, err := Resolve(target, tt.exact)
|
|
if err != nil {
|
|
t.Fatalf("Resolve failed: %v", err)
|
|
}
|
|
|
|
if len(pids) != 1 {
|
|
t.Fatalf("expected 1 PID, got %d", len(pids))
|
|
}
|
|
|
|
if pids[0] != 1 {
|
|
t.Fatalf("expected PID 1, got %d", pids[0])
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestMatchesExactToken(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
cmdline string
|
|
needle string
|
|
want bool
|
|
}{
|
|
{
|
|
name: "matches a path segment in the executable arg",
|
|
cmdline: "/usr/bin/nginx -g daemon off",
|
|
needle: "nginx",
|
|
want: true,
|
|
},
|
|
{
|
|
name: "matches path component (snap pattern)",
|
|
cmdline: "/snap/core24/1349/bin/python",
|
|
needle: "core24",
|
|
want: true,
|
|
},
|
|
{
|
|
name: "does not match substring of a token",
|
|
cmdline: "/usr/local/bin/foo-bar",
|
|
needle: "foo",
|
|
want: false,
|
|
},
|
|
{
|
|
name: "matches a bare argument",
|
|
cmdline: "node server.js production",
|
|
needle: "node",
|
|
want: true,
|
|
},
|
|
{
|
|
name: "matches across backslash-separated paths (Windows-style)",
|
|
cmdline: `C:\Program Files\App\bin.exe`,
|
|
needle: "App",
|
|
want: true,
|
|
},
|
|
{
|
|
name: "does not match partial filename",
|
|
cmdline: "/usr/bin/python3",
|
|
needle: "python",
|
|
want: false,
|
|
},
|
|
{
|
|
name: "matches file basename with extension",
|
|
cmdline: `C:\Program Files\App\witr.exe`,
|
|
needle: "witr.exe",
|
|
want: true,
|
|
},
|
|
{
|
|
name: "empty cmdline never matches",
|
|
cmdline: "",
|
|
needle: "nginx",
|
|
want: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
tt := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
if got := matchesExactToken(tt.cmdline, tt.needle); got != tt.want {
|
|
t.Errorf("matchesExactToken(%q, %q) = %v, want %v", tt.cmdline, tt.needle, got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestResolvePortWithExactFlag(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
exact bool
|
|
port string
|
|
}{
|
|
{"exact flag true", true, "22"},
|
|
{"exact flag false", false, "22"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
target := model.Target{
|
|
Type: model.TargetPort,
|
|
Value: tt.port,
|
|
}
|
|
|
|
_, err := Resolve(target, tt.exact)
|
|
|
|
if err == nil {
|
|
t.Log("Resolve returned successfully (may have found matches)")
|
|
} else {
|
|
t.Logf("Resolve returned error: %v", err)
|
|
}
|
|
})
|
|
}
|
|
}
|