diff --git a/go.mod b/go.mod index 6e966d0..450d3f7 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,7 @@ require ( github.com/prometheus/client_golang v1.17.0 github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 + github.com/stretchr/testify v1.8.4 google.golang.org/grpc v1.61.0 google.golang.org/protobuf v1.31.0 k8s.io/api v0.28.4 @@ -69,7 +70,6 @@ require ( github.com/prometheus/common v0.44.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/stretchr/testify v1.8.4 // indirect github.com/urfave/cli v1.22.2 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect diff --git a/pkg/events/owner.go b/pkg/events/owner.go index bad7484..2ed3441 100644 --- a/pkg/events/owner.go +++ b/pkg/events/owner.go @@ -22,7 +22,7 @@ import ( // ManagingOwner returns the controller owner of the resource if present. func ManagingOwner(owners []v1.OwnerReference) *v1.OwnerReference { for _, o := range owners { - if *o.Controller { + if o.Controller != nil && *o.Controller { return &o } } diff --git a/pkg/events/owner_test.go b/pkg/events/owner_test.go new file mode 100644 index 0000000..24b0d60 --- /dev/null +++ b/pkg/events/owner_test.go @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright 2024 The Falco 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 events + +import ( + "testing" + + "github.com/stretchr/testify/require" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/ptr" +) + +func TestManagingOwner(t *testing.T) { + + tests := []struct { + name string + references []v1.OwnerReference + expected bool + }{ + { + name: "Controller is set to true", + references: []v1.OwnerReference{{ + Controller: ptr.To(true), + }}, + expected: true, + }, + { + name: "Controller is set to false", + references: []v1.OwnerReference{{ + Controller: ptr.To(false), + }}, + expected: false, + }, + { + name: "Controller is set to nil", + references: []v1.OwnerReference{{ + Controller: nil, + }}, + expected: false, + }, + } + + for _, test := range tests { + test := test + + t.Run(test.name, func(t *testing.T) { + t.Parallel() + + if ManagingOwner(test.references) == nil { + require.False(t, test.expected) + } else { + require.True(t, test.expected) + } + }) + } +}