tetragon
1// SPDX-License-Identifier: Apache-2.0
2// Copyright Authors of Tetragon
3
4package sensors5
6import (7"fmt"8"testing"9"time"10)
11
12// A sensor to test the intermediate policy states (loading / unloading)
13
14func makeTestDelayedSensor(t *testing.T) *TestDelayedSensor {15s := &TestDelayedSensor{16name: "test-delayed-sensor",17loaded: false,18ch: make(chan struct{}),19}20RegisterPolicyHandlerAtInit("dummy-policyhandler", &dummyHandler{s: s})21t.Cleanup(func() {22delete(registeredPolicyHandlers, "dummy-policyhandler")23})24
25return s26}
27
28type TestDelayedSensor struct {29name string30loaded bool31ch chan struct{}32}
33
34func (tds *TestDelayedSensor) GetName() string {35return tds.name36}
37
38func (tds *TestDelayedSensor) IsLoaded() bool {39return tds.loaded40}
41
42func (tds *TestDelayedSensor) Load(_ string) error {43select {44case <-tds.ch:45case <-time.After(10 * time.Second):46return fmt.Errorf("TestDelayedSensor/Load timeout when waiting for unblocking")47}48tds.loaded = true49return nil50}
51
52func (tds *TestDelayedSensor) Unload() error {53select {54case <-tds.ch:55case <-time.After(10 * time.Second):56return fmt.Errorf("TestDelayedSensor/Unload timeout when waiting for unblocking")57}58tds.loaded = false59return nil60}
61
62func (tds *TestDelayedSensor) Destroy() {63tds.loaded = false64}
65
66func (tds *TestDelayedSensor) unblock(t *testing.T) {67select {68case tds.ch <- struct{}{}:69default:70t.Fatalf("unblocked failed: channel does not seem to be empty")71}72
73}
74