diff --git a/drivers/virtualbox/disk_test.go b/drivers/virtualbox/disk_test.go index 169377b636..bd43e3d936 100644 --- a/drivers/virtualbox/disk_test.go +++ b/drivers/virtualbox/disk_test.go @@ -7,8 +7,8 @@ import ( "github.com/stretchr/testify/assert" ) -var ( - testDiskInfoText = ` +const ( + validDiskInfoText = ` storagecontrollerbootable0="on" "SATA-0-0"="/home/ehazlett/.boot2docker/boot2docker.iso" "SATA-IsEjected"="off" @@ -22,7 +22,7 @@ nic1="nat" func TestVMDiskInfo(t *testing.T) { vbox := &VBoxManagerMock{ args: "showvminfo default --machinereadable", - stdOut: testDiskInfoText, + stdOut: validDiskInfoText, } disk, err := getVMDiskInfo("default", vbox) diff --git a/drivers/virtualbox/network.go b/drivers/virtualbox/network.go index 0e6658f134..7aec22aba9 100644 --- a/drivers/virtualbox/network.go +++ b/drivers/virtualbox/network.go @@ -75,9 +75,10 @@ func listHostOnlyNetworks(vbox VBoxManager) (map[string]*hostOnlyNetwork, error) return nil, err } - s := bufio.NewScanner(strings.NewReader(out)) m := map[string]*hostOnlyNetwork{} n := &hostOnlyNetwork{} + + s := bufio.NewScanner(strings.NewReader(out)) for s.Scan() { line := s.Text() if line == "" { @@ -85,10 +86,12 @@ func listHostOnlyNetworks(vbox VBoxManager) (map[string]*hostOnlyNetwork, error) n = &hostOnlyNetwork{} continue } + res := reColonLine.FindStringSubmatch(line) if res == nil { continue } + switch key, val := res[1], res[2]; key { case "Name": n.Name = val @@ -122,6 +125,7 @@ func listHostOnlyNetworks(vbox VBoxManager) (map[string]*hostOnlyNetwork, error) n.NetworkName = val } } + if err := s.Err(); err != nil { return nil, err } diff --git a/drivers/virtualbox/network_test.go b/drivers/virtualbox/network_test.go index 4ca5ea8c09..18312195ce 100644 --- a/drivers/virtualbox/network_test.go +++ b/drivers/virtualbox/network_test.go @@ -4,6 +4,8 @@ import ( "net" "reflect" "testing" + + "github.com/stretchr/testify/assert" ) // Tests that when we have a host only network which matches our expectations, @@ -82,3 +84,91 @@ func TestGetHostOnlyNetworkWindows10Bug(t *testing.T) { t.Fatalf("Expected result of calling getHostOnlyNetwork to be the same as expected but it was not:\nexpected: %+v\nactual: %+v\n", expectedHostOnlyNetwork, n) } } + +func TestListHostOnlyNetworks(t *testing.T) { + vbox := &VBoxManagerMock{ + args: "list hostonlyifs", + stdOut: `Name: vboxnet0 +GUID: 786f6276-656e-4074-8000-0a0027000000 +DHCP: Disabled +IPAddress: 192.168.99.1 +NetworkMask: 255.255.255.0 +IPV6Address: +IPV6NetworkMaskPrefixLength: 0 +HardwareAddress: 0a:00:27:00:00:00 +MediumType: Ethernet +Status: Up +VBoxNetworkName: HostInterfaceNetworking-vboxnet0 + +`, + } + + nets, err := listHostOnlyNetworks(vbox) + + assert.Equal(t, 1, len(nets)) + assert.NoError(t, err) + + net, present := nets["HostInterfaceNetworking-vboxnet0"] + + assert.True(t, present) + assert.Equal(t, "vboxnet0", net.Name) + assert.Equal(t, "786f6276-656e-4074-8000-0a0027000000", net.GUID) + assert.False(t, net.DHCP) + assert.Equal(t, "192.168.99.1", net.IPv4.IP.String()) + assert.Equal(t, "ffffff00", net.IPv4.Mask.String()) + assert.Empty(t, net.IPv6.IP) + assert.Equal(t, "0a:00:27:00:00:00", net.HwAddr.String()) + assert.Equal(t, "Ethernet", net.Medium) + assert.Equal(t, "Up", net.Status) + assert.Equal(t, "HostInterfaceNetworking-vboxnet0", net.NetworkName) +} + +func TestListTwoHostOnlyNetworks(t *testing.T) { + vbox := &VBoxManagerMock{ + args: "list hostonlyifs", + stdOut: `Name: vboxnet0 +GUID: 786f6276-656e-4074-8000-0a0027000000 +DHCP: Disabled +IPAddress: 192.168.99.1 +NetworkMask: 255.255.255.0 +IPV6Address: +IPV6NetworkMaskPrefixLength: 0 +HardwareAddress: 0a:00:27:00:00:00 +MediumType: Ethernet +Status: Up +VBoxNetworkName: HostInterfaceNetworking-vboxnet0 + +Name: vboxnet1 +GUID: 786f6276-656e-4174-8000-0a0027000001 +DHCP: Disabled +IPAddress: 192.168.99.1 +NetworkMask: 255.255.255.0 +IPV6Address: +IPV6NetworkMaskPrefixLength: 0 +HardwareAddress: 0a:00:27:00:00:01 +MediumType: Ethernet +Status: Up +VBoxNetworkName: HostInterfaceNetworking-vboxnet1 + +`, + } + + nets, err := listHostOnlyNetworks(vbox) + + assert.Equal(t, 2, len(nets)) + assert.NoError(t, err) + + net, present := nets["HostInterfaceNetworking-vboxnet1"] + + assert.True(t, present) + assert.Equal(t, "vboxnet1", net.Name) + assert.Equal(t, "786f6276-656e-4174-8000-0a0027000001", net.GUID) + assert.False(t, net.DHCP) + assert.Equal(t, "192.168.99.1", net.IPv4.IP.String()) + assert.Equal(t, "ffffff00", net.IPv4.Mask.String()) + assert.Empty(t, net.IPv6.IP) + assert.Equal(t, "0a:00:27:00:00:01", net.HwAddr.String()) + assert.Equal(t, "Ethernet", net.Medium) + assert.Equal(t, "Up", net.Status) + assert.Equal(t, "HostInterfaceNetworking-vboxnet1", net.NetworkName) +}