1 // Copyright 2016 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
10 "golang.org/x/net/bpf"
13 func TestVMJumpOne(t *testing.T) {
14 vm, done, err := testVM(t, []bpf.Instruction{
30 t.Fatalf("failed to load BPF program: %v", err)
34 out, err := vm.Run([]byte{
35 0xff, 0xff, 0xff, 0xff,
36 0xff, 0xff, 0xff, 0xff,
40 t.Fatalf("unexpected error while running program: %v", err)
42 if want, got := 1, out; want != got {
43 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",
48 func TestVMJumpOutOfProgram(t *testing.T) {
49 _, _, err := testVM(t, []bpf.Instruction{
55 if errStr(err) != "cannot jump 1 instructions; jumping past program bounds" {
56 t.Fatalf("unexpected error: %v", err)
60 func TestVMJumpIfTrueOutOfProgram(t *testing.T) {
61 _, _, err := testVM(t, []bpf.Instruction{
68 if errStr(err) != "cannot jump 2 instructions in true case; jumping past program bounds" {
69 t.Fatalf("unexpected error: %v", err)
73 func TestVMJumpIfFalseOutOfProgram(t *testing.T) {
74 _, _, err := testVM(t, []bpf.Instruction{
81 if errStr(err) != "cannot jump 3 instructions in false case; jumping past program bounds" {
82 t.Fatalf("unexpected error: %v", err)
86 func TestVMJumpIfEqual(t *testing.T) {
87 vm, done, err := testVM(t, []bpf.Instruction{
105 t.Fatalf("failed to load BPF program: %v", err)
109 out, err := vm.Run([]byte{
110 0xff, 0xff, 0xff, 0xff,
111 0xff, 0xff, 0xff, 0xff,
115 t.Fatalf("unexpected error while running program: %v", err)
117 if want, got := 1, out; want != got {
118 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",
123 func TestVMJumpIfNotEqual(t *testing.T) {
124 vm, done, err := testVM(t, []bpf.Instruction{
130 Cond: bpf.JumpNotEqual,
142 t.Fatalf("failed to load BPF program: %v", err)
146 out, err := vm.Run([]byte{
147 0xff, 0xff, 0xff, 0xff,
148 0xff, 0xff, 0xff, 0xff,
152 t.Fatalf("unexpected error while running program: %v", err)
154 if want, got := 1, out; want != got {
155 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",
160 func TestVMJumpIfGreaterThan(t *testing.T) {
161 vm, done, err := testVM(t, []bpf.Instruction{
167 Cond: bpf.JumpGreaterThan,
179 t.Fatalf("failed to load BPF program: %v", err)
183 out, err := vm.Run([]byte{
184 0xff, 0xff, 0xff, 0xff,
185 0xff, 0xff, 0xff, 0xff,
189 t.Fatalf("unexpected error while running program: %v", err)
191 if want, got := 4, out; want != got {
192 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",
197 func TestVMJumpIfLessThan(t *testing.T) {
198 vm, done, err := testVM(t, []bpf.Instruction{
204 Cond: bpf.JumpLessThan,
216 t.Fatalf("failed to load BPF program: %v", err)
220 out, err := vm.Run([]byte{
221 0xff, 0xff, 0xff, 0xff,
222 0xff, 0xff, 0xff, 0xff,
226 t.Fatalf("unexpected error while running program: %v", err)
228 if want, got := 4, out; want != got {
229 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",
234 func TestVMJumpIfGreaterOrEqual(t *testing.T) {
235 vm, done, err := testVM(t, []bpf.Instruction{
241 Cond: bpf.JumpGreaterOrEqual,
253 t.Fatalf("failed to load BPF program: %v", err)
257 out, err := vm.Run([]byte{
258 0xff, 0xff, 0xff, 0xff,
259 0xff, 0xff, 0xff, 0xff,
263 t.Fatalf("unexpected error while running program: %v", err)
265 if want, got := 4, out; want != got {
266 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",
271 func TestVMJumpIfLessOrEqual(t *testing.T) {
272 vm, done, err := testVM(t, []bpf.Instruction{
278 Cond: bpf.JumpLessOrEqual,
290 t.Fatalf("failed to load BPF program: %v", err)
294 out, err := vm.Run([]byte{
295 0xff, 0xff, 0xff, 0xff,
296 0xff, 0xff, 0xff, 0xff,
300 t.Fatalf("unexpected error while running program: %v", err)
302 if want, got := 4, out; want != got {
303 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",
308 func TestVMJumpIfBitsSet(t *testing.T) {
309 vm, done, err := testVM(t, []bpf.Instruction{
315 Cond: bpf.JumpBitsSet,
327 t.Fatalf("failed to load BPF program: %v", err)
331 out, err := vm.Run([]byte{
332 0xff, 0xff, 0xff, 0xff,
333 0xff, 0xff, 0xff, 0xff,
337 t.Fatalf("unexpected error while running program: %v", err)
339 if want, got := 2, out; want != got {
340 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",
345 func TestVMJumpIfBitsNotSet(t *testing.T) {
346 vm, done, err := testVM(t, []bpf.Instruction{
352 Cond: bpf.JumpBitsNotSet,
364 t.Fatalf("failed to load BPF program: %v", err)
368 out, err := vm.Run([]byte{
369 0xff, 0xff, 0xff, 0xff,
370 0xff, 0xff, 0xff, 0xff,
374 t.Fatalf("unexpected error while running program: %v", err)
376 if want, got := 2, out; want != got {
377 t.Fatalf("unexpected number of output bytes:\n- want: %d\n- got: %d",