tetragon
59 строк · 2.1 Кб
1// SPDX-License-Identifier: Apache-2.0
2// Copyright Authors of Tetragon
3
4package policystatemetrics
5
6import (
7"context"
8"fmt"
9"io"
10"strings"
11"testing"
12
13"github.com/cilium/tetragon/pkg/observer"
14tus "github.com/cilium/tetragon/pkg/testutils/sensors"
15"github.com/cilium/tetragon/pkg/tracingpolicy"
16"github.com/prometheus/client_golang/prometheus"
17"github.com/prometheus/client_golang/prometheus/testutil"
18"github.com/stretchr/testify/assert"
19v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
20)
21
22func Test_policyStatusCollector_Collect(t *testing.T) {
23expectedMetrics := func(disabled, enabled, err, load_error int) io.Reader {
24return strings.NewReader(fmt.Sprintf(`# HELP tetragon_tracingpolicy_loaded The number of loaded tracing policy by state.
25# TYPE tetragon_tracingpolicy_loaded gauge
26tetragon_tracingpolicy_loaded{state="disabled"} %d
27tetragon_tracingpolicy_loaded{state="enabled"} %d
28tetragon_tracingpolicy_loaded{state="error"} %d
29tetragon_tracingpolicy_loaded{state="load_error"} %d
30`, disabled, enabled, err, load_error))
31}
32
33reg := prometheus.NewRegistry()
34
35// NB(kkourt): the policy state collector uses observer.GetSensorManager() to get the sensor
36// manager because in the observer tests we only initialize metrics while the observer
37// changes for every test (see:
38// https://github.com/cilium/tetragon/blob/22eb995b19207ac0ced2dd83950ec8e8aedd122d/pkg/observer/observertesthelper/observer_test_helper.go#L272-L276)
39manager := tus.GetTestSensorManager(context.TODO(), t).Manager
40observer.SetSensorManager(manager)
41t.Cleanup(observer.ResetSensorManager)
42
43collector := newPolicyStateCollector()
44reg.Register(collector)
45
46err := manager.AddTracingPolicy(context.TODO(), &tracingpolicy.GenericTracingPolicy{
47Metadata: v1.ObjectMeta{
48Name: "pizza",
49},
50})
51assert.NoError(t, err)
52err = testutil.CollectAndCompare(collector, expectedMetrics(0, 1, 0, 0))
53assert.NoError(t, err)
54
55err = manager.DisableTracingPolicy(context.TODO(), "pizza", "")
56assert.NoError(t, err)
57err = testutil.CollectAndCompare(collector, expectedMetrics(1, 0, 0, 0))
58assert.NoError(t, err)
59}
60