parent
5dd65e8d9a
commit
028bcc51dc
|
|
@ -747,6 +747,8 @@ func runFilterSubHelmFilesTests(testcases []struct {
|
||||||
expectErr bool
|
expectErr bool
|
||||||
errMsg string
|
errMsg string
|
||||||
}, files map[string]string, t *testing.T, testName string) {
|
}, files map[string]string, t *testing.T, testName string) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
for _, testcase := range testcases {
|
for _, testcase := range testcases {
|
||||||
actual := []string{}
|
actual := []string{}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ func (l LabelFilter) Match(r ReleaseSpec) bool {
|
||||||
k := element[0]
|
k := element[0]
|
||||||
v := element[1]
|
v := element[1]
|
||||||
if rVal, ok := r.Labels[k]; !ok {
|
if rVal, ok := r.Labels[k]; !ok {
|
||||||
return true
|
|
||||||
} else if rVal == v {
|
} else if rVal == v {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,97 @@
|
||||||
|
package state
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/google/go-cmp/cmp"
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSelectReleasesWithOverrides(t *testing.T) {
|
||||||
|
type testcase struct {
|
||||||
|
subject string
|
||||||
|
selector []string
|
||||||
|
want []string
|
||||||
|
}
|
||||||
|
|
||||||
|
testcases := []testcase{
|
||||||
|
{
|
||||||
|
subject: "multiple OR selectors (nillable label first)",
|
||||||
|
selector: []string{"type=bar", "name=nolabel2", "name=nolabel1"},
|
||||||
|
want: []string{"nolabel1", "nolabel2", "foo"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
subject: "multiple OR selectors (non-nillable label first)",
|
||||||
|
selector: []string{"name=foo", "type!=bar"},
|
||||||
|
want: []string{"nolabel1", "nolabel2", "foo"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
subject: "multiple AND conditions (nillable label first)",
|
||||||
|
selector: []string{"type!=bar,name!=nolabel2"},
|
||||||
|
want: []string{"nolabel1"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
subject: "multiple AND conditions (non-nillable label first)",
|
||||||
|
selector: []string{"name!=nolabel2,type!=bar"},
|
||||||
|
want: []string{"nolabel1"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
subject: "inequality on nillable label",
|
||||||
|
selector: []string{"type!=bar"},
|
||||||
|
want: []string{"nolabel1", "nolabel2"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
subject: "equality on nillable label",
|
||||||
|
selector: []string{"type=bar"},
|
||||||
|
want: []string{"foo"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
subject: "inequality on non-nillable label",
|
||||||
|
selector: []string{"name!=nolabel1"},
|
||||||
|
want: []string{"nolabel2", "foo"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
subject: "equality on non-nillable label",
|
||||||
|
selector: []string{"name=nolabel1"},
|
||||||
|
want: []string{"nolabel1"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
example := []byte(`releases:
|
||||||
|
- name: nolabel1
|
||||||
|
namespace: kube-system
|
||||||
|
chart: stable/nolabel
|
||||||
|
- name: nolabel2
|
||||||
|
namespace: default
|
||||||
|
chart: stable/nolabel
|
||||||
|
- name: foo
|
||||||
|
namespace: kube-system
|
||||||
|
chart: stable/foo
|
||||||
|
labels:
|
||||||
|
type: bar
|
||||||
|
`)
|
||||||
|
|
||||||
|
var state HelmState
|
||||||
|
|
||||||
|
if err := yaml.Unmarshal(example, &state); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testcases {
|
||||||
|
state.Selectors = tc.selector
|
||||||
|
|
||||||
|
rs, err := state.GetSelectedReleasesWithOverrides()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("%s %s: %v", tc.selector, tc.subject, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var got []string
|
||||||
|
|
||||||
|
for _, r := range rs {
|
||||||
|
got = append(got, r.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
if d := cmp.Diff(tc.want, got); d != "" {
|
||||||
|
t.Errorf("%s %s: %s", tc.selector, tc.subject, d)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue