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

     1  // Copyright 2013 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 ipv6_test
     6  
     7  import (
     8  	"fmt"
     9  	"net"
    10  	"runtime"
    11  	"testing"
    12  
    13  	"golang.org/x/net/internal/iana"
    14  	"golang.org/x/net/internal/nettest"
    15  	"golang.org/x/net/ipv6"
    16  )
    17  
    18  var supportsIPv6 bool = nettest.SupportsIPv6()
    19  
    20  func TestConnInitiatorPathMTU(t *testing.T) {
    21  	switch runtime.GOOS {
    22  	case "nacl", "plan9", "solaris", "windows":
    23  		t.Skipf("not supported on %s", runtime.GOOS)
    24  	}
    25  	if !supportsIPv6 {
    26  		t.Skip("ipv6 is not supported")
    27  	}
    28  
    29  	ln, err := net.Listen("tcp6", "[::1]:0")
    30  	if err != nil {
    31  		t.Fatal(err)
    32  	}
    33  	defer ln.Close()
    34  
    35  	done := make(chan bool)
    36  	go acceptor(t, ln, done)
    37  
    38  	c, err := net.Dial("tcp6", ln.Addr().String())
    39  	if err != nil {
    40  		t.Fatal(err)
    41  	}
    42  	defer c.Close()
    43  
    44  	if pmtu, err := ipv6.NewConn(c).PathMTU(); err != nil {
    45  		switch runtime.GOOS {
    46  		case "darwin": // older darwin kernels don't support IPV6_PATHMTU option
    47  			t.Logf("not supported on %s", runtime.GOOS)
    48  		default:
    49  			t.Fatal(err)
    50  		}
    51  	} else {
    52  		t.Logf("path mtu for %v: %v", c.RemoteAddr(), pmtu)
    53  	}
    54  
    55  	<-done
    56  }
    57  
    58  func TestConnResponderPathMTU(t *testing.T) {
    59  	switch runtime.GOOS {
    60  	case "nacl", "plan9", "solaris", "windows":
    61  		t.Skipf("not supported on %s", runtime.GOOS)
    62  	}
    63  	if !supportsIPv6 {
    64  		t.Skip("ipv6 is not supported")
    65  	}
    66  
    67  	ln, err := net.Listen("tcp6", "[::1]:0")
    68  	if err != nil {
    69  		t.Fatal(err)
    70  	}
    71  	defer ln.Close()
    72  
    73  	done := make(chan bool)
    74  	go connector(t, "tcp6", ln.Addr().String(), done)
    75  
    76  	c, err := ln.Accept()
    77  	if err != nil {
    78  		t.Fatal(err)
    79  	}
    80  	defer c.Close()
    81  
    82  	if pmtu, err := ipv6.NewConn(c).PathMTU(); err != nil {
    83  		switch runtime.GOOS {
    84  		case "darwin": // older darwin kernels don't support IPV6_PATHMTU option
    85  			t.Logf("not supported on %s", runtime.GOOS)
    86  		default:
    87  			t.Fatal(err)
    88  		}
    89  	} else {
    90  		t.Logf("path mtu for %v: %v", c.RemoteAddr(), pmtu)
    91  	}
    92  
    93  	<-done
    94  }
    95  
    96  func TestPacketConnChecksum(t *testing.T) {
    97  	switch runtime.GOOS {
    98  	case "nacl", "plan9", "solaris", "windows":
    99  		t.Skipf("not supported on %s", runtime.GOOS)
   100  	}
   101  	if !supportsIPv6 {
   102  		t.Skip("ipv6 is not supported")
   103  	}
   104  	if m, ok := nettest.SupportsRawIPSocket(); !ok {
   105  		t.Skip(m)
   106  	}
   107  
   108  	c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolOSPFIGP), "::") // OSPF for IPv6
   109  	if err != nil {
   110  		t.Fatal(err)
   111  	}
   112  	defer c.Close()
   113  
   114  	p := ipv6.NewPacketConn(c)
   115  	offset := 12 // see RFC 5340
   116  
   117  	for _, toggle := range []bool{false, true} {
   118  		if err := p.SetChecksum(toggle, offset); err != nil {
   119  			if toggle {
   120  				t.Fatalf("ipv6.PacketConn.SetChecksum(%v, %v) failed: %v", toggle, offset, err)
   121  			} else {
   122  				// Some platforms never allow to disable the kernel
   123  				// checksum processing.
   124  				t.Logf("ipv6.PacketConn.SetChecksum(%v, %v) failed: %v", toggle, offset, err)
   125  			}
   126  		}
   127  		if on, offset, err := p.Checksum(); err != nil {
   128  			t.Fatal(err)
   129  		} else {
   130  			t.Logf("kernel checksum processing enabled=%v, offset=%v", on, offset)
   131  		}
   132  	}
   133  }