1
// SPDX-License-Identifier: Apache-2.0
2
// Copyright Authors of Tetragon
13
func TestIsMountFS(t *testing.T) {
19
mounted, instance bool
25
preRun, postRun func()
28
name: "/sys/fs/bpf empty directory",
33
MountPoint: "/tmp/sys/fs/bpf",
34
FilesystemType: FilesystemTypeBPFFS,
37
typ: FilesystemTypeBPFFS,
38
root: "/tmp/sys/fs/bpf",
45
mountFS("/tmp/sys/fs/bpf", FilesystemTypeBPFFS)
48
syscall.Unmount("/tmp/sys/fs/bpf", 0)
49
syscall.Rmdir("/tmp/sys/fs/bpf")
50
syscall.Rmdir("/tmp/sys/fs")
51
syscall.Rmdir("/tmp/sys")
55
name: "/sys/fs/bpf not mounted",
60
typ: FilesystemTypeBPFFS,
71
for _, tt := range tests {
72
t.Run(tt.name, func(t *testing.T) {
75
m, i := IsMountFS(tt.args.infos, tt.args.typ, tt.args.root)
76
infos, _ := GetMountInfo()
77
for _, v := range infos {
78
fmt.Printf("%+v\n", *v)
81
case m != tt.want.mounted, m != tt.want.instance:
82
t.Errorf("IsMountFS() = got (%v,%v), want (%v,%v)",
83
m, i, tt.want.mounted, tt.want.instance)
89
// Copied from pkg/bpf/bpffs_linux.go. The reason it was not exported inside
90
// and used here is because importing that package would introduce an import
92
func mountFS(root, kind string) error {
93
mapRootStat, err := os.Stat(root)
95
if os.IsNotExist(err) {
96
if err := os.MkdirAll(root, 0755); err != nil {
97
return fmt.Errorf("unable to create %s mount directory: %s", kind, err)
100
return fmt.Errorf("failed to stat the mount path %s: %s", root, err)
103
} else if !mapRootStat.IsDir() {
104
return fmt.Errorf("%s is a file which is not a directory", root)
107
if err := syscall.Mount(root, root, kind, 0, ""); err != nil {
108
return fmt.Errorf("failed to mount %s %s: %s", root, kind, err)