mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 19:41:17 +00:00
37 lines
1.1 KiB
Go
37 lines
1.1 KiB
Go
package api
|
|
|
|
import "testing"
|
|
|
|
func TestValidateAlertID(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
id string
|
|
valid bool
|
|
}{
|
|
{name: "basic", id: "guest-powered-off-pve-101", valid: true},
|
|
{name: "with spaces", id: "cluster one-node-101-cpu", valid: true},
|
|
{name: "with slash and colon", id: "pve1:qemu/101-cpu", valid: true},
|
|
{name: "empty", id: "", valid: false},
|
|
{name: "too long", id: string(make([]byte, 501)), valid: false},
|
|
{name: "control char", id: "bad\nvalue", valid: false},
|
|
{name: "path traversal", id: "../etc/passwd", valid: false},
|
|
{name: "path traversal middle", id: "pve/../secret", valid: false},
|
|
}
|
|
|
|
// Populate the oversized id string once to avoid zero bytes being mistaken for a valid character set.
|
|
for i := range testCases {
|
|
if testCases[i].name == "too long" {
|
|
value := make([]byte, 501)
|
|
for j := range value {
|
|
value[j] = 'a'
|
|
}
|
|
testCases[i].id = string(value)
|
|
}
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
if got := validateAlertID(tc.id); got != tc.valid {
|
|
t.Errorf("validateAlertID(%s) = %v, want %v", tc.name, got, tc.valid)
|
|
}
|
|
}
|
|
}
|