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