Skip to content

Commit

Permalink
tetragon: Add test for exec events generated throgh main
Browse files Browse the repository at this point in the history
Execute tetragon through main and make sure we get exec events
generated.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
  • Loading branch information
olsajiri committed Nov 10, 2024
1 parent 38d2ef8 commit 3f0107e
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 2 deletions.
5 changes: 4 additions & 1 deletion cmd/tetragon/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,10 @@ func loadInitialSensor(ctx context.Context) error {
func tetragonExecute() error {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
return tetragonExecuteCtx(ctx, cancel, func() {})
}

func tetragonExecuteCtx(ctx context.Context, cancel context.CancelFunc, ready func()) error {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

Expand Down Expand Up @@ -514,7 +517,7 @@ func tetragonExecute() error {
go logStatus(ctx, obs)
}

return obs.Start(ctx)
return obs.StartReady(ctx, ready)
}

func waitCRDs(config *rest.Config) error {
Expand Down
61 changes: 61 additions & 0 deletions cmd/tetragon/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of Tetragon

package main

import (
"context"
"os"
"testing"

ec "github.com/cilium/tetragon/api/v1/tetragon/codegen/eventchecker"
"github.com/cilium/tetragon/pkg/defaults"
"github.com/cilium/tetragon/pkg/jsonchecker"
"github.com/cilium/tetragon/pkg/option"
"github.com/cilium/tetragon/pkg/testutils"
tus "github.com/cilium/tetragon/pkg/testutils/sensors"
"github.com/stretchr/testify/assert"
)

func TestMain(m *testing.M) {
ec := tus.TestSensorsRun(m, "SensorBugtool")
os.Exit(ec)
}

func TestGeneratedExecEvents(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())

ready := func() {
cancel()
}

option.Config.ExportRateLimit = -1
option.Config.DataCacheSize = 1024
option.Config.ProcessCacheSize = 65536
option.Config.BpfDir = defaults.DefaultMapPrefix
option.Config.HubbleLib = tus.Conf().TetragonLib
option.Config.TracingPolicyDir = defaults.DefaultTpDir

f, err := testutils.CreateExportFile(t)
if err != nil {
t.Fatalf("testutils.CreateExportFilefailed: %v\n", err)
}
defer f.Close()

fname, err := testutils.GetExportFilename(t)
if err != nil {
t.Fatalf("testutils.GetExportFilename failed: %v\n", err)
}
option.Config.ExportFilename = fname

err = tetragonExecuteCtx(ctx, cancel, ready)
assert.NoError(t, err)

checker := ec.NewUnorderedEventChecker(
ec.NewProcessExecChecker("").WithProcess(
ec.NewProcessChecker().WithPid(1)),
)

err = jsonchecker.JsonTestCheck(t, checker)
assert.NoError(t, err)
}
6 changes: 5 additions & 1 deletion pkg/observer/observer.go
Original file line number Diff line number Diff line change
Expand Up @@ -331,10 +331,14 @@ func (k *Observer) UpdateRuntimeConf(bpfDir string) error {

// Start starts the observer
func (k *Observer) Start(ctx context.Context) error {
return k.StartReady(ctx, func() {})
}

func (k *Observer) StartReady(ctx context.Context, ready func()) error {
k.PerfConfig = bpf.DefaultPerfEventConfig()

var err error
if err = k.RunEvents(ctx, func() {}); err != nil {
if err = k.RunEvents(ctx, ready); err != nil {
return fmt.Errorf("tetragon, aborting runtime error: %w", err)
}
return nil
Expand Down

0 comments on commit 3f0107e

Please # to comment.