From 308f9d025c04e80a9d3955950faef98613967fd7 Mon Sep 17 00:00:00 2001 From: David Gageot Date: Fri, 20 Nov 2015 14:11:44 +0100 Subject: [PATCH] Add more tests to virtualbox driver Signed-off-by: David Gageot --- drivers/virtualbox/network.go | 44 +++++++------- drivers/virtualbox/network_test.go | 96 +++++++++++++++++------------- 2 files changed, 79 insertions(+), 61 deletions(-) diff --git a/drivers/virtualbox/network.go b/drivers/virtualbox/network.go index 5b9dd44e64..f3efe9283b 100644 --- a/drivers/virtualbox/network.go +++ b/drivers/virtualbox/network.go @@ -146,35 +146,37 @@ func getHostOnlyNetwork(nets map[string]*hostOnlyNetwork, hostIP net.IP, netmask return nil } -func getOrCreateHostOnlyNetwork(hostIP net.IP, netmask net.IPMask, dhcpIP net.IP, dhcpUpperIP net.IP, dhcpLowerIP net.IP, vbox VBoxManager) (*hostOnlyNetwork, error) { +func getOrCreateHostOnlyNetwork(hostIP net.IP, netmask net.IPMask, dhcpIP net.IP, dhcpLowerIP net.IP, dhcpUpperIP net.IP, vbox VBoxManager) (*hostOnlyNetwork, error) { nets, err := listHostOnlyNetworks(vbox) if err != nil { return nil, err } hostOnlyNet := getHostOnlyNetwork(nets, hostIP, netmask) + if hostOnlyNet != nil { + return hostOnlyNet, nil + } - if hostOnlyNet == nil { - // No existing host-only interface found. Create a new one. - hostOnlyNet, err = createHostonlyNet(vbox) - if err != nil { - return nil, err - } - hostOnlyNet.IPv4.IP = hostIP - hostOnlyNet.IPv4.Mask = netmask - if err := hostOnlyNet.Save(vbox); err != nil { - return nil, err - } + // No existing host-only interface found. Create a new one. + hostOnlyNet, err = createHostonlyNet(vbox) + if err != nil { + return nil, err + } - dhcp := dhcpServer{} - dhcp.IPv4.IP = dhcpIP - dhcp.IPv4.Mask = netmask - dhcp.LowerIP = dhcpUpperIP - dhcp.UpperIP = dhcpLowerIP - dhcp.Enabled = true - if err := addHostonlyDHCP(hostOnlyNet.Name, dhcp, vbox); err != nil { - return nil, err - } + hostOnlyNet.IPv4.IP = hostIP + hostOnlyNet.IPv4.Mask = netmask + if err := hostOnlyNet.Save(vbox); err != nil { + return nil, err + } + + dhcp := dhcpServer{} + dhcp.IPv4.IP = dhcpIP + dhcp.IPv4.Mask = netmask + dhcp.LowerIP = dhcpLowerIP + dhcp.UpperIP = dhcpUpperIP + dhcp.Enabled = true + if err := addHostonlyDHCP(hostOnlyNet.Name, dhcp, vbox); err != nil { + return nil, err } return hostOnlyNet, nil diff --git a/drivers/virtualbox/network_test.go b/drivers/virtualbox/network_test.go index f805f74b29..a2b2c6aeb6 100644 --- a/drivers/virtualbox/network_test.go +++ b/drivers/virtualbox/network_test.go @@ -8,6 +8,45 @@ import ( "github.com/stretchr/testify/assert" ) +const stdOutOneHostOnlyNetwork = `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 + +` +const stdOutTwoHostOnlyNetwork = `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 + +` + // Tests that when we have a host only network which matches our expectations, // it gets returned correctly. func TestGetHostOnlyNetworkHappy(t *testing.T) { @@ -87,20 +126,8 @@ func TestGetHostOnlyNetworkWindows10Bug(t *testing.T) { 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 - -`, + args: "list hostonlyifs", + stdOut: stdOutOneHostOnlyNetwork, } nets, err := listHostOnlyNetworks(vbox) @@ -125,32 +152,8 @@ VBoxNetworkName: HostInterfaceNetworking-vboxnet0 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 - -`, + args: "list hostonlyifs", + stdOut: stdOutTwoHostOnlyNetwork, } nets, err := listHostOnlyNetworks(vbox) @@ -195,3 +198,16 @@ VBoxNetworkName: HostInterfaceNetworking-vboxnet1`, assert.True(t, present) assert.Equal(t, "vboxnet0", net.Name) } + +func TestGetHostOnlyNetwork(t *testing.T) { + vbox := &VBoxManagerMock{ + args: "list hostonlyifs", + stdOut: stdOutOneHostOnlyNetwork, + } + + net, err := getOrCreateHostOnlyNetwork(net.ParseIP("192.168.99.1"), parseIPv4Mask("255.255.255.0"), nil, nil, nil, vbox) + + assert.NotNil(t, net) + assert.Equal(t, "HostInterfaceNetworking-vboxnet0", net.NetworkName) + assert.NoError(t, err) +}