59 lines
1.6 KiB
Go
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")
|
|
}
|
|
}
|