github.com/cilium/ebpf@v0.10.0/link/cgroup_test.go (about) 1 package link 2 3 import ( 4 "testing" 5 6 "github.com/cilium/ebpf" 7 "github.com/cilium/ebpf/internal/testutils" 8 ) 9 10 func TestAttachCgroup(t *testing.T) { 11 cgroup, prog := mustCgroupFixtures(t) 12 13 link, err := AttachCgroup(CgroupOptions{ 14 Path: cgroup.Name(), 15 Attach: ebpf.AttachCGroupInetEgress, 16 Program: prog, 17 }) 18 testutils.SkipIfNotSupported(t, err) 19 if err != nil { 20 t.Fatal(err) 21 } 22 23 if haveBPFLink() == nil { 24 if _, ok := link.(*linkCgroup); !ok { 25 t.Fatalf("Have support for bpf_link, but got %T instead of linkCgroup", link) 26 } 27 } else { 28 if _, ok := link.(*progAttachCgroup); !ok { 29 t.Fatalf("Expected progAttachCgroup, got %T instead", link) 30 } 31 } 32 } 33 34 func TestProgAttachCgroup(t *testing.T) { 35 cgroup, prog := mustCgroupFixtures(t) 36 37 link, err := newProgAttachCgroup(cgroup, ebpf.AttachCGroupInetEgress, prog, 0) 38 if err != nil { 39 t.Fatal("Can't create link:", err) 40 } 41 42 testLink(t, link, prog) 43 } 44 45 func TestProgAttachCgroupAllowMulti(t *testing.T) { 46 cgroup, prog := mustCgroupFixtures(t) 47 48 link, err := newProgAttachCgroup(cgroup, ebpf.AttachCGroupInetEgress, prog, flagAllowMulti) 49 testutils.SkipIfNotSupported(t, err) 50 if err != nil { 51 t.Fatal("Can't create link:", err) 52 } 53 54 // It's currently not possible for a program to replace 55 // itself. 56 prog2 := mustLoadProgram(t, ebpf.CGroupSKB, ebpf.AttachCGroupInetEgress, "") 57 testLink(t, link, prog2) 58 } 59 60 func TestLinkCgroup(t *testing.T) { 61 cgroup, prog := mustCgroupFixtures(t) 62 63 link, err := newLinkCgroup(cgroup, ebpf.AttachCGroupInetEgress, prog) 64 testutils.SkipIfNotSupported(t, err) 65 if err != nil { 66 t.Fatal("Can't create link:", err) 67 } 68 69 testLink(t, link, prog) 70 }