...

Source file src/github.com/mdlayher/packet/packet_internal_test.go

Documentation: github.com/mdlayher/packet

     1  //go:build linux
     2  // +build linux
     3  
     4  package packet
     5  
     6  import (
     7  	"encoding/binary"
     8  	"fmt"
     9  	"math"
    10  	"testing"
    11  
    12  	"github.com/google/go-cmp/cmp"
    13  	"github.com/josharian/native"
    14  )
    15  
    16  func Test_htons(t *testing.T) {
    17  	tests := []struct {
    18  		name     string
    19  		i        int
    20  		vLE, vBE uint16
    21  		ok       bool
    22  	}{
    23  		{
    24  			name: "negative",
    25  			i:    -1,
    26  		},
    27  		{
    28  			name: "too large",
    29  			i:    math.MaxUint16 + 1,
    30  		},
    31  		{
    32  			name: "IPv4",
    33  			i:    0x0800,
    34  			vLE:  0x0008,
    35  			vBE:  0x0800,
    36  			ok:   true,
    37  		},
    38  		{
    39  			name: "IPv6",
    40  			i:    0x86dd,
    41  			vLE:  0xdd86,
    42  			vBE:  0x86dd,
    43  			ok:   true,
    44  		},
    45  	}
    46  
    47  	for _, tt := range tests {
    48  		t.Run(tt.name, func(t *testing.T) {
    49  			v, err := htons(tt.i)
    50  			if tt.ok && err != nil {
    51  				t.Fatalf("failed to perform htons: %v", err)
    52  			}
    53  			if !tt.ok && err == nil {
    54  				t.Fatal("expected an error, but none occurred")
    55  			}
    56  			if err != nil {
    57  				t.Logf("err: %v", err)
    58  				return
    59  			}
    60  
    61  			// Depending on our GOARCH, the result may be big or little endian.
    62  			var want uint16
    63  			if native.Endian == binary.ByteOrder(binary.LittleEndian) {
    64  				want = tt.vLE
    65  			} else {
    66  				want = tt.vBE
    67  			}
    68  
    69  			if diff := cmp.Diff(hex(want), hex(v)); diff != "" {
    70  				t.Fatalf("unexpected output for %s GOARCH (-want +got):\n%s", native.Endian.String(), diff)
    71  			}
    72  		})
    73  	}
    74  }
    75  
    76  func hex(v uint16) string {
    77  	return fmt.Sprintf("%#04x", v)
    78  }
    79  

View as plain text