github.com/cilium/cilium@v1.16.2/pkg/monitor/datapath_debug_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package monitor
     5  
     6  import (
     7  	"bytes"
     8  	"encoding/binary"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/require"
    12  
    13  	"github.com/cilium/cilium/pkg/byteorder"
    14  )
    15  
    16  func TestDecodeDebugCapture(t *testing.T) {
    17  	// This check on the struct length constant is there to ensure that this
    18  	// test is updated when the struct changes.
    19  	require.Equal(t, 24, DebugCaptureLen)
    20  
    21  	input := DebugCapture{
    22  		Type:    0x00,
    23  		SubType: 0x01,
    24  		Source:  0x02_03,
    25  		Hash:    0x04_05_06_07,
    26  		OrigLen: 0x08_09_0a_0b,
    27  		Arg1:    0x0c_0d_0e_10,
    28  		Arg2:    0x11_12_13_14,
    29  	}
    30  
    31  	buf := bytes.NewBuffer(nil)
    32  	err := binary.Write(buf, byteorder.Native, input)
    33  	require.Nil(t, err)
    34  
    35  	output := &DebugCapture{}
    36  	err = DecodeDebugCapture(buf.Bytes(), output)
    37  	require.Nil(t, err)
    38  
    39  	require.Equal(t, input.Type, output.Type)
    40  	require.Equal(t, input.SubType, output.SubType)
    41  	require.Equal(t, input.Source, output.Source)
    42  	require.Equal(t, input.Hash, output.Hash)
    43  	require.Equal(t, input.OrigLen, output.OrigLen)
    44  	require.Equal(t, input.Arg1, output.Arg1)
    45  	require.Equal(t, input.Arg2, output.Arg2)
    46  }
    47  
    48  func BenchmarkNewDecodeDebugCapture(b *testing.B) {
    49  	input := &DebugCapture{}
    50  	buf := bytes.NewBuffer(nil)
    51  
    52  	if err := binary.Write(buf, byteorder.Native, input); err != nil {
    53  		b.Fatal(err)
    54  	}
    55  
    56  	b.ReportAllocs()
    57  	b.ResetTimer()
    58  
    59  	for i := 0; i < b.N; i++ {
    60  		dbg := &DebugCapture{}
    61  		if err := DecodeDebugCapture(buf.Bytes(), dbg); err != nil {
    62  			b.Fatal(err)
    63  		}
    64  	}
    65  }
    66  
    67  func BenchmarkOldDecodeDebugCapture(b *testing.B) {
    68  	input := &DebugCapture{}
    69  	buf := bytes.NewBuffer(nil)
    70  
    71  	if err := binary.Write(buf, byteorder.Native, input); err != nil {
    72  		b.Fatal(err)
    73  	}
    74  
    75  	b.ReportAllocs()
    76  	b.ResetTimer()
    77  
    78  	for i := 0; i < b.N; i++ {
    79  		dbg := &DebugCapture{}
    80  		if err := binary.Read(bytes.NewBuffer(buf.Bytes()), byteorder.Native, dbg); err != nil {
    81  			b.Fatal(err)
    82  		}
    83  	}
    84  }
    85  
    86  func TestDecodeDebugMsg(t *testing.T) {
    87  	// This check on the struct length constant is there to ensure that this
    88  	// test is updated when the struct changes.
    89  	require.Equal(t, 20, DebugMsgLen)
    90  
    91  	input := DebugMsg{
    92  		Type:    0x00,
    93  		SubType: 0x01,
    94  		Source:  0x02_03,
    95  		Hash:    0x04_05_06_07,
    96  		Arg1:    0x08_09_0a_0b,
    97  		Arg2:    0x0c_0d_0e_10,
    98  		Arg3:    0x11_12_13_14,
    99  	}
   100  
   101  	buf := bytes.NewBuffer(nil)
   102  	err := binary.Write(buf, byteorder.Native, input)
   103  	require.Nil(t, err)
   104  
   105  	output := &DebugMsg{}
   106  	err = DecodeDebugMsg(buf.Bytes(), output)
   107  	require.Nil(t, err)
   108  
   109  	require.Equal(t, input.Type, output.Type)
   110  	require.Equal(t, input.SubType, output.SubType)
   111  	require.Equal(t, input.Source, output.Source)
   112  	require.Equal(t, input.Hash, output.Hash)
   113  	require.Equal(t, input.Arg1, output.Arg1)
   114  	require.Equal(t, input.Arg2, output.Arg2)
   115  	require.Equal(t, input.Arg3, output.Arg3)
   116  }
   117  
   118  func BenchmarkNewDecodeDebugMsg(b *testing.B) {
   119  	input := &DebugMsg{}
   120  	buf := bytes.NewBuffer(nil)
   121  
   122  	if err := binary.Write(buf, byteorder.Native, input); err != nil {
   123  		b.Fatal(err)
   124  	}
   125  
   126  	b.ReportAllocs()
   127  	b.ResetTimer()
   128  
   129  	for i := 0; i < b.N; i++ {
   130  		dbg := &DebugMsg{}
   131  		if err := DecodeDebugMsg(buf.Bytes(), dbg); err != nil {
   132  			b.Fatal(err)
   133  		}
   134  	}
   135  }
   136  
   137  func BenchmarkOldDecodeDebugMsg(b *testing.B) {
   138  	input := &DebugMsg{}
   139  	buf := bytes.NewBuffer(nil)
   140  
   141  	if err := binary.Write(buf, byteorder.Native, input); err != nil {
   142  		b.Fatal(err)
   143  	}
   144  
   145  	b.ReportAllocs()
   146  	b.ResetTimer()
   147  
   148  	for i := 0; i < b.N; i++ {
   149  		dbg := &DebugMsg{}
   150  		if err := binary.Read(bytes.NewBuffer(buf.Bytes()), byteorder.Native, dbg); err != nil {
   151  			b.Fatal(err)
   152  		}
   153  	}
   154  }