summaryrefslogtreecommitdiff
path: root/internal/probemanager/manager_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/probemanager/manager_test.go')
-rw-r--r--internal/probemanager/manager_test.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/internal/probemanager/manager_test.go b/internal/probemanager/manager_test.go
index b75a579..ee436b9 100644
--- a/internal/probemanager/manager_test.go
+++ b/internal/probemanager/manager_test.go
@@ -2,6 +2,7 @@ package probemanager
import (
"errors"
+ "ior/internal/tracepoints"
"strings"
"sync"
"testing"
@@ -127,6 +128,46 @@ func TestManagerAttachAllToggleAndCounts(t *testing.T) {
}
}
+func TestManagerAttachAllWithDimensionSelectorAttachesOnlyEnabledSyscalls(t *testing.T) {
+ attacher := &fakeAttacher{
+ programs: map[string]*fakeProgram{
+ "handle_sys_enter_openat": {},
+ "handle_sys_exit_openat": {},
+ "handle_sys_enter_write": {},
+ "handle_sys_exit_write": {},
+ },
+ errs: map[string]error{},
+ }
+ mgr := NewManager(attacher)
+ selector, err := tracepoints.ParseSelectorWithDimensions("", "", tracepoints.DimensionSelectorConfig{
+ TraceSyscalls: "openat",
+ })
+ if err != nil {
+ t.Fatalf("build selector: %v", err)
+ }
+
+ err = mgr.AttachAll(selector.ShouldAttach, []string{
+ "sys_enter_openat", "sys_exit_openat",
+ "sys_enter_write", "sys_exit_write",
+ }, nil)
+ if err != nil {
+ t.Fatalf("AttachAll returned error: %v", err)
+ }
+
+ if got := attacher.programs["handle_sys_enter_openat"].attachCalls(); got != 1 {
+ t.Fatalf("openat enter attach calls = %d, want 1", got)
+ }
+ if got := attacher.programs["handle_sys_exit_openat"].attachCalls(); got != 1 {
+ t.Fatalf("openat exit attach calls = %d, want 1", got)
+ }
+ if got := attacher.programs["handle_sys_enter_write"].attachCalls(); got != 0 {
+ t.Fatalf("write enter attach calls = %d, want 0", got)
+ }
+ if got := attacher.programs["handle_sys_exit_write"].attachCalls(); got != 0 {
+ t.Fatalf("write exit attach calls = %d, want 0", got)
+ }
+}
+
func TestManagerAttachSerializesConcurrentCalls(t *testing.T) {
enterBlocked := make(chan struct{})
releaseEnter := make(chan struct{})