package proxmox import "testing" func TestParseUPID(t *testing.T) { // Captured live from demo-felhom. const raw = "UPID:demo-felhom:00026454:004E3431:6A265E53:vzdestroy:9021:root@pam:" u, err := ParseUPID(raw) if err != nil { t.Fatalf("ParseUPID: %v", err) } if u.Node != "demo-felhom" { t.Errorf("node = %q", u.Node) } if u.Worker != "vzdestroy" { t.Errorf("worker = %q", u.Worker) } if u.ID != "9021" { t.Errorf("id = %q", u.ID) } if u.User != "root@pam" { t.Errorf("user = %q", u.User) } if u.PID != 0x00026454 { t.Errorf("pid = %#x, want 0x26454", u.PID) } if u.StartTime != 0x6A265E53 { t.Errorf("starttime = %#x", u.StartTime) } if u.String() != raw { t.Errorf("String() round-trip = %q", u.String()) } } func TestParseUPID_PrivsepTokenUser(t *testing.T) { // The user field can contain '@' and '!' (a privsep token) but never ':'. const raw = "UPID:demo-felhom:00001234:00005678:6A265E53:vzdump:9001:felhom-agent@pve!agent:" u, err := ParseUPID(raw) if err != nil { t.Fatalf("ParseUPID: %v", err) } if u.User != "felhom-agent@pve!agent" { t.Errorf("user = %q", u.User) } } func TestParseUPID_Invalid(t *testing.T) { cases := []string{ "", "not-a-upid", "UPID:node:nothex:00:00:t:1:u:", // bad pid hex "UPID:node:00:00", // too few fields } for _, c := range cases { if _, err := ParseUPID(c); err == nil { t.Errorf("ParseUPID(%q) = nil error, want error", c) } } }