Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SqlServerDsc: Integration tests now also run using SQLPS #1932

Open
wants to merge 35 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added

- SqlServerDsc
- Integration tests now also run using SQLPS.
- Added a new build task `fastbuild` that can be used during development
process when there are no need to generate documentation.
- Added new public command:
Expand Down
9 changes: 8 additions & 1 deletion RequiredModules.psd1
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,14 @@
Sampler = 'latest'
'Sampler.GitHubTasks' = 'latest'
MarkdownLinkCheck = 'latest'
'DscResource.Test' = 'latest'

'DscResource.Test' = @{
Version = 'latest'
Parameters = @{
AllowPrerelease = $true
}
}

xDscResourceDesigner = 'latest'
'DscResource.DocGenerator' = 'latest'

Expand Down
792 changes: 441 additions & 351 deletions azure-pipelines.yml

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions source/DSCResources/DSC_SqlReplication/DSC_SqlReplication.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,16 @@ function Get-TargetResource
$script:localizedData.GetCurrentState -f $InstanceName
)

Write-Verbose -Message ('All assemblies: {0}' -f ([System.AppDomain]::CurrentDomain.GetAssemblies() | Out-String)) -Verbose
Write-Verbose -Message ('All SQL assemblies: {0}' -f ([System.AppDomain]::CurrentDomain.GetAssemblies() | ? Location -like '*SQL*' | Out-String)) -Verbose
Fixed Show fixed Hide fixed
Write-Verbose -Message ('ConnectionInfo assembly: {0}' -f ([System.AppDomain]::CurrentDomain.GetAssemblies() | ? Location -like '*ConnectionInfo*' | fl * | Out-String)) -Verbose
Fixed Show fixed Hide fixed
Fixed Show fixed Hide fixed

Import-SqlDscPreferredModule

Write-Verbose -Message ('All assemblies: {0}' -f ([System.AppDomain]::CurrentDomain.GetAssemblies() | Out-String)) -Verbose
Write-Verbose -Message ('All SQL assemblies: {0}' -f ([System.AppDomain]::CurrentDomain.GetAssemblies() | ? Location -like '*SQL*' | Out-String)) -Verbose
Fixed Show fixed Hide fixed
Write-Verbose -Message ('ConnectionInfo assembly: {0}' -f ([System.AppDomain]::CurrentDomain.GetAssemblies() | ? Location -like '*ConnectionInfo*' | fl * | Out-String)) -Verbose
Fixed Show fixed Hide fixed
Fixed Show fixed Hide fixed

$sqlMajorVersion = Get-SqlInstanceMajorVersion -InstanceName $InstanceName
$localSqlName = Get-SqlLocalServerName -InstanceName $InstanceName

Expand Down Expand Up @@ -439,6 +447,7 @@ function New-ServerConnection

if ($SqlMajorVersion -eq 16)
{
Write-Verbose -Message 'DEBUG100' -Verbose
<#
For SQL Server 2022 the object must be created with New-Object and
also requires the module SqlServer v22 (minimum v22.0.49-preview).
Expand All @@ -447,6 +456,7 @@ function New-ServerConnection
}
else
{
Write-Verbose -Message 'DEBUG101' -Verbose
<#
SQL Server 2016, 2017, and 2019 must use the assembly in the GAC. If the
method for SQL Server 2022 is used it throws the error:
Expand Down
13 changes: 12 additions & 1 deletion source/DSCResources/DSC_SqlSetup/DSC_SqlSetup.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -1639,8 +1639,15 @@ function Set-TargetResource
$forceReloadPowerShellModule = $true
}

Write-Verbose -Message 'DEBUG1' -Verbose
Write-Verbose -Message ('Force Reload: {0}' -f ($forceReloadPowerShellModule | Out-String)) -Verbose

if ((-not $setupEndedInError) -and $forceReloadPowerShellModule)
{
Write-Verbose -Message ('Session PSModulePath: {0}' -f $env:PSModulePath) -Verbose
Write-Verbose -Message ('Available modules: {0}' -f (Get-Module -Name @('SqlServer', 'SqlServerDsc', 'SQLPS') -ListAvailable | Out-String)) -Verbose
Write-Verbose -Message ('All PSModulePath: {0}' -f (Get-PSModulePath -FromTarget 'Session', 'User', 'Machine')) -Verbose

<#
Force reload of SQLPS module in case a newer version of
SQL Server was installed that contains a newer version
Expand All @@ -1650,7 +1657,11 @@ function Set-TargetResource
matches the latest assemblies in GAC, mitigating for example
issue #1151.
#>
Import-SqlDscPreferredModule -Force
Import-SqlDscPreferredModule -Force -Verbose

Write-Verbose -Message ('Session PSModulePath: {0}' -f $env:PSModulePath) -Verbose
Write-Verbose -Message ('Available modules: {0}' -f (Get-Module -Name @('SqlServer', 'SqlServerDsc', 'SQLPS') -ListAvailable | Out-String)) -Verbose
Write-Verbose -Message ('All PSModulePath: {0}' -f (Get-PSModulePath -FromTarget 'Session', 'User', 'Machine')) -Verbose
}

