package hyperv import ( "strings" "testing" ) func Test_getCreateVMScript(t *testing.T) { opts := scriptOptions{ Version: "5.0", VMName: "myvm", Path: "C://mypath", HardDrivePath: "C://harddrivepath", MemoryStartupBytes: int64(1024), NewVHDSizeBytes: int64(8192), VHDBlockSizeBytes: int64(10), SwitchName: "hyperv-vmx-switch", Generation: uint(1), DiffDisks: true, FixedVHD: true, } // Check Fixed VHD conditional set scriptString, err := getCreateVMScript(&opts) if err != nil { t.Fatalf("Error: %s", err.Error()) } expected := `$vhdPath = Join-Path -Path "C://mypath" -ChildPath "myvm.vhd" Hyper-V\New-VHD -Path $vhdPath -ParentPath "C://harddrivepath" -Differencing -BlockSizeBytes 10 Hyper-V\New-VM -Name "myvm" -Path "C://mypath" -MemoryStartupBytes 1024 -VHDPath $vhdPath -SwitchName "hyperv-vmx-switch" -Version 5.0` if ok := strings.Compare(scriptString, expected); ok != 0 { t.Fatalf("EXPECTED: \n%s\n\n RECEIVED: \n%s\n\n", expected, scriptString) } // We should never get here thanks to good template validation, but it's // good to fail rather than trying to run the ps script and erroring. opts.Generation = uint(2) scriptString, err = getCreateVMScript(&opts) if err == nil { t.Fatalf("Should have Error: %s", err.Error()) } // Check VHDX conditional set opts.FixedVHD = false scriptString, err = getCreateVMScript(&opts) if err != nil { t.Fatalf("Error: %s", err.Error()) } expected = `$vhdPath = Join-Path -Path "C://mypath" -ChildPath "myvm.vhdx" Hyper-V\New-VHD -Path $vhdPath -ParentPath "C://harddrivepath" -Differencing -BlockSizeBytes 10 Hyper-V\New-VM -Name "myvm" -Path "C://mypath" -MemoryStartupBytes 1024 -VHDPath $vhdPath -SwitchName "hyperv-vmx-switch" -Generation 2 -Version 5.0` if ok := strings.Compare(scriptString, expected); ok != 0 { t.Fatalf("EXPECTED: \n%s\n\n RECEIVED: \n%s\n\n", expected, scriptString) } // Check generation 1 no fixed VHD opts.FixedVHD = false opts.Generation = uint(1) scriptString, err = getCreateVMScript(&opts) if err != nil { t.Fatalf("Error: %s", err.Error()) } expected = `$vhdPath = Join-Path -Path "C://mypath" -ChildPath "myvm.vhdx" Hyper-V\New-VHD -Path $vhdPath -ParentPath "C://harddrivepath" -Differencing -BlockSizeBytes 10 Hyper-V\New-VM -Name "myvm" -Path "C://mypath" -MemoryStartupBytes 1024 -VHDPath $vhdPath -SwitchName "hyperv-vmx-switch" -Version 5.0` if ok := strings.Compare(scriptString, expected); ok != 0 { t.Fatalf("EXPECTED: \n%s\n\n RECEIVED: \n%s\n\n", expected, scriptString) } // Check that we use generation one template even if generation is unset opts.Generation = uint(0) scriptString, err = getCreateVMScript(&opts) if err != nil { t.Fatalf("Error: %s", err.Error()) } // same "expected" as above if ok := strings.Compare(scriptString, expected); ok != 0 { t.Fatalf("EXPECTED: \n%s\n\n RECEIVED: \n%s\n\n", expected, scriptString) } opts.Version = "" scriptString, err = getCreateVMScript(&opts) if err != nil { t.Fatalf("Error: %s", err.Error()) } expected = `$vhdPath = Join-Path -Path "C://mypath" -ChildPath "myvm.vhdx" Hyper-V\New-VHD -Path $vhdPath -ParentPath "C://harddrivepath" -Differencing -BlockSizeBytes 10 Hyper-V\New-VM -Name "myvm" -Path "C://mypath" -MemoryStartupBytes 1024 -VHDPath $vhdPath -SwitchName "hyperv-vmx-switch"` if ok := strings.Compare(scriptString, expected); ok != 0 { t.Fatalf("EXPECTED: \n%s\n\n RECEIVED: \n%s\n\n", expected, scriptString) } opts.DiffDisks = false scriptString, err = getCreateVMScript(&opts) if err != nil { t.Fatalf("Error: %s", err.Error()) } expected = `$vhdPath = Join-Path -Path "C://mypath" -ChildPath "myvm.vhdx" Copy-Item -Path "C://harddrivepath" -Destination $vhdPath Hyper-V\New-VM -Name "myvm" -Path "C://mypath" -MemoryStartupBytes 1024 -VHDPath $vhdPath -SwitchName "hyperv-vmx-switch"` if ok := strings.Compare(scriptString, expected); ok != 0 { t.Fatalf("EXPECTED: \n%s\n\n RECEIVED: \n%s\n\n", expected, scriptString) } opts.HardDrivePath = "" scriptString, err = getCreateVMScript(&opts) if err != nil { t.Fatalf("Error: %s", err.Error()) } expected = `$vhdPath = Join-Path -Path "C://mypath" -ChildPath "myvm.vhdx" Hyper-V\New-VHD -Path $vhdPath -SizeBytes 8192 -BlockSizeBytes 10 Hyper-V\New-VM -Name "myvm" -Path "C://mypath" -MemoryStartupBytes 1024 -VHDPath $vhdPath -SwitchName "hyperv-vmx-switch"` if ok := strings.Compare(scriptString, expected); ok != 0 { t.Fatalf("EXPECTED: \n%s\n\n RECEIVED: \n%s\n\n", expected, scriptString) } opts.FixedVHD = true scriptString, err = getCreateVMScript(&opts) if err != nil { t.Fatalf("Error: %s", err.Error()) } expected = `$vhdPath = Join-Path -Path "C://mypath" -ChildPath "myvm.vhd" Hyper-V\New-VHD -Path $vhdPath -Fixed -SizeBytes 8192 Hyper-V\New-VM -Name "myvm" -Path "C://mypath" -MemoryStartupBytes 1024 -VHDPath $vhdPath -SwitchName "hyperv-vmx-switch"` if ok := strings.Compare(scriptString, expected); ok != 0 { t.Fatalf("EXPECTED: \n%s\n\n RECEIVED: \n%s\n\n", expected, scriptString) } }