Files
2026-08-17 10:10:14 +08:00

54 lines
2.0 KiB
Go

package systemd
import (
"testing"
)
// TestParseUnitPropertiesRequiresExactProperties 验证属性解析严格接受恰好三个预期属性,并拒绝缺失、多余或重复属性。
func TestParseUnitPropertiesRequiresExactProperties(t *testing.T) {
t.Parallel()
unit, err := parseUnitProperties("yms-green.service", []byte("LoadState=loaded\nActiveState=inactive\nSubState=dead\n"))
if err != nil {
t.Fatalf("parse systemd properties: %v", err)
}
if unit.Name != "yms-green.service" || unit.LoadState != "loaded" || unit.ActiveState != "inactive" || unit.SubState != "dead" {
t.Fatalf("unexpected unit: %+v", unit)
}
invalid := [][]byte{
[]byte("LoadState=loaded\nActiveState=inactive\n"),
[]byte("LoadState=loaded\nActiveState=inactive\nSubState=dead\nDescription=YMS\n"),
[]byte("LoadState=loaded\nLoadState=loaded\nActiveState=inactive\nSubState=dead\n"),
}
for _, output := range invalid {
if _, err := parseUnitProperties("yms-green.service", output); err == nil {
t.Fatalf("expected exact property validation failure for %q", output)
}
}
}
// TestNewSystemctlRequiresAbsoluteExecutable 验证相对路径会被拒绝,绝对路径会被接受。
func TestNewSystemctlRequiresAbsoluteExecutable(t *testing.T) {
t.Parallel()
if _, err := NewSystemctl("systemctl"); err == nil {
t.Fatal("expected relative executable path rejection")
}
manager, err := NewSystemctl("/usr/bin/systemctl")
if err != nil || manager.executable != "/usr/bin/systemctl" {
t.Fatalf("unexpected manager: manager=%+v err=%v", manager, err)
}
}
// TestValidateUnitNamePreservesOpaqueValue 验证合法单元名被原样保留,空串或带首尾空白被拒绝。
func TestValidateUnitNamePreservesOpaqueValue(t *testing.T) {
t.Parallel()
if err := validateUnitName("backend-green.service"); err != nil {
t.Fatalf("validate exact unit name: %v", err)
}
for _, name := range []string{"", " backend-green.service", "backend-green.service "} {
if err := validateUnitName(name); err == nil {
t.Fatalf("expected unit name rejection: %q", name)
}
}
}