if (-not (Test-TargetResource @PSBoundParameters))
Expand Down
13 changes: 12 additions & 1 deletion source/Modules/SqlServerDsc.Common/SqlServerDsc.Common.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -503,7 +503,18 @@ function Connect-SQL
$Encrypt
)

Import-SqlDscPreferredModule
Write-Verbose -Message 'DEBUG2' -Verbose
Write-Verbose -Message ('Session PSModulePath: {0}' -f $env:PSModulePath) -Verbose
Write-Verbose -Message ('Available modules: {0}' -f (Get-Module -Name @('SqlServer', 'SqlServerDsc', 'SQLPS') -ListAvailable | Out-String)) -Verbose
Write-Verbose -Message ('All PSModulePath: {0}' -f (Get-PSModulePath -FromTarget 'Session', 'User', 'Machine')) -Verbose

Write-Verbose -Message 'DEBUG3' -Verbose
Write-Verbose -Message ('Found module: {0}' -f (Get-SqlDscPreferredModule -ErrorAction 'Continue')) -Verbose
Write-Verbose -Message ('Found module (refresh): {0}' -f (Get-SqlDscPreferredModule -Refresh -ErrorAction 'Stop')) -Verbose

Import-SqlDscPreferredModule -Force

Write-Verbose -Message (Get-Module -Name @('SqlServer', 'SqlServerDsc', 'SQLPS') -ListAvailable | Out-String) -Verbose

if ($InstanceName -eq 'MSSQLSERVER')
{
Expand Down
13 changes: 12 additions & 1 deletion source/Public/Get-SqlDscPreferredModule.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,13 @@ function Get-SqlDscPreferredModule
}
}

if ($Refresh.IsPresent)
Write-Verbose -Message ('Get-SqlDscPreferredModule: DEBUG Session: {0}' -f (Get-PSModulePath -FromTarget 'Session')) -Verbose
Write-Verbose -Message ('Get-SqlDscPreferredModule: DEBUG User: {0}' -f (Get-PSModulePath -FromTarget 'User')) -Verbose
Write-Verbose -Message ('Get-SqlDscPreferredModule: DEBUG Machine: {0}' -f (Get-PSModulePath -FromTarget 'Machine')) -Verbose
Write-Verbose -Message ('Get-SqlDscPreferredModule: DEBUG $env: {0}' -f $env:PSModulePath) -Verbose

#if ($Refresh.IsPresent)
if ($true)
{
# Only run on Windows that has Machine state.
if (-not ($IsLinux -or $IsMacOS))
Expand Down Expand Up @@ -127,11 +133,16 @@ function Get-SqlDscPreferredModule
}
)

Write-Verbose -Message ('Get-SqlDscPreferredModule: Available Modules: {0}' -f ($availableModule | Out-String)) -Verbose

