From 16e340f12f8d6888aec452987895afe1728beedf Mon Sep 17 00:00:00 2001 From: "xinjun.jiang" Date: Tue, 22 Sep 2026 17:16:33 +0800 Subject: [PATCH] api: trim whitespace before matching event groups Individual event names already accept surrounding whitespace, but group shorthands are matched before trimming. Normalize each token before both lookups so comma-separated input such as pod, container works in API consumers and the logger plugin. Assisted-by: OpenAI Codex Signed-off-by: xinjun.jiang --- pkg/api/event.go | 3 ++- pkg/api/event_test.go | 48 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 pkg/api/event_test.go diff --git a/pkg/api/event.go b/pkg/api/event.go index e52ebc58..239668d6 100644 --- a/pkg/api/event.go +++ b/pkg/api/event.go @@ -91,6 +91,7 @@ func ParseEventMask(events ...string) (EventMask, error) { for _, event := range events { lcEvents := strings.ToLower(event) for _, name := range strings.Split(lcEvents, ",") { + name = strings.TrimSpace(name) switch name { case "all": mask |= ValidEvents @@ -111,7 +112,7 @@ func ParseEventMask(events ...string) (EventMask, error) { continue } - bit, ok := bits[strings.TrimSpace(name)] + bit, ok := bits[name] if !ok { return 0, fmt.Errorf("unknown event %q", name) } diff --git a/pkg/api/event_test.go b/pkg/api/event_test.go new file mode 100644 index 00000000..d6a12da8 --- /dev/null +++ b/pkg/api/event_test.go @@ -0,0 +1,48 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package api + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestParseEventMaskWhitespace(t *testing.T) { + for _, event := range []string{"all", "pod", "podsandbox", "container", "RunPodSandbox"} { + t.Run(event, func(t *testing.T) { + want, err := ParseEventMask(event) + require.NoError(t, err) + for _, input := range []string{" " + event, event + " ", "\t" + event + "\n"} { + got, err := ParseEventMask(input) + require.NoError(t, err) + require.Equal(t, want, got) + } + }) + } + t.Run("comma separated groups", func(t *testing.T) { + want, err := ParseEventMask("pod,container") + require.NoError(t, err) + got, err := ParseEventMask("pod, container") + require.NoError(t, err) + require.Equal(t, want, got) + }) + t.Run("unknown events remain invalid", func(t *testing.T) { + _, err := ParseEventMask(" pod, unknown ") + require.Error(t, err) + }) +}