package net
import (
- "bytes"
+ "reflect"
"testing"
)
-// LoopbackInterface returns a logical network interface for loopback
-// tests.
+// loopbackInterface returns an available logical network interface
+// for loopback tests. It returns nil if no suitable interface is
+// found.
func loopbackInterface() *Interface {
ift, err := Interfaces()
if err != nil {
return nil
}
-func sameInterface(i, j *Interface) bool {
- if i == nil || j == nil {
- return false
- }
- if i.Index == j.Index && i.Name == j.Name && bytes.Equal(i.HardwareAddr, j.HardwareAddr) {
- return true
- }
- return false
-}
-
func TestInterfaces(t *testing.T) {
ift, err := Interfaces()
if err != nil {
if err != nil {
t.Fatalf("InterfaceByIndex(%v) failed: %v", ifi.Index, err)
}
- if !sameInterface(ifxi, &ifi) {
- t.Fatalf("InterfaceByIndex(%v) = %v, want %v", ifi.Index, *ifxi, ifi)
+ if !reflect.DeepEqual(ifxi, &ifi) {
+ t.Fatalf("InterfaceByIndex(%v) = %v, want %v", ifi.Index, ifxi, ifi)
}
ifxn, err := InterfaceByName(ifi.Name)
if err != nil {
t.Fatalf("InterfaceByName(%q) failed: %v", ifi.Name, err)
}
- if !sameInterface(ifxn, &ifi) {
- t.Fatalf("InterfaceByName(%q) = %v, want %v", ifi.Name, *ifxn, ifi)
+ if !reflect.DeepEqual(ifxn, &ifi) {
+ t.Fatalf("InterfaceByName(%q) = %v, want %v", ifi.Name, ifxn, ifi)
}
t.Logf("%q: flags %q, ifindex %v, mtu %v", ifi.Name, ifi.Flags.String(), ifi.Index, ifi.MTU)
t.Logf("\thardware address %q", ifi.HardwareAddr.String())
func BenchmarkInterfaceByIndex(b *testing.B) {
ifi := loopbackInterface()
if ifi == nil {
- return
+ b.Skip("loopback interface not found")
}
for i := 0; i < b.N; i++ {
if _, err := InterfaceByIndex(ifi.Index); err != nil {
func BenchmarkInterfaceByName(b *testing.B) {
ifi := loopbackInterface()
if ifi == nil {
- return
+ b.Skip("loopback interface not found")
}
for i := 0; i < b.N; i++ {
if _, err := InterfaceByName(ifi.Name); err != nil {
func BenchmarkInterfacesAndAddrs(b *testing.B) {
ifi := loopbackInterface()
if ifi == nil {
- return
+ b.Skip("loopback interface not found")
}
for i := 0; i < b.N; i++ {
if _, err := ifi.Addrs(); err != nil {
func BenchmarkInterfacesAndMulticastAddrs(b *testing.B) {
ifi := loopbackInterface()
if ifi == nil {
- return
+ b.Skip("loopback interface not found")
}
for i := 0; i < b.N; i++ {
if _, err := ifi.MulticastAddrs(); err != nil {