Files
DoGaMa-serv/internal/backup/ownership_test.go
T
2026-08-26 22:35:42 +02:00

59 lines
1.6 KiB
Go

package backup
import (
"os"
"path/filepath"
"syscall"
"testing"
"git.zaynet.fr/DoGaMa/DoGaMa-serv/internal/instance"
)
func TestApplyRuntimeOwnershipUsesTargetIdentity(t *testing.T) {
if os.Geteuid() != 0 {
t.Skip("changing ownership to a distinct UID requires root")
}
root := t.TempDir()
file := filepath.Join(root, "save.dat")
if err := os.WriteFile(file, []byte("save"), 0o640); err != nil {
t.Fatal(err)
}
preview := instance.Preview{DockerUser: instance.DockerUser{Mode: instance.DockerUserDoGaMa}, DockerUserValue: "1234:1234"}
if err := applyRuntimeOwnership(root, preview); err != nil {
t.Fatal(err)
}
for _, name := range []string{root, file} {
info, err := os.Stat(name)
if err != nil {
t.Fatal(err)
}
stat, ok := info.Sys().(*syscall.Stat_t)
if !ok || uint32(stat.Uid) != 1234 || uint32(stat.Gid) != 1234 {
t.Fatalf("%s ownership = %v", name, info.Sys())
}
}
}
func TestApplyRuntimeOwnershipDoesNotOverrideImageUser(t *testing.T) {
root := t.TempDir()
file := filepath.Join(root, "save.dat")
if err := os.WriteFile(file, []byte("save"), 0o640); err != nil {
t.Fatal(err)
}
before, err := os.Stat(file)
if err != nil {
t.Fatal(err)
}
preview := instance.Preview{DockerUser: instance.DockerUser{Mode: instance.DockerUserImage}, DockerUserValue: "1234:1234"}
if err := applyRuntimeOwnership(root, preview); err != nil {
t.Fatal(err)
}
after, err := os.Stat(file)
if err != nil {
t.Fatal(err)
}
if before.Sys().(*syscall.Stat_t).Uid != after.Sys().(*syscall.Stat_t).Uid || before.Sys().(*syscall.Stat_t).Gid != after.Sys().(*syscall.Stat_t).Gid {
t.Fatal("image-defined ownership was changed")
}
}