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  }