mirror of https://github.com/docker/docs.git
				
				
				
			Improve test coverage
Signed-off-by: David Gageot <david@gageot.net>
This commit is contained in:
		
							parent
							
								
									f9979c285d
								
							
						
					
					
						commit
						84199a12e3
					
				|  | @ -1,10 +1,5 @@ | |||
| package virtualbox | ||||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| type VirtualDisk struct { | ||||
| 	UUID string | ||||
| 	Path string | ||||
|  | @ -16,34 +11,19 @@ func getVMDiskInfo(name string, vbox VBoxManager) (*VirtualDisk, error) { | |||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return parseDiskInfo(out) | ||||
| } | ||||
| 
 | ||||
| func parseDiskInfo(out string) (*VirtualDisk, error) { | ||||
| 	disk := &VirtualDisk{} | ||||
| 
 | ||||
| 	r := strings.NewReader(out) | ||||
| 	s := bufio.NewScanner(r) | ||||
| 	for s.Scan() { | ||||
| 		line := s.Text() | ||||
| 		if line == "" { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		res := reEqualQuoteLine.FindStringSubmatch(line) | ||||
| 		if res == nil { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		key, val := res[1], res[2] | ||||
| 	err = parseKeyValues(out, reEqualQuoteLine, func(key, val string) error { | ||||
| 		switch key { | ||||
| 		case "SATA-1-0": | ||||
| 			disk.Path = val | ||||
| 		case "SATA-ImageUUID-1-0": | ||||
| 			disk.UUID = val | ||||
| 		} | ||||
| 	} | ||||
| 	if err := s.Err(); err != nil { | ||||
| 
 | ||||
| 		return nil | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -7,22 +7,19 @@ import ( | |||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	validDiskInfoText = ` | ||||
| const stdOutDiskInfo = ` | ||||
| storagecontrollerbootable0="on" | ||||
| "SATA-0-0"="/home/ehazlett/.boot2docker/boot2docker.iso" | ||||
| "SATA-IsEjected"="off" | ||||
| "SATA-1-0"="/home/ehazlett/vm/test/disk.vmdk" | ||||
| "SATA-ImageUUID-1-0"="12345-abcdefg" | ||||
| "SATA-2-0"="none" | ||||
| nic1="nat" | ||||
|     ` | ||||
| ) | ||||
| nic1="nat"` | ||||
| 
 | ||||
| func TestVMDiskInfo(t *testing.T) { | ||||
| 	vbox := &VBoxManagerMock{ | ||||
| 		args:   "showvminfo default --machinereadable", | ||||
| 		stdOut: validDiskInfoText, | ||||
| 		stdOut: stdOutDiskInfo, | ||||
| 	} | ||||
| 
 | ||||
| 	disk, err := getVMDiskInfo("default", vbox) | ||||
|  |  | |||
|  | @ -1,13 +1,11 @@ | |||
| package virtualbox | ||||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"net" | ||||
| 	"regexp" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
|  | @ -79,19 +77,8 @@ func listHostOnlyNetworks(vbox VBoxManager) (map[string]*hostOnlyNetwork, error) | |||
| 	m := map[string]*hostOnlyNetwork{} | ||||
| 	n := &hostOnlyNetwork{} | ||||
| 
 | ||||
| 	s := bufio.NewScanner(strings.NewReader(out)) | ||||
| 	for s.Scan() { | ||||
| 		line := s.Text() | ||||
| 		if line == "" { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		res := reColonLine.FindStringSubmatch(line) | ||||
| 		if res == nil { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		switch key, val := res[1], res[2]; key { | ||||
| 	err = parseKeyValues(out, reColonLine, func(key, val string) error { | ||||
| 		switch key { | ||||
| 		case "Name": | ||||
| 			n.Name = val | ||||
| 		case "GUID": | ||||
|  | @ -107,13 +94,13 @@ func listHostOnlyNetworks(vbox VBoxManager) (map[string]*hostOnlyNetwork, error) | |||
| 		case "IPV6NetworkMaskPrefixLength": | ||||
| 			l, err := strconv.ParseUint(val, 10, 8) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 				return err | ||||
| 			} | ||||
| 			n.IPv6.Mask = net.CIDRMask(int(l), net.IPv6len*8) | ||||
| 		case "HardwareAddress": | ||||
| 			mac, err := net.ParseMAC(val) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 				return err | ||||
| 			} | ||||
| 			n.HwAddr = mac | ||||
| 		case "MediumType": | ||||
|  | @ -125,11 +112,13 @@ func listHostOnlyNetworks(vbox VBoxManager) (map[string]*hostOnlyNetwork, error) | |||
| 			m[val] = n | ||||
| 			n = &hostOnlyNetwork{} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if err := s.Err(); err != nil { | ||||
| 		return nil | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return m, nil | ||||
| } | ||||
| 
 | ||||
|  | @ -247,22 +236,15 @@ func getDHCPServers(vbox VBoxManager) (map[string]*dhcpServer, error) { | |||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	s := bufio.NewScanner(strings.NewReader(out)) | ||||
| 
 | ||||
| 	m := map[string]*dhcpServer{} | ||||
| 	dhcp := &dhcpServer{} | ||||
| 	for s.Scan() { | ||||
| 		line := s.Text() | ||||
| 		if line == "" { | ||||
| 			m[dhcp.NetworkName] = dhcp | ||||
| 			dhcp = &dhcpServer{} | ||||
| 			continue | ||||
| 		} | ||||
| 		res := reColonLine.FindStringSubmatch(line) | ||||
| 		if res == nil { | ||||
| 			continue | ||||
| 		} | ||||
| 		switch key, val := res[1], res[2]; key { | ||||
| 
 | ||||
| 	err = parseKeyValues(out, reColonLine, func(key, val string) error { | ||||
| 		switch key { | ||||
| 		case "NetworkName": | ||||
| 			dhcp = &dhcpServer{} | ||||
| 			m[val] = dhcp | ||||
| 			dhcp.NetworkName = val | ||||
| 		case "IP": | ||||
| 			dhcp.IPv4.IP = net.ParseIP(val) | ||||
|  | @ -275,10 +257,13 @@ func getDHCPServers(vbox VBoxManager) (map[string]*dhcpServer, error) { | |||
| 		case "Enabled": | ||||
| 			dhcp.Enabled = (val == "Yes") | ||||
| 		} | ||||
| 	} | ||||
| 	if err := s.Err(); err != nil { | ||||
| 
 | ||||
| 		return nil | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return m, nil | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,7 +8,9 @@ import ( | |||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
| 
 | ||||
| const stdOutOneHostOnlyNetwork = `Name:            vboxnet0 | ||||
| const ( | ||||
| 	stdOutOneHostOnlyNetwork = ` | ||||
| Name:            vboxnet0 | ||||
| GUID:            786f6276-656e-4074-8000-0a0027000000 | ||||
| DHCP:            Disabled | ||||
| IPAddress:       192.168.99.1 | ||||
|  | @ -21,7 +23,8 @@ Status:          Up | |||
| VBoxNetworkName: HostInterfaceNetworking-vboxnet0 | ||||
| 
 | ||||
| ` | ||||
| const stdOutTwoHostOnlyNetwork = `Name:            vboxnet0 | ||||
| 	stdOutTwoHostOnlyNetwork = ` | ||||
| Name:            vboxnet0 | ||||
| GUID:            786f6276-656e-4074-8000-0a0027000000 | ||||
| DHCP:            Disabled | ||||
| IPAddress:       192.168.99.1 | ||||
|  | @ -44,8 +47,23 @@ HardwareAddress: 0a:00:27:00:00:01 | |||
| MediumType:      Ethernet | ||||
| Status:          Up | ||||
| VBoxNetworkName: HostInterfaceNetworking-vboxnet1 | ||||
| 
 | ||||
| ` | ||||
| 	stdOutListTwoDHCPServers = ` | ||||
| NetworkName:    HostInterfaceNetworking-vboxnet0 | ||||
| IP:             192.168.99.6 | ||||
| NetworkMask:    255.255.255.0 | ||||
| lowerIPAddress: 192.168.99.100 | ||||
| upperIPAddress: 192.168.99.254 | ||||
| Enabled:        Yes | ||||
| 
 | ||||
| NetworkName:    HostInterfaceNetworking-vboxnet1 | ||||
| IP:             192.168.99.7 | ||||
| NetworkMask:    255.255.255.0 | ||||
| lowerIPAddress: 192.168.99.100 | ||||
| upperIPAddress: 192.168.99.254 | ||||
| Enabled:        No | ||||
| ` | ||||
| ) | ||||
| 
 | ||||
| // Tests that when we have a host only network which matches our expectations,
 | ||||
| // it gets returned correctly.
 | ||||
|  | @ -223,3 +241,33 @@ func TestFailWithDuplicateHostOnlyNetworks(t *testing.T) { | |||
| 	assert.Nil(t, net) | ||||
| 	assert.Equal(t, errDuplicateHostOnlyInterfaceNetworks, err) | ||||
| } | ||||
| 
 | ||||
| func TestGetDHCPServers(t *testing.T) { | ||||
| 	vbox := &VBoxManagerMock{ | ||||
| 		args:   "list dhcpservers", | ||||
| 		stdOut: stdOutListTwoDHCPServers, | ||||
| 	} | ||||
| 
 | ||||
| 	servers, err := getDHCPServers(vbox) | ||||
| 
 | ||||
| 	assert.Equal(t, 2, len(servers)) | ||||
| 	assert.NoError(t, err) | ||||
| 
 | ||||
| 	server, present := servers["HostInterfaceNetworking-vboxnet0"] | ||||
| 	assert.True(t, present) | ||||
| 	assert.Equal(t, "HostInterfaceNetworking-vboxnet0", server.NetworkName) | ||||
| 	assert.Equal(t, "192.168.99.6", server.IPv4.IP.String()) | ||||
| 	assert.Equal(t, "192.168.99.100", server.LowerIP.String()) | ||||
| 	assert.Equal(t, "192.168.99.254", server.UpperIP.String()) | ||||
| 	assert.Equal(t, "ffffff00", server.IPv4.Mask.String()) | ||||
| 	assert.True(t, server.Enabled) | ||||
| 
 | ||||
| 	server, present = servers["HostInterfaceNetworking-vboxnet1"] | ||||
| 	assert.True(t, present) | ||||
| 	assert.Equal(t, "HostInterfaceNetworking-vboxnet1", server.NetworkName) | ||||
| 	assert.Equal(t, "192.168.99.7", server.IPv4.IP.String()) | ||||
| 	assert.Equal(t, "192.168.99.100", server.LowerIP.String()) | ||||
| 	assert.Equal(t, "192.168.99.254", server.UpperIP.String()) | ||||
| 	assert.Equal(t, "ffffff00", server.IPv4.Mask.String()) | ||||
| 	assert.False(t, server.Enabled) | ||||
| } | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| package virtualbox | ||||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"bytes" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
|  | @ -83,3 +84,27 @@ func checkVBoxManageVersion(version string) error { | |||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func parseKeyValues(stdOut string, regexp *regexp.Regexp, callback func(key, val string) error) error { | ||||
| 	r := strings.NewReader(stdOut) | ||||
| 	s := bufio.NewScanner(r) | ||||
| 
 | ||||
| 	for s.Scan() { | ||||
| 		line := s.Text() | ||||
| 		if line == "" { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		res := regexp.FindStringSubmatch(line) | ||||
| 		if res == nil { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		key, val := res[1], res[2] | ||||
| 		if err := callback(key, val); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return s.Err() | ||||
| } | ||||
|  |  | |||
|  | @ -1,11 +1,6 @@ | |||
| package virtualbox | ||||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"io" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| ) | ||||
| import "strconv" | ||||
| 
 | ||||
| type VM struct { | ||||
| 	CPUs   int | ||||
|  | @ -18,39 +13,29 @@ func getVMInfo(name string, vbox VBoxManager) (*VM, error) { | |||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	r := strings.NewReader(out) | ||||
| 	return parseVMInfo(r) | ||||
| } | ||||
| 
 | ||||
| func parseVMInfo(r io.Reader) (*VM, error) { | ||||
| 	s := bufio.NewScanner(r) | ||||
| 	vm := &VM{} | ||||
| 	for s.Scan() { | ||||
| 		line := s.Text() | ||||
| 		if line == "" { | ||||
| 			continue | ||||
| 		} | ||||
| 		res := reEqualLine.FindStringSubmatch(line) | ||||
| 		if res == nil { | ||||
| 			continue | ||||
| 		} | ||||
| 		switch key, val := res[1], res[2]; key { | ||||
| 
 | ||||
| 	err = parseKeyValues(out, reEqualLine, func(key, val string) error { | ||||
| 		switch key { | ||||
| 		case "cpus": | ||||
| 			v, err := strconv.Atoi(val) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 				return err | ||||
| 			} | ||||
| 			vm.CPUs = v | ||||
| 		case "memory": | ||||
| 			v, err := strconv.Atoi(val) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 				return err | ||||
| 			} | ||||
| 			vm.Memory = v | ||||
| 		} | ||||
| 	} | ||||
| 	if err := s.Err(); err != nil { | ||||
| 
 | ||||
| 		return nil | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return vm, nil | ||||
| } | ||||
|  |  | |||
|  | @ -1,12 +1,13 @@ | |||
| package virtualbox | ||||
| 
 | ||||
| import ( | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/docker/machine/drivers/vmwarevsphere/errors" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	testVMInfoText = ` | ||||
| var stdOutVMInfo = ` | ||||
| storagecontrollerbootable0="on" | ||||
| memory=1024 | ||||
| cpus=2 | ||||
|  | @ -15,24 +16,29 @@ cpus=2 | |||
| "SATA-1-0"="/home/ehazlett/vm/test/disk.vmdk" | ||||
| "SATA-ImageUUID-1-0"="12345-abcdefg" | ||||
| "SATA-2-0"="none" | ||||
| nic1="nat" | ||||
| ` | ||||
| ) | ||||
| nic1="nat"` | ||||
| 
 | ||||
| func TestVMInfo(t *testing.T) { | ||||
| 	r := strings.NewReader(testVMInfoText) | ||||
| 	vm, err := parseVMInfo(r) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	vbox := &VBoxManagerMock{ | ||||
| 		args:   "showvminfo host --machinereadable", | ||||
| 		stdOut: stdOutVMInfo, | ||||
| 	} | ||||
| 
 | ||||
| 	vmCPUs := 2 | ||||
| 	vmMemory := 1024 | ||||
| 	if vm.CPUs != vmCPUs { | ||||
| 		t.Fatalf("expected %d cpus; received %d", vmCPUs, vm.CPUs) | ||||
| 	} | ||||
| 	vm, err := getVMInfo("host", vbox) | ||||
| 
 | ||||
| 	if vm.Memory != vmMemory { | ||||
| 		t.Fatalf("expected memory %d; received %d", vmMemory, vm.Memory) | ||||
| 	} | ||||
| 	assert.Equal(t, 2, vm.CPUs) | ||||
| 	assert.Equal(t, 1024, vm.Memory) | ||||
| 	assert.NoError(t, err) | ||||
| } | ||||
| 
 | ||||
| func TestVMInfoError(t *testing.T) { | ||||
| 	vbox := &VBoxManagerMock{ | ||||
| 		args: "showvminfo host --machinereadable", | ||||
| 		err:  errors.New("BUG"), | ||||
| 	} | ||||
| 
 | ||||
| 	vm, err := getVMInfo("host", vbox) | ||||
| 
 | ||||
| 	assert.Nil(t, vm) | ||||
| 	assert.EqualError(t, err, "BUG") | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue