136 lines
7.2 KiB
PowerShell
136 lines
7.2 KiB
PowerShell
. $PSScriptRoot\..\..\Load-PesterModules.ps1
|
|
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.tests\.', '.'
|
|
$functionPath = Join-Path -Path $here -ChildPath $sut
|
|
Write-Host "Overriding SUT: $functionPath"
|
|
Import-Module $functionPath -Force
|
|
$moduleForMock = ""
|
|
|
|
Describe "Set-DotNetCoreProfiling" {
|
|
|
|
$global:manifestTemplate = @"
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<packageManifest>
|
|
<serviceManifest>
|
|
<runtime>_replaceME_</runtime>
|
|
</serviceManifest>
|
|
</packageManifest>
|
|
"@
|
|
$serviceName = "Alkami.Services.Tenant"
|
|
$ServiceRegkey = "HKLM:\SYSTEM\CurrentControlSet\Services"
|
|
$serviceDirPath = "C:\ProgramData\chocolatey\lib-bad\$serviceName"
|
|
|
|
# Mock the pieces that make sure that the app.config is a real file.
|
|
Mock -ModuleName $moduleForMock New-item {}
|
|
Mock -ModuleName $moduleForMock Get-LogLeadName {}
|
|
Mock -ModuleName $moduleForMock Get-ChocolateyInstallPath {}
|
|
Mock -ModuleName $moduleForMock Set-ItemProperty {}
|
|
Mock -ModuleName $moduleForMock Write-Host {}
|
|
Mock -ModuleName $moduleForMock Get-PackageManifest {return ""}
|
|
Mock -ModuleName $moduleForMock Write-Warning {}
|
|
Mock -ModuleName $moduleForMock Test-IsServiceManifestCore { return $true }
|
|
Mock -ModuleName $moduleForMock Get-ItemProperty { }
|
|
|
|
Context "Service is not dot net core" {
|
|
Mock -ModuleName $moduleForMock Test-IsServiceManifestCore { return $false}
|
|
|
|
It "registry work is skipped" {
|
|
Set-DotNetCoreProfiling -Path $serviceDirPath -Enabled $false
|
|
Assert-MockCalled -ModuleName $moduleForMock Write-Host -Times 1 -Exactly -Scope It -ParameterFilter {
|
|
$object -eq " : Runtime of for service [$serviceName] is not dot net core, skipping registry."
|
|
}
|
|
}
|
|
}
|
|
Context "Reg key IS NOT present" {
|
|
Mock -ModuleName $moduleForMock Test-Path { return $false }
|
|
|
|
It "If enabled is false, still creates Key" {
|
|
Set-DotNetCoreProfiling -Path $serviceDirPath -Enabled $false
|
|
Assert-MockCalled -ModuleName $moduleForMock New-Item -Times 1 -Exactly -Scope It -ParameterFilter {
|
|
$Path -eq "$ServiceRegkey\$serviceName"
|
|
}
|
|
}
|
|
It "If enabled is true, still creates Key" {
|
|
Set-DotNetCoreProfiling -Path $serviceDirPath -Enabled $true
|
|
Assert-MockCalled -ModuleName $moduleForMock New-Item -Times 1 -Exactly -Scope It -ParameterFilter {
|
|
$Path -eq "$ServiceRegkey\$serviceName"
|
|
}
|
|
}
|
|
It "Sets value to false" {
|
|
Set-DotNetCoreProfiling -Path $serviceDirPath -Enabled $false
|
|
Assert-MockCalled -ModuleName $moduleForMock Set-ItemProperty -Times 1 -Exactly -Scope It -ParameterFilter {
|
|
$Path -eq "$ServiceRegkey\$serviceName" -and $Name -eq "Environment" -and $Value -eq "CORECLR_ENABLE_PROFILING=0"
|
|
}
|
|
}
|
|
It "Sets value to true" {
|
|
Set-DotNetCoreProfiling -Path $serviceDirPath -Enabled $true
|
|
Assert-MockCalled -ModuleName $moduleForMock Set-ItemProperty -Times 1 -Exactly -Scope It -ParameterFilter {
|
|
$Path -eq "$ServiceRegkey\$serviceName" -and $Name -eq "Environment" -and $Value -eq "CORECLR_ENABLE_PROFILING=1"
|
|
}
|
|
}
|
|
}
|
|
Context "Reg key IS present" {
|
|
Mock -ModuleName $moduleForMock Test-Path { return $true }
|
|
|
|
It "value already set to false, skips Setting" {
|
|
Mock -ModuleName $moduleForMock Get-ItemProperty { return @{Environment = @("CORECLR_ENABLE_PROFILING=0") } }
|
|
|
|
Set-DotNetCoreProfiling -Path $serviceDirPath -Enabled $false
|
|
Assert-MockCalled -ModuleName $moduleForMock Write-Host -Times 1 -Exactly -Scope It -ParameterFilter {
|
|
$object -eq " : Registry key already set, skipping update to key."
|
|
}
|
|
}
|
|
It "value already set to true, skips Setting" {
|
|
Mock -ModuleName $moduleForMock Get-ItemProperty { return @{Environment = @("CORECLR_ENABLE_PROFILING=1") } }
|
|
|
|
Set-DotNetCoreProfiling -Path $serviceDirPath -Enabled $true
|
|
Assert-MockCalled -ModuleName $moduleForMock Write-Host -Times 1 -Exactly -Scope It -ParameterFilter {
|
|
$object -eq " : Registry key already set, skipping update to key."
|
|
}
|
|
}
|
|
}
|
|
Context "Reg key IS present, and value has contents" {
|
|
Mock -ModuleName $moduleForMock Get-ItemProperty { return @{Environment = @("george=best", "learning is FUNdamental") } }
|
|
Mock -ModuleName $moduleForMock Test-Path { return $true }
|
|
|
|
It "value is not pre-set and is set to false" {
|
|
[string[]]$expectedEnvValue = "george=best" + $([char]0) + "learning is FUNdamental" + $([char]0) + "CORECLR_ENABLE_PROFILING=0" + $([char]0)
|
|
|
|
Set-DotNetCoreProfiling -Path $serviceDirPath -Enabled $false
|
|
Assert-MockCalled -ModuleName $moduleForMock Set-ItemProperty -Times 1 -Exactly -Scope It -ParameterFilter {
|
|
$Path -eq "$ServiceRegkey\$serviceName" -and $Name -eq "Environment" -and $Value -eq $expectedEnvValue
|
|
}
|
|
}
|
|
It "value is not pre-set and is set to true" {
|
|
[string[]]$expectedEnvValue = "george=best" + $([char]0) + "learning is FUNdamental" + $([char]0) + "CORECLR_ENABLE_PROFILING=1" + $([char]0)
|
|
|
|
Set-DotNetCoreProfiling -Path $serviceDirPath -Enabled $true
|
|
Assert-MockCalled -ModuleName $moduleForMock Set-ItemProperty -Times 1 -Exactly -Scope It -ParameterFilter {
|
|
$Path -eq "$ServiceRegkey\$serviceName" -and $Name -eq "Environment" -and $Value -eq $expectedEnvValue
|
|
}
|
|
}
|
|
}
|
|
Context "Reg key IS present, value has contents, and setting is flipped" {
|
|
Mock -ModuleName $moduleForMock Test-Path { return $true }
|
|
|
|
It "value is true and is set to false" {
|
|
Mock -ModuleName $moduleForMock Get-ItemProperty { return @{Environment = @("george=best", "CORECLR_ENABLE_PROFILING=1", "learning is FUNdamental") } }
|
|
[string[]]$expectedEnvValue = "george=best" + $([char]0) + "learning is FUNdamental" + $([char]0) + "CORECLR_ENABLE_PROFILING=0" + $([char]0)
|
|
|
|
Set-DotNetCoreProfiling -Path $serviceDirPath -Enabled $false
|
|
Assert-MockCalled -ModuleName $moduleForMock Set-ItemProperty -Times 1 -Exactly -Scope It -ParameterFilter {
|
|
$Path -eq "$ServiceRegkey\$serviceName" -and $Name -eq "Environment" -and $Value -eq $expectedEnvValue
|
|
}
|
|
}
|
|
It "value is false and is set to true" {
|
|
Mock -ModuleName $moduleForMock Get-ItemProperty { return @{Environment = @("george=best", "CORECLR_ENABLE_PROFILING=0", "learning is FUNdamental") } }
|
|
[string[]]$expectedEnvValue = "george=best" + $([char]0) + "learning is FUNdamental" + $([char]0) + "CORECLR_ENABLE_PROFILING=1" + $([char]0)
|
|
|
|
Set-DotNetCoreProfiling -Path $serviceDirPath -Enabled $true
|
|
Assert-MockCalled -ModuleName $moduleForMock Set-ItemProperty -Times 1 -Exactly -Scope It -ParameterFilter {
|
|
$Path -eq "$ServiceRegkey\$serviceName" -and $Name -eq "Environment" -and $Value -eq $expectedEnvValue
|
|
}
|
|
}
|
|
}
|
|
}
|