| package capabilities // import "github.com/docker/docker/pkg/capabilities" | |
| import ( | |
| "fmt" | |
| "testing" | |
| ) | |
| func TestMatch(t *testing.T) { | |
| set := Set{ | |
| "foo": struct{}{}, | |
| "bar": struct{}{}, | |
| } | |
| type testcase struct { | |
| caps [][]string | |
| expected []string | |
| } | |
| var testcases = []testcase{ | |
| // matches | |
| { | |
| caps: [][]string{{}}, | |
| expected: []string{}, | |
| }, | |
| { | |
| caps: [][]string{{"foo"}}, | |
| expected: []string{"foo"}, | |
| }, | |
| { | |
| caps: [][]string{{"bar"}, {"foo"}}, | |
| expected: []string{"bar"}, | |
| }, | |
| { | |
| caps: [][]string{{"foo", "bar"}}, | |
| expected: []string{"foo", "bar"}, | |
| }, | |
| { | |
| caps: [][]string{{"qux"}, {"foo"}}, | |
| expected: []string{"foo"}, | |
| }, | |
| { | |
| caps: [][]string{{"foo", "bar"}, {"baz"}, {"bar"}}, | |
| expected: []string{"foo", "bar"}, | |
| }, | |
| // non matches | |
| {caps: nil}, | |
| {caps: [][]string{}}, | |
| {caps: [][]string{{"qux"}}}, | |
| {caps: [][]string{{"foo", "bar", "qux"}}}, | |
| {caps: [][]string{{"qux"}, {"baz"}}}, | |
| {caps: [][]string{{"foo", "baz"}}}, | |
| } | |
| for _, m := range testcases { | |
| t.Run(fmt.Sprintf("%v", m.caps), func(t *testing.T) { | |
| selected := set.Match(m.caps) | |
| if m.expected == nil || selected == nil { | |
| if m.expected == nil && selected == nil { | |
| return | |
| } | |
| t.Fatalf("selected = %v, expected = %v", selected, m.expected) | |
| } | |
| if len(selected) != len(m.expected) { | |
| t.Fatalf("len(selected) = %d, len(expected) = %d", len(selected), len(m.expected)) | |
| } | |
| for i, s := range selected { | |
| if m.expected[i] != s { | |
| t.Fatalf("selected[%d] = %s, expected[%d] = %s", i, s, i, m.expected[i]) | |
| } | |
| } | |
| }) | |
| } | |
| } |