From 2b518d1e4e419bc0511d671cc1060ddb0435842f Mon Sep 17 00:00:00 2001 From: Lv Jiawei Date: Thu, 19 Dec 2019 17:25:31 +0800 Subject: [PATCH] Retrurn error if exist duplicate key in filter option (#575) fix #569 --- pkg/kn/commands/trigger/update_flags.go | 6 ++++++ pkg/kn/commands/trigger/update_flags_test.go | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) 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") + }) }