Tests/Test-DefinitionFile.Tests.ps1
Describe 'Test-DefinitionFile Tests' { It 'NewVMDiskSizeBytesAndGoldenImagePathStopsExecution_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile" . "$rootDir\Private\Classes" $defFile = "{ `"VMs`": [ { `"Name`": `"Test`", `"NewVMDiskSizeBytes`": `"1GB`", `"HyperVServers`": [ { `"GoldenImagePath`": `"C:\\Test.vhdx`", } ] } ] }" { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - NewVMDiskSizeBytes and GoldenImagePath set, only one must be specified" } It 'GoldenImageCanOnlyBeVHDX_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile" . "$rootDir\Private\Classes" $defFile = "{ `"VMs`": [ { `"Name`": `"Test`", `"HyperVServers`": [ { `"GoldenImagePath`": `"C:\\Test`", `"VMHardDiskPath`" : `"C:\\Test`" } ] } ] }" { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - GoldenImagePath is not a valid vhd/vhdx file" } It 'GoldenImagePathHasToBeValidUNCPath_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile" . "$rootDir\Private\Classes" $defFile = "{ `"VMs`": [ { `"Name`": `"Test`", `"HyperVServers`": [ { `"GoldenImagePath`": `"filesystem:\\server\\c$\\Test.vhdx`", `"VMHardDiskPath`" : `"C:\\Test`" } ] } ] }" { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - GoldenImagePath is not a valid UNC path, UNC paths should start with \\" } It 'VMHardDiskPathMustBeSetWhenSpecifyingNewVMDiskSizeBytes_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile" . "$rootDir\Private\Classes" $defFile = "{ `"VMs`": [ { `"Name`": `"Test`", `"NewVMDiskSizeBytes`": `"1GB`", `"HyperVServers`": [ { } ] } ] }" { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - You must specify VMHardDiskPath when setting NewVMDiskSizeBytes or GoldenImagePath" } It 'VMHardDiskPathMustBeSetWhenSpecifyingGoldenImagePath_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile" . "$rootDir\Private\Classes" $defFile = "{ `"VMs`": [ { `"Name`": `"Test`", `"HyperVServers`": [ { `"GoldenImagePath`": `"C:\\Test.vhdx`", } ] } ] }" { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - You must specify VMHardDiskPath when setting NewVMDiskSizeBytes or GoldenImagePath" } It 'SpecifyingProvisionScriptsRequiresGoldenImagePathToBeSet_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile" . "$rootDir\Private\Classes" $defFile = "{ `"VMs`": [ { `"Name`": `"Test`", `"HyperVServers`": [ { `"SwitchName`": `"Test`", } ], `"Provisioning`" : { `"Scripts`": [ `"C:\\Test.ps1`" ] } } ] }" { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - Provision Scripts can only be used if GoldenImagePath set" } It 'SpecifyingProvisionScriptsRequiresSwitchNameToBeSet_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile" . "$rootDir\Private\Classes" $defFile = "{ `"VMs`": [ { `"Name`": `"Test`", `"HyperVServers`": [ { `"GoldenImagePath`": `"C:\\Test.vhdx`", `"VMHardDiskPath`" : `"C:\\Test`" } ], `"Provisioning`" : { `"Scripts`": [ `"C:\\Test.ps1`" ] } } ] }" { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - Provision Scripts can only be used if SwitchName set" } It 'SpecifyingProvisionScriptsRequiresDeploymentOptionsStartAfterCreate_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile" . "$rootDir\Private\Classes" $defFile = "{ `"DeploymentOptions`": { `"StartAfterCreation`": false }, `"VMs`": [ { `"Name`": `"Test`", `"HyperVServers`": [ { `"GoldenImagePath`": `"C:\\Test.vhdx`", `"VMHardDiskPath`" : `"C:\\Test`", `"SwitchName`" : `"Test`" } ], `"Provisioning`" : { `"Scripts`": [ `"C:\\Test.ps1`" ] } } ] }" { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - Provision Scripts can only be used if DeploymentOptions.StartAfterCreation is true" } It 'ProvisionScriptsMustHavePS1Extension_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile" . "$rootDir\Private\Classes" $defFile = "{ `"DeploymentOptions`": { `"StartAfterCreation`": false }, `"VMs`": [ { `"Name`": `"Test`", `"HyperVServers`": [ { `"GoldenImagePath`": `"C:\\Test.vhdx`", `"VMHardDiskPath`" : `"C:\\Test`", `"SwitchName`" : `"Test`" } ], `"Provisioning`" : { `"Scripts`": [ `"C:\\Test.exe`" ] } } ] }" { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - Provision Scripts can only be used if DeploymentOptions.StartAfterCreation is true" } It 'UNCCredentialScriptRequiredWhenGoldenImagePathIsUNC_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile" . "$rootDir\Private\Classes" $defFile = "{ `"VMs`": [ { `"Name`": `"Test`", `"HyperVServers`": [ { `"GoldenImagePath`": `"\\\\UNC\\Test.vhdx`", `"VMHardDiskPath`" : `"C:\\Test`" } ], } ] }" { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - UNCCredentialScript is required when GoldenImagePath is a UNC path" } It 'UNCCredentialScriptCanOnlyBePS1Script_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile" . "$rootDir\Private\Classes" $defFile = "{ `"VMs`": [ { `"Name`": `"Test`", `"HyperVServers`": [ { `"GoldenImagePath`": `"\\\\UNC\\Test.vhdx`", `"VMHardDiskPath`" : `"C:\\Test`" } ], `"UNCCredentialScript`": `"Test`" } ] }" { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - UNCCredentialScript must be a valid ps1 script" } } |