diff --git a/pkg/kn/commands/trigger/update_flags.go b/pkg/kn/commands/trigger/update_flags.go index e32465407..e18317b6c 100644 --- a/pkg/kn/commands/trigger/update_flags.go +++ b/pkg/kn/commands/trigger/update_flags.go @@ -54,6 +54,9 @@ func (f *TriggerUpdateFlags) GetFilters() (map[string]string, error) { if len(parts) < 2 || parts[0] == "" || parts[1] == "" { return nil, fmt.Errorf("invalid filter %s", f.Filters) } else { + if _, ok := filters[parts[0]]; ok { + return nil, fmt.Errorf("duplicate key '%s' in filters %s", parts[0], f.Filters) + } filters[parts[0]] = parts[1] } } @@ -72,6 +75,9 @@ func (f *TriggerUpdateFlags) GetUpdateFilters() (map[string]string, []string, er if len(parts) < 2 || parts[0] == "" || parts[1] == "" { return nil, nil, fmt.Errorf("invalid filter %s", f.Filters) } + if _, ok := filters[parts[0]]; ok { + return nil, nil, fmt.Errorf("duplicate key '%s' in filters %s", parts[0], f.Filters) + } filters[parts[0]] = parts[1] } } diff --git a/pkg/kn/commands/trigger/update_flags_test.go b/pkg/kn/commands/trigger/update_flags_test.go index d383d815e..b52d93220 100644 --- a/pkg/kn/commands/trigger/update_flags_test.go +++ b/pkg/kn/commands/trigger/update_flags_test.go @@ -59,6 +59,14 @@ func TestGetFilters(t *testing.T) { _, err = createFlag.GetFilters() assert.ErrorContains(t, err, "invalid filter") }) + + t.Run("get duplicate filters", func(t *testing.T) { + createFlag := TriggerUpdateFlags{ + Filters: filterArray{"type=foo", "type=bar"}, + } + _, err := createFlag.GetFilters() + assert.ErrorContains(t, err, "duplicate key") + }) } func TestGetUpdateFilters(t *testing.T) { @@ -101,4 +109,12 @@ func TestGetUpdateFilters(t *testing.T) { assert.DeepEqual(t, wantedRemoved, removed) assert.DeepEqual(t, wantedUpdated, updated) }) + + t.Run("update duplicate filters", func(t *testing.T) { + createFlag := TriggerUpdateFlags{ + Filters: filterArray{"type=foo", "type=bar"}, + } + _, _, err := createFlag.GetUpdateFilters() + assert.ErrorContains(t, err, "duplicate key") + }) }