github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/net/bpf/vm_ret_test.go (about)

     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.
     4  
     5  package bpf_test
     6  
     7  import (
     8  	"testing"
     9  
    10  	"github.com/hxx258456/ccgo/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  }