From f54b949f3c9fe9fdb3b662a6526bf2734a6fce9a Mon Sep 17 00:00:00 2001 From: lvjiawei Date: Thu, 19 Dec 2019 15:35:43 +0800 Subject: [PATCH] Retrurn error if exist duplicate key in filter option 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 e324654076..e18317b6c3 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 d383d815e6..b52d932203 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") + }) }