273 lines
6.0 KiB
Go
273 lines
6.0 KiB
Go
package common
|
|
|
|
import (
|
|
"net"
|
|
"sync"
|
|
|
|
"github.com/hashicorp/packer/helper/multistep"
|
|
)
|
|
|
|
type DriverMock struct {
|
|
sync.Mutex
|
|
|
|
CloneCalled bool
|
|
CloneDst string
|
|
CloneSrc string
|
|
Linked bool
|
|
CloneErr error
|
|
|
|
CompactDiskCalled bool
|
|
CompactDiskPath string
|
|
CompactDiskErr error
|
|
|
|
CreateDiskCalled bool
|
|
CreateDiskOutput string
|
|
CreateDiskSize string
|
|
CreateDiskAdapterType string
|
|
CreateDiskTypeId string
|
|
CreateDiskErr error
|
|
|
|
IsRunningCalled bool
|
|
IsRunningPath string
|
|
IsRunningResult bool
|
|
IsRunningErr error
|
|
|
|
CommHostCalled bool
|
|
CommHostState multistep.StateBag
|
|
CommHostResult string
|
|
CommHostErr error
|
|
|
|
HostAddressCalled bool
|
|
HostAddressState multistep.StateBag
|
|
HostAddressResult string
|
|
HostAddressErr error
|
|
|
|
HostIPCalled bool
|
|
HostIPState multistep.StateBag
|
|
HostIPResult string
|
|
HostIPErr error
|
|
|
|
GuestAddressCalled bool
|
|
GuestAddressState multistep.StateBag
|
|
GuestAddressResult string
|
|
GuestAddressErr error
|
|
|
|
GuestIPCalled bool
|
|
GuestIPState multistep.StateBag
|
|
GuestIPResult string
|
|
GuestIPErr error
|
|
|
|
StartCalled bool
|
|
StartPath string
|
|
StartHeadless bool
|
|
StartErr error
|
|
|
|
StopCalled bool
|
|
StopPath string
|
|
StopErr error
|
|
|
|
SuppressMessagesCalled bool
|
|
SuppressMessagesPath string
|
|
SuppressMessagesErr error
|
|
|
|
ToolsIsoPathCalled bool
|
|
ToolsIsoPathFlavor string
|
|
ToolsIsoPathResult string
|
|
|
|
ToolsInstallCalled bool
|
|
ToolsInstallErr error
|
|
|
|
DhcpLeasesPathCalled bool
|
|
DhcpLeasesPathDevice string
|
|
DhcpLeasesPathResult string
|
|
|
|
DhcpConfPathCalled bool
|
|
DhcpConfPathResult string
|
|
|
|
VmnetnatConfPathCalled bool
|
|
VmnetnatConfPathResult string
|
|
|
|
NetmapConfPathCalled bool
|
|
NetmapConfPathResult string
|
|
|
|
VerifyCalled bool
|
|
VerifyErr error
|
|
}
|
|
|
|
type NetworkMapperMock struct {
|
|
NameIntoDeviceCalled int
|
|
DeviceIntoNameCalled int
|
|
}
|
|
|
|
func (m NetworkMapperMock) NameIntoDevices(name string) ([]string, error) {
|
|
m.NameIntoDeviceCalled += 1
|
|
return make([]string, 0), nil
|
|
}
|
|
func (m NetworkMapperMock) DeviceIntoName(device string) (string, error) {
|
|
m.DeviceIntoNameCalled += 1
|
|
return "", nil
|
|
}
|
|
|
|
func (d *DriverMock) Clone(dst string, src string, linked bool) error {
|
|
d.CloneCalled = true
|
|
d.CloneDst = dst
|
|
d.CloneSrc = src
|
|
d.Linked = linked
|
|
return d.CloneErr
|
|
}
|
|
|
|
func (d *DriverMock) CompactDisk(path string) error {
|
|
d.CompactDiskCalled = true
|
|
d.CompactDiskPath = path
|
|
return d.CompactDiskErr
|
|
}
|
|
|
|
func (d *DriverMock) CreateDisk(output string, size string, adapterType string, typeId string) error {
|
|
d.CreateDiskCalled = true
|
|
d.CreateDiskOutput = output
|
|
d.CreateDiskSize = size
|
|
d.CreateDiskAdapterType = adapterType
|
|
d.CreateDiskTypeId = typeId
|
|
return d.CreateDiskErr
|
|
}
|
|
|
|
func (d *DriverMock) IsRunning(path string) (bool, error) {
|
|
d.Lock()
|
|
defer d.Unlock()
|
|
|
|
d.IsRunningCalled = true
|
|
d.IsRunningPath = path
|
|
return d.IsRunningResult, d.IsRunningErr
|
|
}
|
|
|
|
func (d *DriverMock) CommHost(state multistep.StateBag) (string, error) {
|
|
d.CommHostCalled = true
|
|
d.CommHostState = state
|
|
return d.CommHostResult, d.CommHostErr
|
|
}
|
|
|
|
func MockInterface() net.Interface {
|
|
interfaces, err := net.Interfaces()
|
|
|
|
// Build a dummy interface due to being unable to enumerate interfaces
|
|
if err != nil || len(interfaces) == 0 {
|
|
return net.Interface{
|
|
Index: 0,
|
|
MTU: -1,
|
|
Name: "dummy",
|
|
HardwareAddr: net.HardwareAddr{0, 0, 0, 0, 0, 0},
|
|
Flags: net.FlagLoopback,
|
|
}
|
|
}
|
|
|
|
// Find the first loopback interface
|
|
for _, intf := range interfaces {
|
|
if intf.Flags&net.FlagLoopback == net.FlagLoopback {
|
|
return intf
|
|
}
|
|
}
|
|
|
|
// Fall-back to just the first one
|
|
return interfaces[0]
|
|
}
|
|
|
|
func (d *DriverMock) HostAddress(state multistep.StateBag) (string, error) {
|
|
intf := MockInterface()
|
|
d.HostAddressResult = intf.HardwareAddr.String()
|
|
d.HostAddressCalled = true
|
|
d.HostAddressState = state
|
|
return d.HostAddressResult, d.HostAddressErr
|
|
}
|
|
|
|
func (d *DriverMock) HostIP(state multistep.StateBag) (string, error) {
|
|
d.HostIPResult = "127.0.0.1"
|
|
d.HostIPCalled = true
|
|
d.HostIPState = state
|
|
return d.HostIPResult, d.HostIPErr
|
|
}
|
|
|
|
func (d *DriverMock) GuestAddress(state multistep.StateBag) (string, error) {
|
|
d.GuestAddressCalled = true
|
|
d.GuestAddressState = state
|
|
return d.GuestAddressResult, d.GuestAddressErr
|
|
}
|
|
|
|
func (d *DriverMock) GuestIP(state multistep.StateBag) (string, error) {
|
|
d.GuestIPCalled = true
|
|
d.GuestIPState = state
|
|
return d.GuestIPResult, d.GuestIPErr
|
|
}
|
|
|
|
func (d *DriverMock) Start(path string, headless bool) error {
|
|
d.StartCalled = true
|
|
d.StartPath = path
|
|
d.StartHeadless = headless
|
|
return d.StartErr
|
|
}
|
|
|
|
func (d *DriverMock) Stop(path string) error {
|
|
d.StopCalled = true
|
|
d.StopPath = path
|
|
return d.StopErr
|
|
}
|
|
|
|
func (d *DriverMock) SuppressMessages(path string) error {
|
|
d.SuppressMessagesCalled = true
|
|
d.SuppressMessagesPath = path
|
|
return d.SuppressMessagesErr
|
|
}
|
|
|
|
func (d *DriverMock) ToolsIsoPath(flavor string) string {
|
|
d.ToolsIsoPathCalled = true
|
|
d.ToolsIsoPathFlavor = flavor
|
|
return d.ToolsIsoPathResult
|
|
}
|
|
|
|
func (d *DriverMock) ToolsInstall() error {
|
|
d.ToolsInstallCalled = true
|
|
return d.ToolsInstallErr
|
|
}
|
|
|
|
func (d *DriverMock) DhcpLeasesPath(device string) string {
|
|
d.DhcpLeasesPathCalled = true
|
|
d.DhcpLeasesPathDevice = device
|
|
return d.DhcpLeasesPathResult
|
|
}
|
|
|
|
func (d *DriverMock) DhcpConfPath(device string) string {
|
|
d.DhcpConfPathCalled = true
|
|
return d.DhcpConfPathResult
|
|
}
|
|
|
|
func (d *DriverMock) VmnetnatConfPath(device string) string {
|
|
d.VmnetnatConfPathCalled = true
|
|
return d.VmnetnatConfPathResult
|
|
}
|
|
|
|
func (d *DriverMock) NetmapConfPath() string {
|
|
d.NetmapConfPathCalled = true
|
|
return d.NetmapConfPathResult
|
|
}
|
|
|
|
func (d *DriverMock) Verify() error {
|
|
d.VerifyCalled = true
|
|
return d.VerifyErr
|
|
}
|
|
|
|
func (d *DriverMock) GetVmwareDriver() VmwareDriver {
|
|
var state VmwareDriver
|
|
state.DhcpLeasesPath = func(string) string {
|
|
return "/path/to/dhcp.leases"
|
|
}
|
|
state.DhcpConfPath = func(string) string {
|
|
return "/path/to/dhcp.conf"
|
|
}
|
|
state.VmnetnatConfPath = func(string) string {
|
|
return "/path/to/vmnetnat.conf"
|
|
}
|
|
state.NetworkMapper = func() (NetworkNameMapper, error) {
|
|
return NetworkMapperMock{}, nil
|
|
}
|
|
return state
|
|
}
|