github.com/cilium/cilium@v1.16.2/pkg/monitor/datapath_policy_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 TestDecodePolicyVerdicyNotify(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, 32, PolicyVerdictNotifyLen) 20 21 input := PolicyVerdictNotify{ 22 Type: 0x00, 23 SubType: 0x01, 24 Source: 0x02_03, 25 Hash: 0x04_05_06_07, 26 OrigLen: 0x08_09_0a_0b, 27 CapLen: 0x0c_0d, 28 Version: 0x0e_10, 29 RemoteLabel: 0x11_12_13_14, 30 Verdict: 0x15_16_17_18, 31 DstPort: 0x19_1a, 32 Proto: 0x1b, 33 Flags: 0x1c, 34 AuthType: 0x1d, 35 Pad1: 0x1e, 36 Pad2: 0x20_21, 37 } 38 buf := bytes.NewBuffer(nil) 39 err := binary.Write(buf, byteorder.Native, input) 40 require.Nil(t, err) 41 42 output := &PolicyVerdictNotify{} 43 err = DecodePolicyVerdictNotify(buf.Bytes(), output) 44 require.Nil(t, err) 45 46 require.Equal(t, input.Type, output.Type) 47 require.Equal(t, input.SubType, output.SubType) 48 require.Equal(t, input.Source, output.Source) 49 require.Equal(t, input.Hash, output.Hash) 50 require.Equal(t, input.OrigLen, output.OrigLen) 51 require.Equal(t, input.CapLen, output.CapLen) 52 require.Equal(t, input.Version, output.Version) 53 require.Equal(t, input.RemoteLabel, output.RemoteLabel) 54 require.Equal(t, input.Verdict, output.Verdict) 55 require.Equal(t, input.DstPort, output.DstPort) 56 require.Equal(t, input.Proto, output.Proto) 57 require.Equal(t, input.Flags, output.Flags) 58 require.Equal(t, input.AuthType, output.AuthType) 59 require.Equal(t, input.Pad1, output.Pad1) 60 require.Equal(t, input.Pad2, output.Pad2) 61 } 62 63 func BenchmarkNewDecodePolicyVerdictNotify(b *testing.B) { 64 input := &PolicyVerdictNotify{} 65 buf := bytes.NewBuffer(nil) 66 67 if err := binary.Write(buf, byteorder.Native, input); err != nil { 68 b.Fatal(err) 69 } 70 71 b.ReportAllocs() 72 b.ResetTimer() 73 74 for i := 0; i < b.N; i++ { 75 pvn := &PolicyVerdictNotify{} 76 if err := DecodePolicyVerdictNotify(buf.Bytes(), pvn); err != nil { 77 b.Fatal(err) 78 } 79 } 80 } 81 82 func BenchmarkOldDecodePolicyVerdictNotify(b *testing.B) { 83 input := &PolicyVerdictNotify{} 84 buf := bytes.NewBuffer(nil) 85 86 if err := binary.Write(buf, byteorder.Native, input); err != nil { 87 b.Fatal(err) 88 } 89 90 b.ReportAllocs() 91 b.ResetTimer() 92 93 for i := 0; i < b.N; i++ { 94 pvn := &PolicyVerdictNotify{} 95 if err := binary.Read(bytes.NewBuffer(buf.Bytes()), byteorder.Native, pvn); err != nil { 96 b.Fatal(err) 97 } 98 } 99 }