Skip to content

Commit

Permalink
Allow fully-qualified resource names to be used with --exclude (#49)
Browse files Browse the repository at this point in the history
Allow fully-qualified resource names to be used with `--exclude`
  • Loading branch information
corneliusweig authored Feb 2, 2020
2 parents 3e2dc04 + 5933e45 commit 185b51c
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 33 deletions.
1 change: 1 addition & 0 deletions internal/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ func extractRelevantResources(grs []groupResource, exclusions []string) []groupR
name := r.fullName()
resourceIds := r.APIResource.ShortNames
resourceIds = append(resourceIds, r.APIResource.Name)
resourceIds = append(resourceIds, name)
if forbidden.HasAny(resourceIds...) {
logrus.Debugf("Excluding %s", name)
continue
Expand Down
75 changes: 42 additions & 33 deletions internal/client/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,56 +26,65 @@ import (
func TestExtractRelevantResourceNames(t *testing.T) {
var tests = []struct {
testName string
resources []v1.APIResource
groups []string
resources []groupResource
exclude []string
expected []string
}{
{
testName: "a single resource",
resources: []v1.APIResource{{Name: "foo"}},
groups: []string{"group"},
expected: []string{"foo.group"},
testName: "a single resource",
resources: []groupResource{
groupResource{APIResource: v1.APIResource{Name: "foo"}, APIGroup: "group"},
},
expected: []string{"foo.group"},
},
{
testName: "two resources, without group",
resources: []v1.APIResource{{Name: "foo"}, {Name: "bar"}},
groups: []string{"group", ""},
expected: []string{"bar", "foo.group"},
testName: "two resources, without group",
resources: []groupResource{
groupResource{APIResource: v1.APIResource{Name: "foo"}, APIGroup: "group"},
groupResource{APIResource: v1.APIResource{Name: "bar"}, APIGroup: ""},
},
expected: []string{"bar", "foo.group"},
},
{
testName: "two resources, same group",
resources: []v1.APIResource{{Name: "foo"}, {Name: "bar"}},
groups: []string{"group", "group"},
expected: []string{"bar.group", "foo.group"},
testName: "two resources, same group",
resources: []groupResource{
groupResource{APIResource: v1.APIResource{Name: "foo"}, APIGroup: "group"},
groupResource{APIResource: v1.APIResource{Name: "bar"}, APIGroup: "group"},
},
expected: []string{"bar.group", "foo.group"},
},
{
testName: "two filtered by Name",
resources: []v1.APIResource{{Name: "foo"}, {Name: "bar"}},
groups: []string{"group", "puorg"},
exclude: []string{"bar"},
expected: []string{"foo.group"},
testName: "two filtered by Name",
resources: []groupResource{
groupResource{APIResource: v1.APIResource{Name: "foo"}, APIGroup: "group"},
groupResource{APIResource: v1.APIResource{Name: "bar"}, APIGroup: "puorg"},
},
exclude: []string{"bar"},
expected: []string{"foo.group"},
},
{
testName: "two filtered by ShortName",
resources: []v1.APIResource{{Name: "foo", ShortNames: []string{"baz"}}, {Name: "bar"}},
groups: []string{"group", "puorg"},
exclude: []string{"baz"},
expected: []string{"bar.puorg"},
testName: "two filtered by ShortName",
resources: []groupResource{
groupResource{APIResource: v1.APIResource{Name: "foo", ShortNames: []string{"baz"}}, APIGroup: "group"},
groupResource{APIResource: v1.APIResource{Name: "bar"}, APIGroup: "puorg"},
},
exclude: []string{"baz"},
expected: []string{"bar.puorg"},
},
{
testName: "two filtered by fully-qualified resource name",
resources: []groupResource{
groupResource{APIResource: v1.APIResource{Name: "foo"}, APIGroup: "group"},
groupResource{APIResource: v1.APIResource{Name: "bar"}, APIGroup: "puorg"},
},
exclude: []string{"foo.group"},
expected: []string{"bar.puorg"},
},
}

for _, test := range tests {
t.Run(test.testName, func(t *testing.T) {
var grs []groupResource
for i := range test.resources {
grs = append(grs, groupResource{
APIGroup: test.groups[i],
APIResource: test.resources[i],
})
}

names := extractRelevantResources(grs, test.exclude)
names := extractRelevantResources(test.resources, test.exclude)
assert.Equal(t, test.expected, ToResourceTypes(names))
})
}
Expand Down

0 comments on commit 185b51c

Please sign in to comment.