fix audit union loop variables in closures

Kubernetes-commit: 85b027e6fa90dafac5d68d3ba41fd0dc4c53cbf1
This commit is contained in:
scott 2022-05-20 17:38:26 +08:00 committed by Kubernetes Publisher
parent 8bf4bca24f
commit 8becd60e02
2 changed files with 34 additions and 0 deletions

View File

@ -48,6 +48,7 @@ func (u union) ProcessEvents(events ...*auditinternal.Event) bool {
func (u union) Run(stopCh <-chan struct{}) error {
var funcs []func() error
for _, backend := range u.backends {
backend := backend
funcs = append(funcs, func() error {
return backend.Run(stopCh)
})

View File

@ -80,3 +80,36 @@ func TestUnion(t *testing.T) {
}
}
}
type cannotMultipleRunBackend struct {
started chan struct{}
}
func (b *cannotMultipleRunBackend) ProcessEvents(events ...*auditinternal.Event) bool {
return true
}
func (b *cannotMultipleRunBackend) Run(stopCh <-chan struct{}) error {
close(b.started)
return nil
}
func (b *cannotMultipleRunBackend) Shutdown() {}
func (b *cannotMultipleRunBackend) String() string {
return "cannotMultipleRunBackend"
}
func TestUnionRun(t *testing.T) {
backends := []Backend{
&cannotMultipleRunBackend{started: make(chan struct{})},
&cannotMultipleRunBackend{started: make(chan struct{})},
&cannotMultipleRunBackend{started: make(chan struct{})},
}
b := Union(backends...)
if err := b.Run(make(chan struct{})); err != nil {
t.Errorf("union backend run: %v", err)
}
}