foreach ($preferredModuleName in $Name)
{
$preferredModule = $availableModule |
Where-Object -Property 'Name' -EQ -Value $preferredModuleName

Write-Verbose -Message ('Get-SqlDscPreferredModule: PreferredModuleName: {0}' -f $preferredModuleName) -Verbose
Write-Verbose -Message ('Get-SqlDscPreferredModule: Found PreferredModule: {0}' -f ($preferredModule | Out-String)) -Verbose

if ($preferredModule)
{
if ($preferredModule.Name -eq 'SQLPS')
Expand Down
15 changes: 15 additions & 0 deletions tests/Integration/DSC_SqlAgentAlert.Integration.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ BeforeDiscovery {
}

BeforeAll {
Write-Verbose -Message ('SqlAgentAlert: DEBUG2 Session: {0}' -f (Get-PSModulePath -FromTarget 'Session')) -Verbose
Write-Verbose -Message ('SqlAgentAlert: DEBUG2 User: {0}' -f (Get-PSModulePath -FromTarget 'User')) -Verbose
Write-Verbose -Message ('SqlAgentAlert: DEBUG2 Machine: {0}' -f (Get-PSModulePath -FromTarget 'Machine')) -Verbose
Write-Verbose -Message ('SqlAgentAlert: DEBUG2 $env: {0}' -f $env:PSModulePath) -Verbose

# Need to define the variables here which will be used in Pester Run.
$script:dscModuleName = 'SqlServerDsc'
$script:dscResourceFriendlyName = 'SqlAgentAlert'
Expand All @@ -42,8 +47,18 @@ BeforeAll {
-ResourceType 'Mof' `
-TestType 'Integration'

Write-Verbose -Message ('SqlAgentAlert: DEBUG3 Session: {0}' -f (Get-PSModulePath -FromTarget 'Session')) -Verbose
Write-Verbose -Message ('SqlAgentAlert: DEBUG3 User: {0}' -f (Get-PSModulePath -FromTarget 'User')) -Verbose
Write-Verbose -Message ('SqlAgentAlert: DEBUG3 Machine: {0}' -f (Get-PSModulePath -FromTarget 'Machine')) -Verbose
Write-Verbose -Message ('SqlAgentAlert: DEBUG3 $env: {0}' -f $env:PSModulePath) -Verbose

$configFile = Join-Path -Path $PSScriptRoot -ChildPath "$($script:dscResourceName).config.ps1"
. $configFile

Write-Verbose -Message ('SqlAgentAlert: DEBUG4 Session: {0}' -f (Get-PSModulePath -FromTarget 'Session')) -Verbose
Write-Verbose -Message ('SqlAgentAlert: DEBUG4 User: {0}' -f (Get-PSModulePath -FromTarget 'User')) -Verbose
Write-Verbose -Message ('SqlAgentAlert: DEBUG4 Machine: {0}' -f (Get-PSModulePath -FromTarget 'Machine')) -Verbose
Write-Verbose -Message ('SqlAgentAlert: DEBUG4 $env: {0}' -f $env:PSModulePath) -Verbose
}

AfterAll {
Expand Down
14 changes: 12 additions & 2 deletions tests/Integration/DSC_SqlSetup.Integration.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,17 @@ BeforeAll {
}

AfterAll {
Restore-TestEnvironment -TestEnvironment $script:testEnvironment
Write-Verbose -Message ('SqlSetup: DEBUG1 Session: {0}' -f (Get-PSModulePath -FromTarget 'Session')) -Verbose
Write-Verbose -Message ('SqlSetup: DEBUG1 User: {0}' -f (Get-PSModulePath -FromTarget 'User')) -Verbose
Write-Verbose -Message ('SqlSetup: DEBUG1 Machine: {0}' -f (Get-PSModulePath -FromTarget 'Machine')) -Verbose
Write-Verbose -Message ('SqlSetup: DEBUG1 $env: {0}' -f $env:PSModulePath) -Verbose

Restore-TestEnvironment -TestEnvironment $script:testEnvironment -KeepNewMachinePSModulePath

Write-Verbose -Message ('SqlSetup: DEBUG2 Session: {0}' -f (Get-PSModulePath -FromTarget 'Session')) -Verbose
Write-Verbose -Message ('SqlSetup: DEBUG2 User: {0}' -f (Get-PSModulePath -FromTarget 'User')) -Verbose
Write-Verbose -Message ('SqlSetup: DEBUG2 Machine: {0}' -f (Get-PSModulePath -FromTarget 'Machine')) -Verbose
Write-Verbose -Message ('SqlSetup: DEBUG2 $env: {0}' -f $env:PSModulePath) -Verbose

Get-Module -Name 'CommonTestHelper' -All | Remove-Module -Force
}
Expand Down Expand Up @@ -214,7 +224,7 @@ Describe "$($script:dscResourceName)_Integration" -Tag @('Integration_SQL2016',
}
}

Context ('When using configuration <_>') -ForEach @(
Context ('When using configuration <_>') -Skip:($null -ne $env:SkipInstallSMO) -ForEach @(
"$($script:dscResourceName)_InstallSMOModule_Config"
) {
BeforeAll {
Expand Down
14 changes: 12 additions & 2 deletions tests/Integration/DSC_SqlSetup.config.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,16 @@ else
}
}

# Do not use the feature flag AnalysisServicesConnection when running tests with SQLPS.
$featureFlag = if ((Get-Module -Name 'SqlServer', 'dbatools' -ListAvailable))
{
@('AnalysisServicesConnection')
}
else
{
@()
}

<#
Creating all the credential objects to save some repeating code.
#>
Expand Down Expand Up @@ -691,7 +701,7 @@ Configuration DSC_SqlSetup_InstallMultiDimensionalAnalysisServicesAsSystem_Confi
{
SqlSetup 'Integration_Test'
{
FeatureFlag = @('AnalysisServicesConnection')
FeatureFlag = [System.String[]] $featureFlag

InstanceName = $Node.AnalysisServicesMultiInstanceName
Features = $Node.AnalysisServicesMultiFeatures
Expand Down Expand Up @@ -745,7 +755,7 @@ Configuration DSC_SqlSetup_InstallTabularAnalysisServicesAsSystem_Config
{
SqlSetup 'Integration_Test'
{
FeatureFlag = @('AnalysisServicesConnection')
FeatureFlag = [System.String[]] $featureFlag

InstanceName = $Node.AnalysisServicesTabularInstanceName
Features = $Node.AnalysisServicesTabularFeatures
Expand Down