1
2
3
4
5 package bpf_test
6
7 import (
8 "testing"
9
10 "golang.org/x/net/bpf"
11 )
12
13 func TestVMRetA(t *testing.T) {
14 vm, done, err := testVM(t, []bpf.Instruction{
15 bpf.LoadAbsolute{
16 Off: 8,
17 Size: 1,
18 },
19 bpf.RetA{},
20 })
21 if err != nil {
22 t.Fatalf("failed to load BPF program: %v", err)
23 }
24 defer done()
25
26 out, err := vm.Run([]byte{
27 0xff, 0xff, 0xff, 0xff,
28 0xff, 0xff, 0xff, 0xff,
29 9,
30 })
31 if err != nil {
32 t.Fatalf("unexpected error while running program: %v", err)
33 }
34 if want, got := 1, out; want != got {
35 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",
36 want, got)
37 }
38 }
39
40 func TestVMRetALargerThanInput(t *testing.T) {
41 vm, done, err := testVM(t, []bpf.Instruction{
42 bpf.LoadAbsolute{
43 Off: 8,
44 Size: 2,
45 },
46 bpf.RetA{},
47 })
48 if err != nil {
49 t.Fatalf("failed to load BPF program: %v", err)
50 }
51 defer done()
52
53 out, err := vm.Run([]byte{
54 0xff, 0xff, 0xff, 0xff,
55 0xff, 0xff, 0xff, 0xff,
56 0, 255,
57 })
58 if err != nil {
59 t.Fatalf("unexpected error while running program: %v", err)
60 }
61 if want, got := 2, out; want != got {
62 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",
63 want, got)
64 }
65 }
66
67 func TestVMRetConstant(t *testing.T) {
68 vm, done, err := testVM(t, []bpf.Instruction{
69 bpf.RetConstant{
70 Val: 9,
71 },
72 })
73 if err != nil {
74 t.Fatalf("failed to load BPF program: %v", err)
75 }
76 defer done()
77
78 out, err := vm.Run([]byte{
79 0xff, 0xff, 0xff, 0xff,
80 0xff, 0xff, 0xff, 0xff,
81 0, 1,
82 })
83 if err != nil {
84 t.Fatalf("unexpected error while running program: %v", err)
85 }
86 if want, got := 1, out; want != got {
87 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",
88 want, got)
89 }
90 }
91
92 func TestVMRetConstantLargerThanInput(t *testing.T) {
93 vm, done, err := testVM(t, []bpf.Instruction{
94 bpf.RetConstant{
95 Val: 16,
96 },
97 })
98 if err != nil {
99 t.Fatalf("failed to load BPF program: %v", err)
100 }
101 defer done()
102
103 out, err := vm.Run([]byte{
104 0xff, 0xff, 0xff, 0xff,
105 0xff, 0xff, 0xff, 0xff,
106 0, 1,
107 })
108 if err != nil {
109 t.Fatalf("unexpected error while running program: %v", err)
110 }
111 if want, got := 2, out; want != got {
112 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",
113 want, got)
114 }
115 }
116
View as plain text