github.com/cilium/cilium@v1.16.2/pkg/fqdn/dnsproxy/udp_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package dnsproxy
     5  
     6  import (
     7  	"net"
     8  	"testing"
     9  )
    10  
    11  func TestComputeIPv6Checksum(t *testing.T) {
    12  	testCases := []struct {
    13  		name        string
    14  		srcIP       net.IP
    15  		dstIP       net.IP
    16  		udpPayload  []byte
    17  		expectedSum uint16
    18  	}{
    19  		{
    20  			name:  "Transmitted Checksum for Even Number of Words",
    21  			srcIP: net.IPv6loopback,
    22  			dstIP: net.IPv6loopback,
    23  			udpPayload: []byte{
    24  				0x01, 0x02, // Sample data (16-bit word 1)
    25  				0x03, 0x04, // Sample data (16-bit word 2)
    26  			},
    27  			expectedSum: 0xfbe2,
    28  		},
    29  		{
    30  			name:  "Transmitted Checksum for Odd Number of Words",
    31  			srcIP: net.IPv6loopback,
    32  			dstIP: net.IPv6loopback,
    33  			udpPayload: []byte{
    34  				0x01, 0x02, // Sample data (16-bit word 1)
    35  				0x03, 0x04, // Sample data (16-bit word 2)
    36  				0x05, 0x06, // Sample data (16-bit word 3)
    37  			},
    38  			expectedSum: 0xf6da,
    39  		},
    40  		{
    41  			name:        "No Transmitted Checksum",
    42  			srcIP:       net.IPv6unspecified,
    43  			dstIP:       net.IPv6unspecified,
    44  			udpPayload:  nil,
    45  			expectedSum: 0xffff, // Transmit all ones if the computed checksum is zero
    46  		},
    47  	}
    48  
    49  	for _, tc := range testCases {
    50  		t.Run(tc.name, func(t *testing.T) {
    51  			checksum := computeIPv6Checksum(tc.srcIP, tc.dstIP, tc.udpPayload)
    52  			if checksum != tc.expectedSum {
    53  				t.Errorf("Expected checksum %04X, but got %04X", tc.expectedSum, checksum)
    54  			}
    55  		})
    56  	}
    57  }