From 331fc85da2a3185ee4f2fb8d06347ff0f2a1037d Mon Sep 17 00:00:00 2001 From: Florian Schade Date: Thu, 17 Oct 2024 02:51:56 +0200 Subject: [PATCH] fix: checker map mutation --- ocis-pkg/handlers/checker.go | 4 +++- ocis-pkg/handlers/checker_test.go | 10 ++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/ocis-pkg/handlers/checker.go b/ocis-pkg/handlers/checker.go index 0b211f8d9..76e1399fa 100644 --- a/ocis-pkg/handlers/checker.go +++ b/ocis-pkg/handlers/checker.go @@ -50,14 +50,16 @@ func (c CheckHandlerConfiguration) WithCheck(name string, check checker) CheckHa c.logger.Panic().Str("check", name).Msg("check already exists") } + c.checks = maps.Clone(c.checks) // prevent propagated check duplication, maps are references; c.checks[name] = check + return c } // WithChecks adds multiple checks to the CheckHandlerConfiguration. func (c CheckHandlerConfiguration) WithChecks(checks checkers) CheckHandlerConfiguration { for name, check := range checks { - c.WithCheck(name, check) + c.checks = c.WithCheck(name, check).checks } return c diff --git a/ocis-pkg/handlers/checker_test.go b/ocis-pkg/handlers/checker_test.go index 2e655396a..794486a29 100644 --- a/ocis-pkg/handlers/checker_test.go +++ b/ocis-pkg/handlers/checker_test.go @@ -21,13 +21,15 @@ func TestCheckHandlerConfiguration(t *testing.T) { handlerConfiguration := handlers.NewCheckHandlerConfiguration().WithCheck("check-1", nopCheck) t.Run("add check", func(t *testing.T) { - handlerConfiguration.WithCheck("check-2", nopCheck) - require.Equal(t, 2, len(handlers.NewCheckHandler(handlerConfiguration).Checks())) + inheritedHandlerConfiguration := handlerConfiguration.WithCheck("check-2", nopCheck) + require.Equal(t, 1, len(handlers.NewCheckHandler(handlerConfiguration).Checks())) + require.Equal(t, 2, len(handlers.NewCheckHandler(inheritedHandlerConfiguration).Checks())) }) t.Run("add checks", func(t *testing.T) { - handlerConfiguration.WithChecks(map[string]func(ctx context.Context) error{"check-3": nopCheck, "check-4": nopCheck}) - require.Equal(t, 4, len(handlers.NewCheckHandler(handlerConfiguration).Checks())) + inheritedHandlerConfiguration := handlerConfiguration.WithChecks(map[string]func(ctx context.Context) error{"check-2": nopCheck, "check-3": nopCheck}) + require.Equal(t, 1, len(handlers.NewCheckHandler(handlerConfiguration).Checks())) + require.Equal(t, 3, len(handlers.NewCheckHandler(inheritedHandlerConfiguration).Checks())) }) t.Run("checks are unique", func(t *testing.T) {