Skip to content

Commit

Permalink
fix fieldset.New bug when prefix slice has len < cap (#2851)
Browse files Browse the repository at this point in the history
* fix fieldset.New bug when prefix slice has len < cap

* ignore gocritic warning
  • Loading branch information
sivukhin committed Dec 3, 2023
1 parent bd9657f commit 5e98a16
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 10 deletions.
2 changes: 1 addition & 1 deletion plugin/federation/fieldset/fieldset.go
Expand Up @@ -134,7 +134,7 @@ func parseUnnestedKeyFieldSet(raw string, prefix []string) Set {
ret := Set{}

for _, s := range strings.Fields(raw) {
next := append(prefix[:], s) //nolint:gocritic // slicing out on purpose
next := append(prefix[0:len(prefix):len(prefix)], s) //nolint:gocritic // set cap=len in order to force slice reallocation
ret = append(ret, next)
}
return ret
Expand Down
37 changes: 28 additions & 9 deletions plugin/federation/fieldset/fieldset_test.go
Expand Up @@ -43,18 +43,37 @@ func TestNestedWithoutPrefix(t *testing.T) {
}

func TestWithPrefix(t *testing.T) {
fieldSet := New("foo bar{id}", []string{"prefix"})
t.Run("prefix with len=capacity", func(t *testing.T) {
fieldSet := New("foo bar{id}", []string{"prefix"})

require.Len(t, fieldSet, 2)
require.Len(t, fieldSet, 2)

require.Len(t, fieldSet[0], 2)
require.Equal(t, "prefix", fieldSet[0][0])
require.Equal(t, "foo", fieldSet[0][1])
require.Len(t, fieldSet[0], 2)
require.Equal(t, "prefix", fieldSet[0][0])
require.Equal(t, "foo", fieldSet[0][1])

require.Len(t, fieldSet[1], 3)
require.Equal(t, "prefix", fieldSet[1][0])
require.Equal(t, "bar", fieldSet[1][1])
require.Equal(t, "id", fieldSet[1][2])
require.Len(t, fieldSet[1], 3)
require.Equal(t, "prefix", fieldSet[1][0])
require.Equal(t, "bar", fieldSet[1][1])
require.Equal(t, "id", fieldSet[1][2])
})
t.Run("prefix with len<capacity", func(t *testing.T) {
prefix := make([]string, 0, 2)
prefix = append(prefix, "prefix")
fieldSet := New("foo bar{id}", prefix)

require.Len(t, fieldSet, 2)
t.Log(fieldSet)

require.Len(t, fieldSet[0], 2)
require.Equal(t, "prefix", fieldSet[0][0])
require.Equal(t, "foo", fieldSet[0][1])

require.Len(t, fieldSet[1], 3)
require.Equal(t, "prefix", fieldSet[1][0])
require.Equal(t, "bar", fieldSet[1][1])
require.Equal(t, "id", fieldSet[1][2])
})
}

func TestInvalid(t *testing.T) {
Expand Down

0 comments on commit 5e98a16

Please sign in to comment.