ebpf_exporter
61 строка · 1.0 Кб
1package decoder
2
3import (
4"bytes"
5"runtime"
6"strconv"
7"testing"
8
9"github.com/cloudflare/ebpf_exporter/v2/config"
10)
11
12type syscallTestCase struct {
13in []byte
14out []byte
15}
16
17func TestSyscallDecoder(t *testing.T) {
18cases := []syscallTestCase{}
19
20arm64 := map[int]string{
210: "io_setup",
221: "io_destroy",
23293: "rseq",
24447: "memfd_secret",
25}
26
27amd64 := map[int]string{
280: "read",
291: "write",
30293: "pipe2",
31447: "memfd_secret",
32}
33
34var arch map[int]string
35
36switch runtime.GOARCH {
37case "arm64":
38arch = arm64
39case "amd64":
40arch = amd64
41default:
42t.Errorf("unsupported architecture: %q", runtime.GOARCH)
43}
44
45for number, name := range arch {
46cases = append(cases, syscallTestCase{[]byte(strconv.Itoa(number)), []byte(name)})
47}
48
49for _, c := range cases {
50d := &Syscall{}
51
52out, err := d.Decode(c.in, config.Decoder{})
53if err != nil {
54t.Errorf("Error decoding %#v to %#v: %s", c.in, c.out, err)
55}
56
57if !bytes.Equal(out, c.out) {
58t.Errorf("Expected %s, got %s", c.out, out)
59}
60}
61}
62