summaryrefslogtreecommitdiffhomepage
path: root/netboot/netconf_integ_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'netboot/netconf_integ_test.go')
-rw-r--r--netboot/netconf_integ_test.go67
1 files changed, 47 insertions, 20 deletions
diff --git a/netboot/netconf_integ_test.go b/netboot/netconf_integ_test.go
index 30a7232..099296c 100644
--- a/netboot/netconf_integ_test.go
+++ b/netboot/netconf_integ_test.go
@@ -3,6 +3,9 @@
package netboot
import (
+ "fmt"
+ "io/ioutil"
+ "log"
"net"
"testing"
"time"
@@ -11,10 +14,9 @@ import (
"github.com/stretchr/testify/require"
)
-// Travis-CI uses ens4, and this test assumes that such interface
-// exists and is configurable. If you are running this test locally,
-// you may need to adjust this value.
-var ifname = "ens4"
+// The test assumes that the interface exists and is configurable.
+// If you are running this test locally, you may need to adjust this value.
+var ifname = "eth0"
func TestIfUp(t *testing.T) {
iface, err := IfUp(ifname, 2*time.Second)
@@ -28,24 +30,49 @@ func TestIfUpTimeout(t *testing.T) {
}
func TestConfigureInterface(t *testing.T) {
- nc := NetConf{
- Addresses: []AddrConf{
- AddrConf{IPNet: net.IPNet{IP: net.ParseIP("10.20.30.40")}},
+ // Linux-only. `netboot.ConfigureInterface` writes to /etc/resolv.conf when
+ // `NetConf.DNSServers` is set. In this test we make a backup of resolv.conf
+ // and subsequently restore it. This is really ugly, and not safe if
+ // multiple tests do the same.
+ resolvconf, err := ioutil.ReadFile("/etc/resolv.conf")
+ if err != nil {
+ panic(fmt.Sprintf("Failed to read /etc/resolv.conf: %v", err))
+ }
+ type testCase struct {
+ Name string
+ NetConf *NetConf
+ }
+ testCases := []testCase{
+ {
+ Name: "just IP addr",
+ NetConf: &NetConf{
+ Addresses: []AddrConf{
+ AddrConf{IPNet: net.IPNet{IP: net.ParseIP("10.20.30.40")}},
+ },
+ },
+ },
+ {
+ Name: "IP addr, DNS, and routers",
+ NetConf: &NetConf{
+ Addresses: []AddrConf{
+ AddrConf{IPNet: net.IPNet{IP: net.ParseIP("10.20.30.40")}},
+ },
+ DNSServers: []net.IP{net.ParseIP("8.8.8.8")},
+ DNSSearchList: []string{"slackware.it"},
+ Routers: []net.IP{net.ParseIP("10.20.30.254")},
+ },
},
}
- err := ConfigureInterface(ifname, &nc)
- require.NoError(t, err)
-}
+ for _, tc := range testCases {
+ t.Run(tc.Name, func(t *testing.T) {
+ require.NoError(t, ConfigureInterface(ifname, tc.NetConf))
-func TestConfigureInterfaceWithRouteAndDNS(t *testing.T) {
- nc := NetConf{
- Addresses: []AddrConf{
- AddrConf{IPNet: net.IPNet{IP: net.ParseIP("10.20.30.40")}},
- },
- DNSServers: []net.IP{net.ParseIP("8.8.8.8")},
- DNSSearchList: []string{"slackware.it"},
- Routers: []net.IP{net.ParseIP("10.20.30.254")},
+ // after the test, restore the content of /etc/resolv.conf . The permissions
+ // are used only if it didn't exist.
+ if err = ioutil.WriteFile("/etc/resolv.conf", resolvconf, 0644); err != nil {
+ panic(fmt.Sprintf("Failed to restore /etc/resolv.conf: %v", err))
+ }
+ log.Printf("Restored /etc/resolv.conf")
+ })
}
- err := ConfigureInterface(ifname, &nc)
- require.NoError(t, err)
}