github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/net/ipv4/header_test.go (about)

     1  // Copyright 2012 The Go Authors.  All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package ipv4
     6  
     7  import (
     8  	"bytes"
     9  	"net"
    10  	"reflect"
    11  	"runtime"
    12  	"strings"
    13  	"testing"
    14  )
    15  
    16  var (
    17  	wireHeaderFromKernel = [HeaderLen]byte{
    18  		0x45, 0x01, 0xbe, 0xef,
    19  		0xca, 0xfe, 0x45, 0xdc,
    20  		0xff, 0x01, 0xde, 0xad,
    21  		172, 16, 254, 254,
    22  		192, 168, 0, 1,
    23  	}
    24  	wireHeaderToKernel = [HeaderLen]byte{
    25  		0x45, 0x01, 0xbe, 0xef,
    26  		0xca, 0xfe, 0x45, 0xdc,
    27  		0xff, 0x01, 0xde, 0xad,
    28  		172, 16, 254, 254,
    29  		192, 168, 0, 1,
    30  	}
    31  	wireHeaderFromTradBSDKernel = [HeaderLen]byte{
    32  		0x45, 0x01, 0xdb, 0xbe,
    33  		0xca, 0xfe, 0xdc, 0x45,
    34  		0xff, 0x01, 0xde, 0xad,
    35  		172, 16, 254, 254,
    36  		192, 168, 0, 1,
    37  	}
    38  	wireHeaderFromFreeBSD10Kernel = [HeaderLen]byte{
    39  		0x45, 0x01, 0xef, 0xbe,
    40  		0xca, 0xfe, 0xdc, 0x45,
    41  		0xff, 0x01, 0xde, 0xad,
    42  		172, 16, 254, 254,
    43  		192, 168, 0, 1,
    44  	}
    45  	wireHeaderToTradBSDKernel = [HeaderLen]byte{
    46  		0x45, 0x01, 0xef, 0xbe,
    47  		0xca, 0xfe, 0xdc, 0x45,
    48  		0xff, 0x01, 0xde, 0xad,
    49  		172, 16, 254, 254,
    50  		192, 168, 0, 1,
    51  	}
    52  	// TODO(mikio): Add platform dependent wire header formats when
    53  	// we support new platforms.
    54  
    55  	testHeader = &Header{
    56  		Version:  Version,
    57  		Len:      HeaderLen,
    58  		TOS:      1,
    59  		TotalLen: 0xbeef,
    60  		ID:       0xcafe,
    61  		Flags:    DontFragment,
    62  		FragOff:  1500,
    63  		TTL:      255,
    64  		Protocol: 1,
    65  		Checksum: 0xdead,
    66  		Src:      net.IPv4(172, 16, 254, 254),
    67  		Dst:      net.IPv4(192, 168, 0, 1),
    68  	}
    69  )
    70  
    71  func TestMarshalHeader(t *testing.T) {
    72  	b, err := testHeader.Marshal()
    73  	if err != nil {
    74  		t.Fatal(err)
    75  	}
    76  	var wh []byte
    77  	switch runtime.GOOS {
    78  	case "darwin", "dragonfly", "netbsd":
    79  		wh = wireHeaderToTradBSDKernel[:]
    80  	case "freebsd":
    81  		if freebsdVersion < 1000000 {
    82  			wh = wireHeaderToTradBSDKernel[:]
    83  		} else {
    84  			wh = wireHeaderFromFreeBSD10Kernel[:]
    85  		}
    86  	default:
    87  		wh = wireHeaderToKernel[:]
    88  	}
    89  	if !bytes.Equal(b, wh) {
    90  		t.Fatalf("got %#v; want %#v", b, wh)
    91  	}
    92  }
    93  
    94  func TestParseHeader(t *testing.T) {
    95  	var wh []byte
    96  	switch runtime.GOOS {
    97  	case "darwin", "dragonfly", "netbsd":
    98  		wh = wireHeaderFromTradBSDKernel[:]
    99  	case "freebsd":
   100  		if freebsdVersion < 1000000 {
   101  			wh = wireHeaderFromTradBSDKernel[:]
   102  		} else {
   103  			wh = wireHeaderFromFreeBSD10Kernel[:]
   104  		}
   105  	default:
   106  		wh = wireHeaderFromKernel[:]
   107  	}
   108  	h, err := ParseHeader(wh)
   109  	if err != nil {
   110  		t.Fatal(err)
   111  	}
   112  	if !reflect.DeepEqual(h, testHeader) {
   113  		t.Fatalf("got %#v; want %#v", h, testHeader)
   114  	}
   115  	s := h.String()
   116  	if strings.Contains(s, ",") {
   117  		t.Fatalf("should be space-separated values: %s", s)
   118  	}
   119  }