| package capabilities |
| |
| import ( |
| "io" |
| "os" |
| "testing" |
| |
| "github.com/opencontainers/runc/libcontainer/configs" |
| "github.com/sirupsen/logrus" |
| "github.com/sirupsen/logrus/hooks/test" |
| "github.com/syndtr/gocapability/capability" |
| ) |
| |
| func TestNew(t *testing.T) { |
| cs := []string{"CAP_CHOWN", "CAP_UNKNOWN", "CAP_UNKNOWN2"} |
| conf := configs.Capabilities{ |
| Bounding: cs, |
| Effective: cs, |
| Inheritable: cs, |
| Permitted: cs, |
| Ambient: cs, |
| } |
| |
| hook := test.NewGlobal() |
| defer hook.Reset() |
| |
| logrus.SetOutput(io.Discard) |
| caps, err := New(&conf) |
| logrus.SetOutput(os.Stderr) |
| |
| if err != nil { |
| t.Error(err) |
| } |
| e := hook.AllEntries() |
| if len(e) != 1 { |
| t.Errorf("expected 1 warning, got %d", len(e)) |
| } |
| |
| expectedLogs := logrus.Entry{ |
| Level: logrus.WarnLevel, |
| Message: "ignoring unknown or unavailable capabilities: [CAP_UNKNOWN CAP_UNKNOWN2]", |
| } |
| |
| l := hook.LastEntry() |
| if l == nil { |
| t.Fatal("expected a warning, but got none") |
| } |
| if l.Level != expectedLogs.Level { |
| t.Errorf("expected %q, got %q", expectedLogs.Level, l.Level) |
| } |
| if l.Message != expectedLogs.Message { |
| t.Errorf("expected %q, got %q", expectedLogs.Message, l.Message) |
| } |
| |
| if len(caps.caps) != len(capTypes) { |
| t.Errorf("expected %d capability types, got %d: %v", len(capTypes), len(caps.caps), caps.caps) |
| } |
| |
| for _, cType := range capTypes { |
| if i := len(caps.caps[cType]); i != 1 { |
| t.Errorf("expected 1 capability for %s, got %d: %v", cType, i, caps.caps[cType]) |
| continue |
| } |
| if caps.caps[cType][0] != capability.CAP_CHOWN { |
| t.Errorf("expected CAP_CHOWN, got %s: ", caps.caps[cType][0]) |
| continue |
| } |
| } |
| |
| hook.Reset() |
| } |