DSCResources/xPSDesiredStateConfiguration/Modules/DscPullServerSetup/DscPullServerSetupTest/DscPullServerSetupTest.ps1
<# * * Once you setup your pull server with registration, run the following set of tests on the pull server machine * to verify if the pullserver is setup properly and ready to go. #> <# * Prerequisites: * You need Pester module to run this test. * With PowerShell 5, use Install-Module Pester to install the module if it is not on pull server node. * With older PowerShell, install PackageManagement extensions first. #> <# * Run the test via Invoke-Pester ./PullServerSetupTests.ps1 * This test assumes default values are used during deployment for the location of web.config and pull server URL. * If default values are not used during deployment , please update these values in the 'BeforeAll' block accordingly. #> Describe PullServerInstallationTests { BeforeAll { # UPDATE THE PULLSERVER URL, If it is different from the default value. $DscHostFQDN = [System.Net.Dns]::GetHostEntry([System.String] $env:computername).HostName $script:dscPullServerURL = "https://$($DscHostFQDN):8080/PSDSCPullserver.svc" # UPDATE THE LOCATION OF WEB.CONFIG, if it is differnet from the default path. $DscWebConfigChildPath = '\inetpub\wwwroot\psdscpullserver\web.config' $DscWebConfigPath = Join-Path -Path $env:SystemDrive -ChildPath $DscWebConfigChildPath # Skip all tests if web.config is not found if (-not (Test-Path -Path $DscWebConfigPath)){ throw 'No pullserver web.config found.' } # Get web.config content as XML $DscWebConfigXML = [System.Xml.XmlDocument] (Get-Content -Path $DscWebConfigPath) # Registration Keys info. $DscRegKeyName = 'RegistrationKeys.txt' $DscRegKeyXMLNode = "//appSettings/add[@key = 'RegistrationKeyPath']" $DscRegKeyParentPath = ($DscWebConfigXML.SelectSingleNode($DscRegKeyXMLNode)).Value $DscRegKeyPath = Join-Path -Path $DscRegKeyParentPath -ChildPath $DscRegKeyName $script:dscRegKey = Get-Content -Path $DscRegKeyPath # Configuration repository info. $DscConfigPathXMLNode = "//appSettings/add[@key = 'ConfigurationPath']" $DscConfigPath = ($DscWebConfigXML.SelectSingleNode($DscConfigPathXMLNode)).Value # Module repository info. $DscModulePathXMLNode = "//appSettings/add[@key = 'ModulePath']" $script:dscModulePath = ($DscWebConfigXML.SelectSingleNode($DscModulePathXMLNode)).Value # Testing Files/Variables $DscTestMetaConfigName = 'PullServerSetupTestMetaConfig' $script:dscTestMetaConfigPath = Join-Path -Path $PSScriptRoot -ChildPath $DscTestMetaConfigName $DscTestConfigName = 'PullServerSetUpTest' $script:dscTestMofPath = Join-Path -Path $DscConfigPath -ChildPath "$DscTestConfigName.mof" } Context 'Verify general pull server functionality' { It "$DscRegKeyPath exists" { $DscRegKeyPath | Should -Exist } It "Module repository $script:dscModulePath exists" { $script:dscModulePath | Should -Exist } It "Configuration repository $DscConfigPath exists" { $DscConfigPath | Should -Exist } It "Verify server $script:dscPullServerURL is up and running" { $DscPullServerResponse = Invoke-WebRequest -Uri $script:dscPullServerURL -UseBasicParsing $DscPullServerResponse.StatusCode | Should -Be 200 } } Context 'Verify pull end to end works' { It 'Tests local configuration manager' { [DscLocalConfigurationManager()] Configuration $DscTestMetaConfigName { Settings { RefreshMode = 'PULL' } ConfigurationRepositoryWeb ConfigurationManager { ServerURL = $script:dscPullServerURL RegistrationKey = $script:dscRegKey ConfigurationNames = @($DscTestConfigName) } } PullServerSetupTestMetaConfig -OutputPath $script:dscTestMetaConfigPath Set-DscLocalConfigurationManager -Path $script:dscTestMetaConfigPath -Verbose:$VerbosePreference -Force $DscLocalConfigNames = (Get-DscLocalConfigurationManager).ConfigurationDownloadManagers.ConfigurationNames $DscLocalConfigNames -contains $DscTestConfigName | Should -BeTrue } It "Creates mof and checksum files in $DscConfigPath" { # Sample test configuration Configuration NoOpConfig { Import-DscResource -ModuleName PSDesiredStateConfiguration Node ($DscTestConfigName) { Script script { GetScript = '@{}' SetScript = '{}' TestScript = { if ($false) { return $true } else {return $false} } } } } # Create a mof file copy it to NoOpConfig -OutputPath $DscConfigPath -Verbose:$VerbosePreference $script:dscTestMofPath | Should -Exist # Create checksum New-DscChecksum $DscConfigPath -Verbose:$VerbosePreference -Force "$script:dscTestMofPath.checksum" | Should -Exist } It 'Updates DscConfiguration Successfully' { Update-DscConfiguration -Wait -Verbose:$VerbosePreference (Get-DscConfiguration).ConfigurationName | Should -Be 'NoOpConfig' } } } |