| package devices |
| |
| import ( |
| "os" |
| "path" |
| "testing" |
| |
| "github.com/moby/sys/userns" |
| |
| "github.com/opencontainers/runc/libcontainer/cgroups" |
| "github.com/opencontainers/runc/libcontainer/cgroups/fscommon" |
| "github.com/opencontainers/runc/libcontainer/configs" |
| "github.com/opencontainers/runc/libcontainer/devices" |
| ) |
| |
| func init() { |
| testingSkipFinalCheck = true |
| cgroups.TestMode = true |
| } |
| |
| func TestSetV1Allow(t *testing.T) { |
| if userns.RunningInUserNS() { |
| t.Skip("userns detected; setV1 does nothing") |
| } |
| dir := t.TempDir() |
| |
| for file, contents := range map[string]string{ |
| "devices.allow": "", |
| "devices.deny": "", |
| "devices.list": "a *:* rwm", |
| } { |
| err := os.WriteFile(path.Join(dir, file), []byte(contents), 0o600) |
| if err != nil { |
| t.Fatal(err) |
| } |
| } |
| |
| r := &configs.Resources{ |
| Devices: []*devices.Rule{ |
| { |
| Type: devices.CharDevice, |
| Major: 1, |
| Minor: 5, |
| Permissions: devices.Permissions("rwm"), |
| Allow: true, |
| }, |
| }, |
| } |
| |
| if err := setV1(dir, r); err != nil { |
| t.Fatal(err) |
| } |
| |
| // The default deny rule must be written. |
| value, err := fscommon.GetCgroupParamString(dir, "devices.deny") |
| if err != nil { |
| t.Fatal(err) |
| } |
| if value[0] != 'a' { |
| t.Errorf("Got the wrong value (%q), set devices.deny failed.", value) |
| } |
| |
| // Permitted rule must be written. |
| if value, err := fscommon.GetCgroupParamString(dir, "devices.allow"); err != nil { |
| t.Fatal(err) |
| } else if value != "c 1:5 rwm" { |
| t.Errorf("Got the wrong value (%q), set devices.allow failed.", value) |
| } |
| } |