tetragon

Форк
0
/
mountinfo_test.go 
111 строк · 2.4 Кб
1
// SPDX-License-Identifier: Apache-2.0
2
// Copyright Authors of Tetragon
3

4
package mountinfo
5

6
import (
7
	"fmt"
8
	"os"
9
	"syscall"
10
	"testing"
11
)
12

13
func TestIsMountFS(t *testing.T) {
14
	type args struct {
15
		infos     []*MountInfo
16
		typ, root string
17
	}
18
	type want struct {
19
		mounted, instance bool
20
	}
21
	tests := []struct {
22
		name            string
23
		args            args
24
		want            want
25
		preRun, postRun func()
26
	}{
27
		{
28
			name: "/sys/fs/bpf empty directory",
29
			args: args{
30
				infos: []*MountInfo{
31
					{
32
						Root:           "/",
33
						MountPoint:     "/tmp/sys/fs/bpf",
34
						FilesystemType: FilesystemTypeBPFFS,
35
					},
36
				},
37
				typ:  FilesystemTypeBPFFS,
38
				root: "/tmp/sys/fs/bpf",
39
			},
40
			want: want{
41
				mounted:  true,
42
				instance: true,
43
			},
44
			preRun: func() {
45
				mountFS("/tmp/sys/fs/bpf", FilesystemTypeBPFFS)
46
			},
47
			postRun: func() {
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")
52
			},
53
		},
54
		{
55
			name: "/sys/fs/bpf not mounted",
56
			args: args{
57
				infos: []*MountInfo{
58
					{},
59
				},
60
				typ:  FilesystemTypeBPFFS,
61
				root: "/sys/fs/bpf",
62
			},
63
			want: want{
64
				mounted:  false,
65
				instance: false,
66
			},
67
			preRun:  func() {},
68
			postRun: func() {},
69
		},
70
	}
71
	for _, tt := range tests {
72
		t.Run(tt.name, func(t *testing.T) {
73
			tt.preRun()
74
			defer tt.postRun()
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)
79
			}
80
			switch {
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)
84
			}
85
		})
86
	}
87
}
88

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
91
// cycle.
92
func mountFS(root, kind string) error {
93
	mapRootStat, err := os.Stat(root)
94
	if err != nil {
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)
98
			}
99
		} else {
100
			return fmt.Errorf("failed to stat the mount path %s: %s", root, err)
101

102
		}
103
	} else if !mapRootStat.IsDir() {
104
		return fmt.Errorf("%s is a file which is not a directory", root)
105
	}
106

107
	if err := syscall.Mount(root, root, kind, 0, ""); err != nil {
108
		return fmt.Errorf("failed to mount %s %s: %s", root, kind, err)
109
	}
110
	return nil
111
}
112

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.