mirror of
https://github.com/clearlinux/clr-installer.git
synced 2026-09-06 05:31:58 +00:00
Now check for which service is handling wired network interfaces. Needed by the TUI which still handles static IP configurations for wired connections. TODO: Once NetworkManager is the new OS default, we can explore configuring wireless interfaces via the TUI as well. TODO: Consider change the other systemctl calls to use new dbus. Dropping coverage requirement for this build Signed-off-by: Mark D Horn <mark.d.horn@intel.com>
328 lines
7.1 KiB
Go
328 lines
7.1 KiB
Go
// Copyright © 2018 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
package network
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/clearlinux/clr-installer/utils"
|
|
)
|
|
|
|
func TestGoodURL(t *testing.T) {
|
|
|
|
if err := CheckURL("http://www.google.com"); err != nil {
|
|
t.Fatalf("Good HTTP URL failed: %s", err)
|
|
}
|
|
|
|
if err := CheckURL("https://www.google.com"); err != nil {
|
|
t.Fatalf("Good HTTPS URL failed: %s", err)
|
|
}
|
|
|
|
if err := CheckURL("https://cdn.download.clearlinux.org/update/"); err != nil {
|
|
t.Fatalf("Good Clear Linux HTTPS URL failed: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestBadURL(t *testing.T) {
|
|
|
|
if err := CheckURL("http://www.google.zonk"); err == nil {
|
|
t.Fatalf("Bad HTTP URL passed incorrectly: %s", err)
|
|
}
|
|
|
|
if err := CheckURL("https://www.google.zonk"); err == nil {
|
|
t.Fatalf("Bad HTTPS URL passed incorrectly: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestIpAddress(t *testing.T) {
|
|
tests := []struct {
|
|
addr string
|
|
expected string
|
|
}{
|
|
{"10.0.0.1", ""},
|
|
{"192.168.10.1", ""},
|
|
{"10.0.0.0", ""},
|
|
{"0.0.0.0", ""},
|
|
{"0.0.0.0.0", "Invalid IP Addr"},
|
|
{"0.0.0", "Invalid IP Addr"},
|
|
}
|
|
|
|
for _, curr := range tests {
|
|
msg := IsValidIP(curr.addr)
|
|
|
|
if msg != curr.expected {
|
|
t.Fatalf("IsValidIP() expected to return %s but returned %s", curr.expected, msg)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestInterfaces(t *testing.T) {
|
|
if utils.IsCheckCoverage() {
|
|
t.Skip("Running on behalf of \"check-coverage\", skipping test")
|
|
}
|
|
|
|
ifaces, err := Interfaces()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if len(ifaces) == 0 {
|
|
t.Fatalf("Should have returned at least one interface")
|
|
}
|
|
}
|
|
|
|
func TestYaml(t *testing.T) {
|
|
if utils.IsCheckCoverage() {
|
|
t.Skip("Running on behalf of \"check-coverage\", skipping test")
|
|
}
|
|
|
|
ifaces, err := Interfaces()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
marshaled, err := ifaces[0].MarshalYAML()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if marshaled == nil {
|
|
t.Fatalf("MarshalYAML() shouldn't have returned nil")
|
|
}
|
|
}
|
|
|
|
func TestAddAddr(t *testing.T) {
|
|
if utils.IsCheckCoverage() {
|
|
t.Skip("Running on behalf of \"check-coverage\", skipping test")
|
|
}
|
|
|
|
list, err := Interfaces()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
iface := list[0]
|
|
|
|
// Check for a gateway
|
|
_, err = iface.GetGateway()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// Check for a DNS
|
|
_, _, err = iface.GetDNSInfo()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
ac := len(iface.Addrs)
|
|
|
|
iface.AddAddr("10.0.0.1", "255.255.255.0", IPv4)
|
|
if len(iface.Addrs) != ac+1 {
|
|
t.Fatalf("Failed to add address to interface")
|
|
}
|
|
}
|
|
|
|
func TestVersionString(t *testing.T) {
|
|
addr := &Addr{IP: "10.0.0.1", NetMask: "255.255.255.0", Version: IPv4}
|
|
|
|
ver := addr.VersionString()
|
|
if ver != "ipv4" {
|
|
t.Fatalf("VersionString() returned wrong value, expected ipv4 but got: %s", ver)
|
|
}
|
|
|
|
addr.Version = IPv6
|
|
ver = addr.VersionString()
|
|
if ver != "ipv6" {
|
|
t.Fatalf("VersionString() returned wrong value, expected ipv6 but got: %s", ver)
|
|
}
|
|
}
|
|
|
|
func TestNetmaskToCID(t *testing.T) {
|
|
// test invalid netmask
|
|
_, err := netMaskToCIDR("0")
|
|
if err == nil {
|
|
t.Fatalf("netMaskToCIDR() should have failed")
|
|
}
|
|
|
|
tests := []struct {
|
|
mask string
|
|
cidr int
|
|
}{
|
|
{"255.255.255.255", 32},
|
|
{"255.255.255.0", 24},
|
|
{"255.255.0.0", 16},
|
|
{"255.0.0.0", 8},
|
|
{"0.0.0.0", 0},
|
|
}
|
|
|
|
for _, curr := range tests {
|
|
res, err := netMaskToCIDR(curr.mask)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if res != curr.cidr {
|
|
t.Fatalf("netMaskToCIDR() returned wrong value, expected: %d, got: %d", curr.cidr, res)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestApply(t *testing.T) {
|
|
if !utils.IsRoot() {
|
|
t.Skip("Not running as 'root', skipping test")
|
|
}
|
|
|
|
if utils.IsCheckCoverage() {
|
|
t.Skip("Running on behalf of \"check-coverage\", skipping test")
|
|
}
|
|
|
|
dir, err := ioutil.TempDir("", "clr-installer-utest")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
etcDir := filepath.Join(dir, systemdNetworkdDir)
|
|
if err = utils.MkdirAll(etcDir, 0755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
defer func() {
|
|
_ = os.RemoveAll(dir)
|
|
}()
|
|
|
|
list, err := Interfaces()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if len(list) == 0 {
|
|
t.Fatalf("Interfaces() Should have returned at least one interface")
|
|
}
|
|
|
|
static := &Interface{
|
|
Name: "test-iface",
|
|
Addrs: []*Addr{
|
|
{"10.0.0.5", "255.255.255.0", IPv4},
|
|
},
|
|
DHCP: false,
|
|
Gateway: "10.0.0.101",
|
|
DNSServer: "10.0.0.101",
|
|
UserDefined: false,
|
|
}
|
|
|
|
list = append(list, static)
|
|
|
|
// force apply
|
|
for _, curr := range list {
|
|
curr.UserDefined = true
|
|
}
|
|
|
|
// Apply again and test the non-interface Apply method
|
|
if err = Apply(dir, list); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
// should not fail to re-apply
|
|
if err = Apply(dir, list); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
func TestHasIPv4Addr(t *testing.T) {
|
|
iface := &Interface{}
|
|
|
|
iface.AddAddr("10.0.0.1", "255.255.255.0", IPv4)
|
|
if iface.HasIPv4Addr() == false {
|
|
t.Fatalf("Interface has an ipv4 but HasIPv4Addr() returned false")
|
|
}
|
|
|
|
iface = &Interface{}
|
|
if iface.HasIPv4Addr() == true {
|
|
t.Fatalf("Interface has no ipv4 but HasIPv4Addr() returned true")
|
|
}
|
|
}
|
|
|
|
func TestGoodDomains(t *testing.T) {
|
|
tests := []struct {
|
|
domain string
|
|
}{
|
|
{"intel.com"},
|
|
{"com"},
|
|
{"domain.google.com"},
|
|
{"long.domain.google.com"},
|
|
}
|
|
|
|
for _, curr := range tests {
|
|
if IsValidDomainName(curr.domain) != "" {
|
|
t.Fatalf("'%s' should be a valid domain", curr.domain)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestBadDomains(t *testing.T) {
|
|
tests := []struct {
|
|
domain string
|
|
}{
|
|
{"intel.com."},
|
|
{"foobar.11"},
|
|
{"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com"},
|
|
{"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.com"},
|
|
{""},
|
|
{"domain.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com"},
|
|
{"-google.com"},
|
|
{"google-.com"},
|
|
{"goo%gle.com"},
|
|
{"g#oogle.com"},
|
|
{"g!oogle.com"},
|
|
{"go^ogle.com"},
|
|
}
|
|
|
|
for _, curr := range tests {
|
|
if IsValidDomainName(curr.domain) == "" {
|
|
t.Fatalf("'%s' should be an invalid domain", curr.domain)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestCopyNetwork(t *testing.T) {
|
|
dir, err := ioutil.TempDir("", "clr-installer-utest")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
etcDir := filepath.Join(dir, "/etc/systemd/network")
|
|
if err = utils.MkdirAll(etcDir, 0755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
defer func() {
|
|
_ = os.RemoveAll(dir)
|
|
}()
|
|
|
|
if err := CopyNetworkInterfaces(dir); err != nil {
|
|
t.Fatalf("CopyNetworkInterfaces should not fail: '%s'", err)
|
|
}
|
|
}
|
|
|
|
func TestGoodDownload(t *testing.T) {
|
|
|
|
installDataURLBase = "https://cdn.download.clearlinux.org/releases/%s/clear/config/image/.data/%s"
|
|
|
|
if msg := DownloadInstallerMessage("Pre", PreInstallConf); msg != "" {
|
|
t.Fatalf("Good HTTP URL failed: %s", msg)
|
|
}
|
|
|
|
if err := CheckURL("https://www.google.com"); err != nil {
|
|
t.Fatalf("Good HTTPS URL failed: %s", err)
|
|
}
|
|
|
|
if err := CheckURL("https://cdn.download.clearlinux.org/update/"); err != nil {
|
|
t.Fatalf("Good Clear Linux HTTPS URL failed: %s", err)
|
|
}
|
|
}
|