浏览代码

go.net/ipv4: fix ancillary data socket option tests on old darwin

Looks like their UDP stacks don't support ancillary data socket options.

LGTM=iant
R=iant
CC=golang-codereviews
https://golang.org/cl/153330043
Mikio Hara 11 年之前
父节点
当前提交
68e5815bee
共有 4 个文件被更改,包括 46 次插入6 次删除
  1. 29 0
      ipv4/error_posix_test.go
  2. 11 0
      ipv4/error_stub_test.go
  3. 3 3
      ipv4/multicast_test.go
  4. 3 3
      ipv4/unicast_test.go

+ 29 - 0
ipv4/error_posix_test.go

@@ -0,0 +1,29 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
+
+package ipv4_test
+
+import (
+	"os"
+	"syscall"
+)
+
+func protocolNotSupported(err error) bool {
+	switch err := err.(type) {
+	case syscall.Errno:
+		if err == syscall.EPROTONOSUPPORT {
+			return true
+		}
+	case *os.SyscallError:
+		switch err := err.Err.(type) {
+		case syscall.Errno:
+			if err == syscall.EPROTONOSUPPORT {
+				return true
+			}
+		}
+	}
+	return false
+}

+ 11 - 0
ipv4/error_stub_test.go

@@ -0,0 +1,11 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build nacl plan9
+
+package ipv4_test
+
+func protocolNotSupported(err error) bool {
+	return false
+}

+ 3 - 3
ipv4/multicast_test.go

@@ -62,7 +62,7 @@ func TestPacketConnReadWriteMulticastUDP(t *testing.T) {
 	cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
 
 	for i, toggle := range []bool{true, false, true} {
-		if err := p.SetControlMessage(cf, toggle); err != nil {
+		if err := p.SetControlMessage(cf, toggle); err != nil && !protocolNotSupported(err) {
 			t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
 		}
 		if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
@@ -135,7 +135,7 @@ func TestPacketConnReadWriteMulticastICMP(t *testing.T) {
 		if err != nil {
 			t.Fatalf("icmp.Message.Marshal failed: %v", err)
 		}
-		if err := p.SetControlMessage(cf, toggle); err != nil {
+		if err := p.SetControlMessage(cf, toggle); err != nil && !protocolNotSupported(err) {
 			t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
 		}
 		if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
@@ -228,7 +228,7 @@ func TestRawConnReadWriteMulticastICMP(t *testing.T) {
 			Protocol: 1,
 			Dst:      dst.IP,
 		}
-		if err := r.SetControlMessage(cf, toggle); err != nil {
+		if err := r.SetControlMessage(cf, toggle); err != nil && !protocolNotSupported(err) {
 			t.Fatalf("ipv4.RawConn.SetControlMessage failed: %v", err)
 		}
 		if err := r.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {

+ 3 - 3
ipv4/unicast_test.go

@@ -113,7 +113,7 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
 	cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
 
 	for i, toggle := range []bool{true, false, true} {
-		if err := p.SetControlMessage(cf, toggle); err != nil {
+		if err := p.SetControlMessage(cf, toggle); err != nil && !protocolNotSupported(err) {
 			t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
 		}
 		p.SetTTL(i + 1)
@@ -173,7 +173,7 @@ func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
 		if err != nil {
 			t.Fatalf("icmp.Message.Marshal failed: %v", err)
 		}
-		if err := p.SetControlMessage(cf, toggle); err != nil {
+		if err := p.SetControlMessage(cf, toggle); err != nil && !protocolNotSupported(err) {
 			t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
 		}
 		p.SetTTL(i + 1)
@@ -257,7 +257,7 @@ func TestRawConnReadWriteUnicastICMP(t *testing.T) {
 			Protocol: 1,
 			Dst:      dst.IP,
 		}
-		if err := r.SetControlMessage(cf, toggle); err != nil {
+		if err := r.SetControlMessage(cf, toggle); err != nil && !protocolNotSupported(err) {
 			t.Fatalf("ipv4.RawConn.SetControlMessage failed: %v", err)
 		}
 		if err := r.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {