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 }