You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
3.0 KiB

package tenus
import (
"net"
"testing"
"time"
)
type vethTest struct {
hostIfc string
vethOptions VethOptions
}
func Test_NewVethPair(t *testing.T) {
veth, err := NewVethPair()
if err != nil {
t.Fatalf("NewVethPair() failed to run: %s", err)
}
vethIfcName := veth.NetInterface().Name
vethPeerName := veth.PeerNetInterface().Name
tl := &testLink{}
if err := tl.prepTestLink(vethIfcName, ""); err != nil {
t.Skipf("NewVethPair test requries external command: %v", err)
}
if _, err := net.InterfaceByName(vethIfcName); err != nil {
t.Fatalf("Could not find %s on the host: %s", vethIfcName, err)
}
if _, err := net.InterfaceByName(vethPeerName); err != nil {
t.Fatalf("Could not find %s on the host: %s", vethPeerName, err)
}
testRes, err := linkInfo(vethIfcName, "veth")
if err != nil {
tl.teardown()
t.Fatalf("Failed to list %s operation mode: %s", vethIfcName, err)
}
if testRes.linkType != "veth" {
tl.teardown()
t.Fatalf("NewVethPair() failed: expected linktype veth, returned %s", testRes.linkType)
}
if err := tl.teardown(); err != nil {
t.Fatalf("testLink.teardown failed: %v", err)
} else {
time.Sleep(10 * time.Millisecond)
}
}
var vethOptionTests = []vethTest{
{"vethHost01", VethOptions{"vethGuest01"}},
{"vethHost02", VethOptions{"vethGuest02"}},
}
func Test_NewVethPairWithOptions(t *testing.T) {
for _, tt := range vethOptionTests {
tl := &testLink{}
if err := tl.prepTestLink(tt.hostIfc, ""); err != nil {
t.Skipf("NewVlanLink test requries external command: %v", err)
}
veth, err := NewVethPairWithOptions(tt.hostIfc, tt.vethOptions)
if err != nil {
t.Fatalf("NewVethPairWithOptions(%s, %v) failed to run: %s", tt.hostIfc, tt.vethOptions, err)
}
if _, err := net.InterfaceByName(tt.hostIfc); err != nil {
t.Fatalf("Could not find %s on the host: %s", tt.hostIfc, err)
}
if _, err := net.InterfaceByName(tt.vethOptions.PeerName); err != nil {
t.Fatalf("Could not find %s on the host: %s", tt.vethOptions.PeerName, err)
}
vethIfcName := veth.NetInterface().Name
if vethIfcName != tt.hostIfc {
tl.teardown()
t.Fatalf("NewVethPairWithOptions(%s, %v) failed: expected host ifc %s, returned %s",
tt.hostIfc, tt.vethOptions, tt.hostIfc, vethIfcName)
}
vethPeerName := veth.PeerNetInterface().Name
if vethPeerName != tt.vethOptions.PeerName {
tl.teardown()
t.Fatalf("NewVethPairWithOptions(%s, %v) failed: expected peer ifc %s, returned %s",
tt.hostIfc, tt.vethOptions, tt.vethOptions.PeerName, vethPeerName)
}
testRes, err := linkInfo(tt.hostIfc, "veth")
if err != nil {
tl.teardown()
t.Fatalf("Failed to list %s operation mode: %s", tt.hostIfc, err)
}
if testRes.linkType != "veth" {
tl.teardown()
t.Fatalf("NewVethPairWithOptions(%s, %v) failed: expected linktype veth, returned %s",
tt.hostIfc, tt.vethOptions, testRes.linkType)
}
if err := tl.teardown(); err != nil {
t.Fatalf("testLink.teardown failed: %v", err)
} else {
time.Sleep(10 * time.Millisecond)
}
}
}