ebpf_exporter

Форк
0
/
kstack_test.go 
95 строк · 2.3 Кб
1
package decoder
2

3
import (
4
	"bytes"
5
	"os"
6
	"testing"
7

8
	"github.com/cloudflare/ebpf_exporter/v2/config"
9
	"github.com/cloudflare/ebpf_exporter/v2/kallsyms"
10
)
11

12
func TestKStackDecoder(t *testing.T) {
13
	cases := []struct {
14
		in  []byte
15
		out []byte
16
	}{
17
		{
18
			in: []byte{
19
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
21
			},
22
			out: []byte(""),
23
		},
24
		{
25
			in: []byte{
26
				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
27
				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
28
				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
29
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
30
			},
31
			out: []byte("one\none\ntwo"),
32
		},
33
		{
34
			in: []byte{
35
				0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
36
				0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37
				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
38
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39
			},
40
			out: []byte("three\ntwo\ntwo"),
41
		},
42
		{
43
			in: []byte{
44
				0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
45
				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
47
			},
48
			out: []byte("three\nzero"),
49
		},
50
		{
51
			in: []byte{
52
				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53
				0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
54
				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
56
			},
57
			out: []byte("??\nthree\n??"),
58
		},
59
	}
60

61
	fd, err := os.CreateTemp("", "kallsyms")
62
	if err != nil {
63
		t.Fatalf("Error creating temporary file for kallsyms: %v", err)
64
	}
65

66
	defer os.Remove(fd.Name())
67

68
	_, err = fd.WriteString("0000000000000004 T one\n0000000000000006 T two\n00000000000000aa T three\n")
69
	if err != nil {
70
		t.Fatalf("Error writing fake kallsyms data to %q: %v", fd.Name(), err)
71
	}
72

73
	decoder, err := kallsyms.NewDecoder(fd.Name())
74
	if err != nil {
75
		t.Fatalf("Error creating ksym decoder for %q: %v", fd.Name(), err)
76
	}
77

78
	_, err = fd.WriteString("0000000000000002 T zero\n")
79
	if err != nil {
80
		t.Fatalf("Error writing additional fake kallsyms data to %q: %v", fd.Name(), err)
81
	}
82

83
	d := KStack{decoder}
84

85
	for _, c := range cases {
86
		out, err := d.Decode(c.in, config.Decoder{})
87
		if err != nil {
88
			t.Errorf("Error decoding %#v: %s", c.in, err)
89
		}
90

91
		if !bytes.Equal(out, c.out) {
92
			t.Errorf("Expected %q, got %q", c.out, out)
93
		}
94
	}
95
}
96

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

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

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

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