- syncup: podman first, docker only as fallback (podman wins on name clash;
existing docker units found in podman switch to podman)
- syncup: group podman-compose containers into one `kind: stack` unit per
project (project, working_dir, compose_files, compose_bin from labels);
disable existing member units ("part of stack <project>")
- generator: compose mode (podman-compose up/stop, WorkingDirectory) with
pod start/stop fallback when compose binary/dir/files are missing
- reconcile: stacks disabled with "stack not found" when neither compose
files nor pod exist
- root: scan root + rootless users listed in `users:` (podman only)
- non-root: config ~/.config/unitdore/units.yaml, own user units only
- sysuser package: runuser with XDG_RUNTIME_DIR/DBUS env, home/linger lookup
- install: warn when linger is not enabled for user units
- testdata/stack: podman-compose test stack and captured podman ps fixture
- docs: README, generated-units, man page, AGENTS, PLAN
32 lines
686 B
Go
32 lines
686 B
Go
package sysuser
|
|
|
|
import "testing"
|
|
|
|
func TestIsSelf(t *testing.T) {
|
|
if !IsSelf("") {
|
|
t.Error("empty user must be self")
|
|
}
|
|
if cur := Current(); cur != "" && !IsSelf(cur) {
|
|
t.Errorf("current user %q must be self", cur)
|
|
}
|
|
}
|
|
|
|
func TestCommand_Self(t *testing.T) {
|
|
cmd, err := Command(Current(), "true")
|
|
if err != nil {
|
|
t.Fatalf("Command() error: %v", err)
|
|
}
|
|
if cmd.Args[0] != "true" {
|
|
t.Errorf("self command should run directly, got %v", cmd.Args)
|
|
}
|
|
}
|
|
|
|
func TestCommand_OtherUserRequiresRoot(t *testing.T) {
|
|
if IsRoot() {
|
|
t.Skip("running as root")
|
|
}
|
|
if _, err := Command("root", "true"); err == nil {
|
|
t.Error("running as another user without root should error")
|
|
}
|
|
}
|