322 lines
5.8 KiB
Go
322 lines
5.8 KiB
Go
|
package network
|
||
|
|
||
|
import (
|
||
|
"net"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestPhysicalInterfaceName(t *testing.T) {
|
||
|
p := physicalInterface{logicalInterface{name: "testname"}}
|
||
|
if p.Name() != "testname" {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestPhysicalInterfaceNetdev(t *testing.T) {
|
||
|
p := physicalInterface{}
|
||
|
if p.Netdev() != "" {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestPhysicalInterfaceLink(t *testing.T) {
|
||
|
p := physicalInterface{}
|
||
|
if p.Link() != "" {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestPhysicalInterfaceNetwork(t *testing.T) {
|
||
|
p := physicalInterface{logicalInterface{
|
||
|
name: "testname",
|
||
|
children: []InterfaceGenerator{
|
||
|
&bondInterface{
|
||
|
logicalInterface{
|
||
|
name: "testbond1",
|
||
|
},
|
||
|
nil,
|
||
|
},
|
||
|
&vlanInterface{
|
||
|
logicalInterface{
|
||
|
name: "testvlan1",
|
||
|
},
|
||
|
1,
|
||
|
"",
|
||
|
},
|
||
|
&vlanInterface{
|
||
|
logicalInterface{
|
||
|
name: "testvlan2",
|
||
|
},
|
||
|
1,
|
||
|
"",
|
||
|
},
|
||
|
},
|
||
|
}}
|
||
|
network := `[Match]
|
||
|
Name=testname
|
||
|
|
||
|
[Network]
|
||
|
Bond=testbond1
|
||
|
VLAN=testvlan1
|
||
|
VLAN=testvlan2
|
||
|
`
|
||
|
if p.Network() != network {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestBondInterfaceName(t *testing.T) {
|
||
|
b := bondInterface{logicalInterface{name: "testname"}, nil}
|
||
|
if b.Name() != "testname" {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestBondInterfaceNetdev(t *testing.T) {
|
||
|
b := bondInterface{logicalInterface{name: "testname"}, nil}
|
||
|
netdev := `[NetDev]
|
||
|
Kind=bond
|
||
|
Name=testname
|
||
|
`
|
||
|
if b.Netdev() != netdev {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestBondInterfaceLink(t *testing.T) {
|
||
|
b := bondInterface{}
|
||
|
if b.Link() != "" {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestBondInterfaceNetwork(t *testing.T) {
|
||
|
b := bondInterface{
|
||
|
logicalInterface{
|
||
|
name: "testname",
|
||
|
config: configMethodDHCP{},
|
||
|
children: []InterfaceGenerator{
|
||
|
&bondInterface{
|
||
|
logicalInterface{
|
||
|
name: "testbond1",
|
||
|
},
|
||
|
nil,
|
||
|
},
|
||
|
&vlanInterface{
|
||
|
logicalInterface{
|
||
|
name: "testvlan1",
|
||
|
},
|
||
|
1,
|
||
|
"",
|
||
|
},
|
||
|
&vlanInterface{
|
||
|
logicalInterface{
|
||
|
name: "testvlan2",
|
||
|
},
|
||
|
1,
|
||
|
"",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
nil,
|
||
|
}
|
||
|
network := `[Match]
|
||
|
Name=testname
|
||
|
|
||
|
[Network]
|
||
|
Bond=testbond1
|
||
|
VLAN=testvlan1
|
||
|
VLAN=testvlan2
|
||
|
DHCP=true
|
||
|
`
|
||
|
if b.Network() != network {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestVLANInterfaceName(t *testing.T) {
|
||
|
v := vlanInterface{logicalInterface{name: "testname"}, 1, ""}
|
||
|
if v.Name() != "testname" {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestVLANInterfaceNetdev(t *testing.T) {
|
||
|
v := vlanInterface{logicalInterface{name: "testname"}, 1, ""}
|
||
|
netdev := `[NetDev]
|
||
|
Kind=vlan
|
||
|
Name=testname
|
||
|
|
||
|
[VLAN]
|
||
|
Id=1
|
||
|
`
|
||
|
if v.Netdev() != netdev {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestVLANInterfaceLink(t *testing.T) {
|
||
|
v := vlanInterface{}
|
||
|
if v.Link() != "" {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestVLANInterfaceNetwork(t *testing.T) {
|
||
|
v := vlanInterface{
|
||
|
logicalInterface{
|
||
|
name: "testname",
|
||
|
config: configMethodStatic{
|
||
|
address: net.IPNet{
|
||
|
IP: []byte{192, 168, 1, 100},
|
||
|
Mask: []byte{255, 255, 255, 0},
|
||
|
},
|
||
|
nameservers: []net.IP{
|
||
|
[]byte{8, 8, 8, 8},
|
||
|
},
|
||
|
routes: []route{
|
||
|
route{
|
||
|
destination: net.IPNet{
|
||
|
IP: []byte{0, 0, 0, 0},
|
||
|
Mask: []byte{0, 0, 0, 0},
|
||
|
},
|
||
|
gateway: []byte{1, 2, 3, 4},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
0,
|
||
|
"",
|
||
|
}
|
||
|
network := `[Match]
|
||
|
Name=testname
|
||
|
|
||
|
[Network]
|
||
|
DNS=8.8.8.8
|
||
|
|
||
|
[Address]
|
||
|
Address=192.168.1.100/24
|
||
|
|
||
|
[Route]
|
||
|
Destination=0.0.0.0/0
|
||
|
Gateway=1.2.3.4
|
||
|
`
|
||
|
if v.Network() != network {
|
||
|
t.Log(v.Network())
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestBuildInterfacesLo(t *testing.T) {
|
||
|
stanzas := []*stanzaInterface{
|
||
|
&stanzaInterface{
|
||
|
name: "lo",
|
||
|
kind: interfacePhysical,
|
||
|
auto: false,
|
||
|
configMethod: configMethodLoopback{},
|
||
|
options: map[string][]string{},
|
||
|
},
|
||
|
}
|
||
|
interfaces := buildInterfaces(stanzas)
|
||
|
if len(interfaces) != 0 {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestBuildInterfaces(t *testing.T) {
|
||
|
stanzas := []*stanzaInterface{
|
||
|
&stanzaInterface{
|
||
|
name: "eth0",
|
||
|
kind: interfacePhysical,
|
||
|
auto: false,
|
||
|
configMethod: configMethodManual{},
|
||
|
options: map[string][]string{},
|
||
|
},
|
||
|
&stanzaInterface{
|
||
|
name: "bond0",
|
||
|
kind: interfaceBond,
|
||
|
auto: false,
|
||
|
configMethod: configMethodManual{},
|
||
|
options: map[string][]string{
|
||
|
"slaves": []string{"eth0"},
|
||
|
},
|
||
|
},
|
||
|
&stanzaInterface{
|
||
|
name: "bond1",
|
||
|
kind: interfaceBond,
|
||
|
auto: false,
|
||
|
configMethod: configMethodManual{},
|
||
|
options: map[string][]string{
|
||
|
"slaves": []string{"bond0"},
|
||
|
},
|
||
|
},
|
||
|
&stanzaInterface{
|
||
|
name: "vlan0",
|
||
|
kind: interfaceVLAN,
|
||
|
auto: false,
|
||
|
configMethod: configMethodManual{},
|
||
|
options: map[string][]string{
|
||
|
"id": []string{"0"},
|
||
|
"raw_device": []string{"eth0"},
|
||
|
},
|
||
|
},
|
||
|
&stanzaInterface{
|
||
|
name: "vlan1",
|
||
|
kind: interfaceVLAN,
|
||
|
auto: false,
|
||
|
configMethod: configMethodManual{},
|
||
|
options: map[string][]string{
|
||
|
"id": []string{"1"},
|
||
|
"raw_device": []string{"bond0"},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
interfaces := buildInterfaces(stanzas)
|
||
|
vlan1 := &vlanInterface{
|
||
|
logicalInterface{
|
||
|
name: "vlan1",
|
||
|
config: configMethodManual{},
|
||
|
children: []InterfaceGenerator{},
|
||
|
},
|
||
|
1,
|
||
|
"bond0",
|
||
|
}
|
||
|
vlan0 := &vlanInterface{
|
||
|
logicalInterface{
|
||
|
name: "vlan0",
|
||
|
config: configMethodManual{},
|
||
|
children: []InterfaceGenerator{},
|
||
|
},
|
||
|
0,
|
||
|
"eth0",
|
||
|
}
|
||
|
bond1 := &bondInterface{
|
||
|
logicalInterface{
|
||
|
name: "bond1",
|
||
|
config: configMethodManual{},
|
||
|
children: []InterfaceGenerator{},
|
||
|
},
|
||
|
[]string{"bond0"},
|
||
|
}
|
||
|
bond0 := &bondInterface{
|
||
|
logicalInterface{
|
||
|
name: "bond0",
|
||
|
config: configMethodManual{},
|
||
|
children: []InterfaceGenerator{vlan1, bond1},
|
||
|
},
|
||
|
[]string{"eth0"},
|
||
|
}
|
||
|
eth0 := &physicalInterface{
|
||
|
logicalInterface{
|
||
|
name: "eth0",
|
||
|
config: configMethodManual{},
|
||
|
children: []InterfaceGenerator{vlan0, bond0},
|
||
|
},
|
||
|
}
|
||
|
expect := []InterfaceGenerator{eth0, bond0, bond1, vlan0, vlan1}
|
||
|
if !reflect.DeepEqual(interfaces, expect) {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|