mirror of https://github.com/xSmurf/oz.git
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.
147 lines
3.6 KiB
147 lines
3.6 KiB
package tenus
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func Test_NewLink(t *testing.T) {
|
|
testLinks := []string{"ifc01", "ifc02", "ifc03"}
|
|
for _, tt := range testLinks {
|
|
tl := &testLink{}
|
|
|
|
if err := tl.prepTestLink(tt, "dummy"); err != nil {
|
|
t.Skipf("NewLink test requries external command: %v", err)
|
|
}
|
|
|
|
_, err := NewLink(tt)
|
|
if err != nil {
|
|
t.Fatalf("NewLink(%s) failed to run: %s", tt, err)
|
|
}
|
|
|
|
if _, err := net.InterfaceByName(tt); err != nil {
|
|
tl.teardown()
|
|
t.Fatalf("Could not find %s on the host: %s", tt, err)
|
|
}
|
|
|
|
if err := tl.teardown(); err != nil {
|
|
t.Fatalf("testLink.teardown failed: %v", err)
|
|
} else {
|
|
time.Sleep(10 * time.Millisecond)
|
|
}
|
|
}
|
|
}
|
|
|
|
type ifcLinkOptsTest struct {
|
|
testLink
|
|
opts LinkOptions
|
|
expected *net.Interface
|
|
}
|
|
|
|
var hwaddr, _ = net.ParseMAC("22:ce:e0:99:63:6f")
|
|
var ifcLinkOptsTests = []ifcLinkOptsTest{
|
|
{testLink{name: "ifc01"},
|
|
LinkOptions{MacAddr: "22:ce:e0:99:63:6f", MTU: 1400, Flags: net.FlagUp},
|
|
&net.Interface{Name: "ifc01", MTU: 1400, Flags: net.FlagUp, HardwareAddr: hwaddr}},
|
|
{testLink{name: "ifc02"},
|
|
LinkOptions{},
|
|
&net.Interface{Name: "ifc01"}},
|
|
{testLink{name: "ifc03"},
|
|
LinkOptions{MTU: -100},
|
|
nil},
|
|
}
|
|
|
|
func Test_NewLinkWithOptions(t *testing.T) {
|
|
for _, tt := range ifcLinkOptsTests {
|
|
tl := &testLink{}
|
|
|
|
if err := tl.prepTestLink(tt.name, "dummy"); err != nil {
|
|
t.Skipf("NewLinkWithOptions test requries external command: %v", err)
|
|
}
|
|
|
|
_, err := NewLinkWithOptions(tt.name, tt.opts)
|
|
if err != nil && tt.expected != nil {
|
|
t.Fatalf("NewLinkWithOptions(%s, %v) failed to run: %s", tt.name, tt.opts, err)
|
|
}
|
|
|
|
ifc, err := net.InterfaceByName(tt.name)
|
|
if err != nil && tt.expected != nil {
|
|
tl.teardown()
|
|
t.Fatalf("Could not find %s on the host: %s", tt.name, err)
|
|
}
|
|
|
|
if tt.expected != nil {
|
|
if ifc.Name != tt.name {
|
|
tl.teardown()
|
|
t.Fatalf("NewLinkWithOptions(%s, %v) failed: expected %s, returned: %s",
|
|
tt.name, tt.opts, tt.name, ifc.Name)
|
|
}
|
|
|
|
if tt.opts.MacAddr != "" {
|
|
if ifc.HardwareAddr.String() != tt.opts.MacAddr {
|
|
tl.teardown()
|
|
t.Fatalf("NewLinkWithOptions(%s, %v) failed: expected %s, returned: %s",
|
|
tt.name, tt.opts, tt.opts.MacAddr, ifc.HardwareAddr.String())
|
|
}
|
|
}
|
|
|
|
if tt.opts.MTU != 0 {
|
|
if ifc.MTU != tt.opts.MTU {
|
|
tl.teardown()
|
|
t.Fatalf("NewLinkWithOptions(%s, %v) failed: expected %d, returned: %d",
|
|
tt.name, tt.opts, tt.opts.MTU, ifc.MTU)
|
|
}
|
|
}
|
|
|
|
if tt.opts.Flags != 0 {
|
|
if (ifc.Flags & tt.opts.Flags) != tt.opts.Flags {
|
|
tl.teardown()
|
|
t.Fatalf("NewLinkWithOptions(%s, %v) failed: expected %v, returned: %v",
|
|
tt.name, tt.opts, tt.opts.Flags, ifc.Flags)
|
|
}
|
|
}
|
|
|
|
if err := tl.teardown(); err != nil {
|
|
t.Fatalf("testIfcLink.teardown failed: %v", err)
|
|
} else {
|
|
time.Sleep(10 * time.Millisecond)
|
|
}
|
|
}
|
|
|
|
if tt.expected == nil && ifc != nil {
|
|
tl.teardown()
|
|
t.Fatalf("NewLinkWithOptions(%s, %v) failed. Expected: %v, Returned: %v",
|
|
tt.name, tt.opts, tt.expected, ifc)
|
|
}
|
|
}
|
|
}
|
|
|
|
func Test_DeleteLink(t *testing.T) {
|
|
testLinks := []string{"ifc01", "ifc02", "ifc03"}
|
|
for _, tt := range testLinks {
|
|
tl := &testLink{}
|
|
|
|
if err := tl.prepTestLink(tt, "dummy"); err != nil {
|
|
t.Skipf("DeleteLink test requries external command: %v", err)
|
|
}
|
|
|
|
if err := tl.create(); err != nil {
|
|
t.Fatalf("testLink.setup failed: %v", err)
|
|
} else {
|
|
time.Sleep(10 * time.Millisecond)
|
|
}
|
|
|
|
if err := DeleteLink(tt); err != nil {
|
|
tl.teardown()
|
|
t.Fatalf("Failed to delete %s interface: %s", tt, err)
|
|
}
|
|
|
|
i, _ := net.InterfaceByName(tt)
|
|
if i != nil {
|
|
tl.teardown()
|
|
t.Fatalf("DeleteLink(%s) expected: nil, returned: %v", tt, i)
|
|
}
|
|
}
|
|
}
|