Tests/Test-DefinitionFile.Tests.ps1
Describe 'Test-DefinitionFile Tests' { It 'NewVMDiskSizeBytesAndGoldenImagePathStopsExecution_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile.ps1" . "$rootDir\Private\Classes.ps1" $defFile = @' { "VMs": [ { "Name": "Test", "ProcessorCount": 8, "MemoryStartupBytes": "1GB", "MemoryMaximumBytes": "8GB", "CheckpointType": "Disabled", "NewVMDiskSizeBytes": "1GB", "HyperVServers": [ { "Name": "TestServer", "SwitchName": "VM Virtual Switch", "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.ps1" . "$rootDir\Private\Classes.ps1" $defFile = @' { "VMs": [ { "Name": "Test", "ProcessorCount": 8, "MemoryStartupBytes": "1GB", "MemoryMaximumBytes": "8GB", "CheckpointType": "Disabled", "HyperVServers": [ { "Name": "TestServer", "SwitchName": "VM Virtual Switch", "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.ps1" . "$rootDir\Private\Classes.ps1" $defFile = @' { "VMs": [ { "Name": "Test", "ProcessorCount": 8, "MemoryStartupBytes": "1GB", "MemoryMaximumBytes": "8GB", "CheckpointType": "Disabled", "HyperVServers": [ { "Name": "TestServer", "SwitchName": "VM Virtual Switch", "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.ps1" . "$rootDir\Private\Classes.ps1" $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.ps1" . "$rootDir\Private\Classes.ps1" $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.ps1" . "$rootDir\Private\Classes.ps1" $defFile = @' { "DeploymentOptions": { "StartAfterCreation": true }, "VMs": [ { "Name": "Test", "HyperVServers": [ { "SwitchName": "Test", "VMHardDiskPath": "C:\\Test" } ], "Provisioning": { "RebootAfterEachScript": true, "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.ps1" . "$rootDir\Private\Classes.ps1" $defFile = @' { "DeploymentOptions": { "StartAfterCreation": true }, "VMs": [ { "Name": "Test", "HyperVServers": [ { "VMHardDiskPath": "C:\\Test", "GoldenImagePath": "C:\\Test.vhdx" } ], "Provisioning": { "RebootAfterEachScript": true, "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.ps1" . "$rootDir\Private\Classes.ps1" $defFile = @' { "DeploymentOptions": { "StartAfterCreation": false }, "VMs": [ { "Name": "Test", "HyperVServers": [ { "VMHardDiskPath": "C:\\Test", "GoldenImagePath": "C:\\Test.vhdx", "SwitchName": "Test" } ], "Provisioning": { "RebootAfterEachScript": true, "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.ps1" . "$rootDir\Private\Classes.ps1" $defFile = @' { "DeploymentOptions": { "StartAfterCreation": true }, "VMs": [ { "Name": "Test", "HyperVServers": [ { "VMHardDiskPath": "C:\\Test", "GoldenImagePath": "C:\\Test.vhdx", "SwitchName": "Test" } ], "Provisioning": { "RebootAfterEachScript": true, "Scripts": [ "C:\\Test.exe" ] } } ] } '@ { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - C:\Test.exe - Provision Script must be a valid ps1 file" } It 'UNCCredentialScriptRequiredWhenGoldenImagePathIsUNC_ShouldThrow' { $rootDir = (get-item $PSScriptRoot).Parent.FullName . "$rootDir\Private\Test-DefinitionFile.ps1" . "$rootDir\Private\Classes.ps1" $defFile = @' { "DeploymentOptions": { "StartAfterCreation": true }, "VMs": [ { "Name": "Test", "HyperVServers": [ { "VMHardDiskPath": "C:\\Test", "GoldenImagePath": "\\\\UNC\\Test.vhdx" } ] } ] } '@ { 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.ps1" . "$rootDir\Private\Classes.ps1" $defFile = @' { "DeploymentOptions": { "StartAfterCreation": true }, "VMs": [ { "Name": "Test", "HyperVServers": [ { "VMHardDiskPath": "C:\\Test", "GoldenImagePath": "\\\\UNC\\Test.vhdx" } ], UNCCredentialScript: "Test" } ] } '@ { Test-DefinitionFile -DefinitionJson $defFile } | Should -Throw "Test - UNCCredentialScript must be a valid ps1 script" } } |