108 lines · 2.9 KB · Go
RawDownload
// Copyright 2012 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. package net import (	"fmt"	"os/exec"	"testing") func (ti *testInterface) setBroadcast(suffix int) error {	ti.name = fmt.Sprintf("gotest%d", suffix)	xname, err := exec.LookPath("ip")	if err != nil {		return err	}	ti.setupCmds = append(ti.setupCmds, &exec.Cmd{		Path: xname,		Args: []string{"ip", "link", "add", ti.name, "type", "dummy"},	})	ti.setupCmds = append(ti.setupCmds, &exec.Cmd{		Path: xname,		Args: []string{"ip", "address", "add", ti.local, "peer", ti.remote, "dev", ti.name},	})	ti.teardownCmds = append(ti.teardownCmds, &exec.Cmd{		Path: xname,		Args: []string{"ip", "address", "del", ti.local, "peer", ti.remote, "dev", ti.name},	})	ti.teardownCmds = append(ti.teardownCmds, &exec.Cmd{		Path: xname,		Args: []string{"ip", "link", "delete", ti.name, "type", "dummy"},	})	return nil} func (ti *testInterface) setPointToPoint(suffix int) error {	ti.name = fmt.Sprintf("gotest%d", suffix)	xname, err := exec.LookPath("ip")	if err != nil {		return err	}	ti.setupCmds = append(ti.setupCmds, &exec.Cmd{		Path: xname,		Args: []string{"ip", "tunnel", "add", ti.name, "mode", "gre", "local", ti.local, "remote", ti.remote},	})	ti.setupCmds = append(ti.setupCmds, &exec.Cmd{		Path: xname,		Args: []string{"ip", "address", "add", ti.local, "peer", ti.remote, "dev", ti.name},	})	ti.teardownCmds = append(ti.teardownCmds, &exec.Cmd{		Path: xname,		Args: []string{"ip", "address", "del", ti.local, "peer", ti.remote, "dev", ti.name},	})	ti.teardownCmds = append(ti.teardownCmds, &exec.Cmd{		Path: xname,		Args: []string{"ip", "tunnel", "del", ti.name, "mode", "gre", "local", ti.local, "remote", ti.remote},	})	return nil} const (	numOfTestIPv4MCAddrs = 14	numOfTestIPv6MCAddrs = 18) var (	igmpInterfaceTable = []Interface{		{Name: "lo"},		{Name: "eth0"}, {Name: "eth1"}, {Name: "eth2"},		{Name: "eth0.100"}, {Name: "eth0.101"}, {Name: "eth0.102"}, {Name: "eth0.103"},		{Name: "device1tap2"},	}	igmp6InterfaceTable = []Interface{		{Name: "lo"},		{Name: "eth0"}, {Name: "eth1"}, {Name: "eth2"},		{Name: "eth0.100"}, {Name: "eth0.101"}, {Name: "eth0.102"}, {Name: "eth0.103"},		{Name: "device1tap2"},		{Name: "pan0"},	}) func TestParseProcNet(t *testing.T) {	defer func() {		if p := recover(); p != nil {			t.Fatalf("panicked: %v", p)		}	}() 	var ifmat4 []Addr	for _, ifi := range igmpInterfaceTable {		ifmat := parseProcNetIGMP("testdata/igmp", &ifi)		ifmat4 = append(ifmat4, ifmat...)	}	if len(ifmat4) != numOfTestIPv4MCAddrs {		t.Fatalf("got %d; want %d", len(ifmat4), numOfTestIPv4MCAddrs)	} 	var ifmat6 []Addr	for _, ifi := range igmp6InterfaceTable {		ifmat := parseProcNetIGMP6("testdata/igmp6", &ifi)		ifmat6 = append(ifmat6, ifmat...)	}	if len(ifmat6) != numOfTestIPv6MCAddrs {		t.Fatalf("got %d; want %d", len(ifmat6), numOfTestIPv6MCAddrs)	}}