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 }