620 lines
27 KiB
PowerShell
620 lines
27 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 = ""
|
||
|
$currentErrorActionPreference = $ErrorActionPreference
|
||
|
$ErrorActionPreference = "stop"
|
||
|
|
||
|
# Init functions. Used to reset package objets in each Context.
|
||
|
function Init-PackageData {
|
||
|
$webPackage1 = New-DummyPackageInstallationData -PackageName "web.package1" -PackageVersion "1.1.0" -IsWebOnly
|
||
|
$webPackage2 = New-DummyPackageInstallationData -PackageName "web.package2" -PackageVersion "1.1.0" -IsWebOnly
|
||
|
$appPackage1 = New-DummyPackageInstallationData -PackageName "app.package1" -PackageVersion "1.1.0" -IsAppOnly
|
||
|
$appPackage2 = New-DummyPackageInstallationData -PackageName "app.package2" -PackageVersion "1.1.0" -IsAppOnly
|
||
|
$micPackage1 = New-DummyPackageInstallationData -PackageName "mic.package1" -PackageVersion "1.1.0" -IsMicOnly
|
||
|
$micPackage2 = New-DummyPackageInstallationData -PackageName "mic.package2" -PackageVersion "1.1.0" -IsMicOnly
|
||
|
|
||
|
$appPackageArray = @($appPackage1, $appPackage2)
|
||
|
$webPackageArray = @($webPackage1, $webPackage2)
|
||
|
$micPackageArray = @($micPackage1, $micPackage2)
|
||
|
|
||
|
$packageData = New-PackageMetadataObject
|
||
|
|
||
|
$packageData.AppPackagesToInstall = $appPackageArray
|
||
|
$packageData.AppPackagesToInstall += $micPackageArray
|
||
|
$packageData.WebPackagesToInstall = $webPackageArray
|
||
|
$packageData.ServersToQuery = @("fake.appserver.1", "fake.fabserver.1", "fake.micserver.1", "fake.webserver.1")
|
||
|
$packageData.AppServers = @("fake.appserver.1")
|
||
|
$packageData.FabServers = @("fake.fabserver.1")
|
||
|
$packageData.MicServers = @("fake.micserver.1")
|
||
|
$packageData.WebServers = @("fake.webserver.1")
|
||
|
$packageData.HasAppServers = $true
|
||
|
$packageData.HasFabServers = $true
|
||
|
$packageData.HasMicServers = $true
|
||
|
$packageData.HasWebServers = $true
|
||
|
|
||
|
return $packageData
|
||
|
}
|
||
|
|
||
|
function Init-DebugMetadata {
|
||
|
$webPackage1 = New-DummyPackageInstallationData -PackageName "web.package1" -PackageVersion "1.1.0" -IsWebOnly
|
||
|
$webPackage2 = New-DummyPackageInstallationData -PackageName "web.package2" -PackageVersion "1.1.0" -IsWebOnly
|
||
|
$appPackage1 = New-DummyPackageInstallationData -PackageName "app.package1" -PackageVersion "1.1.0" -IsAppOnly
|
||
|
$appPackage2 = New-DummyPackageInstallationData -PackageName "app.package2" -PackageVersion "1.1.0" -IsAppOnly
|
||
|
$micPackage1 = New-DummyPackageInstallationData -PackageName "mic.package1" -PackageVersion "1.1.0" -IsMicOnly
|
||
|
$micPackage2 = New-DummyPackageInstallationData -PackageName "mic.package2" -PackageVersion "1.1.0" -IsMicOnly
|
||
|
|
||
|
$debugMetadata = New-Object psobject -property @{
|
||
|
WebServerPackages = @()
|
||
|
AppServerPackages = @()
|
||
|
MicServerPackages = @()
|
||
|
FabServerPackages = @()
|
||
|
|
||
|
WebPackagesToInstallMap = @{}
|
||
|
AppPackagesToInstallMap = @{}
|
||
|
ClassifiedPackagesMap = @{}
|
||
|
ExistingInstalledHotfixes = @()
|
||
|
}
|
||
|
|
||
|
$appServerPackageArray = @($appPackage1, $appPackage2, $webPackage1)
|
||
|
$webServerPackageArray = @($webPackage1, $webPackage2, $appPackage1)
|
||
|
$micServerPackageArray = @($micPackage1, $micPackage2, $webPackage1)
|
||
|
$fabServerPackageArray = @($micPackage1, $micPackage2, $webPackage1)
|
||
|
|
||
|
$debugMetadata.WebServerPackages = $webServerPackageArray
|
||
|
$debugMetadata.AppServerPackages = $appServerPackageArray
|
||
|
$debugMetadata.MicServerPackages = $micServerPackageArray
|
||
|
$debugMetadata.FabServerPackages = $fabServerPackageArray
|
||
|
|
||
|
$debugMetadata.ClassifiedPackagesMap["app.package1"] = $appPackage1
|
||
|
$debugMetadata.ClassifiedPackagesMap["app.package2"] = $appPackage2
|
||
|
$debugMetadata.ClassifiedPackagesMap["mic.package1"] = $micPackage1
|
||
|
$debugMetadata.ClassifiedPackagesMap["mic.package2"] = $micPackage2
|
||
|
$debugMetadata.ClassifiedPackagesMap["web.package1"] = $webPackage1
|
||
|
$debugMetadata.ClassifiedPackagesMap["web.package2"] = $webPackage2
|
||
|
|
||
|
return $debugMetadata
|
||
|
}
|
||
|
|
||
|
$password = ConvertTo-SecureString 'fake' -AsPlainText -Force
|
||
|
$fakeCred = New-Object System.Management.Automation.PSCredential('bogus', $password)
|
||
|
|
||
|
Describe "Get-ServerPackageInformation" {
|
||
|
#region Mocks
|
||
|
Mock -CommandName Write-Host -MockWith {}
|
||
|
Mock -CommandName Write-Warning -MockWith {}
|
||
|
Mock -CommandName Write-Error -MockWith {}
|
||
|
|
||
|
#TODO : Check the return value; possibly needs to be massaged. If so, might need a duplicate in a specific Context.
|
||
|
Mock -CommandName Get-EnvironmentData -MockWith { return $packageData }
|
||
|
|
||
|
#TODO : Check the return value; possibly needs to be massaged. If so, might need a duplicate in a specific Context.
|
||
|
Mock -CommandName Get-PackageServerMapping -MockWith { return $packageData, $debugMetadata }
|
||
|
|
||
|
#TODO : Check the return value; possibly needs to be massaged. If so, might need a duplicate in a specific Context.
|
||
|
Mock -CommandName Get-BadPackages -MockWith { return $packageData }
|
||
|
|
||
|
Mock -CommandName Select-InstallPackages -MockWith { return $packageData }
|
||
|
|
||
|
Mock -CommandName Get-AwsSettings -MockWith {
|
||
|
return @{
|
||
|
"Region" = "courts-of-chaos-1"
|
||
|
"Profile" = "unittest"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Cheating for the mock; assume you always get a unique list and just return it.
|
||
|
# Only works if you ensure the input is faked correctly.
|
||
|
Mock -CommandName Select-UniqueServerPackages -MockWith { return $packagesArray }
|
||
|
|
||
|
Mock -CommandName Get-InstalledPackages -MockWith { $installedPackages = @( @{
|
||
|
Version = "1.0.0"
|
||
|
Name = "web.package1"
|
||
|
IsValid = $false
|
||
|
},
|
||
|
@{
|
||
|
Version = "1.0.0"
|
||
|
Name = "web.package2"
|
||
|
IsValid = $false
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return [pscustomobject]$installedPackages
|
||
|
} -ParameterFilter { $ComputerName -like "*web*" }
|
||
|
|
||
|
Mock -CommandName Get-InstalledPackages -MockWith { $installedPackages = @( @{
|
||
|
Version = "1.0.0"
|
||
|
Name = "mic.package1"
|
||
|
IsValid = $false
|
||
|
},
|
||
|
@{
|
||
|
Version = "1.0.0"
|
||
|
Name = "mic.package2"
|
||
|
IsValid = $false
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return [pscustomobject]$installedPackages
|
||
|
} -ParameterFilter { $ComputerName -like "*mic*" -or $ComputerName -like "*fab*" }
|
||
|
|
||
|
Mock -CommandName Get-InstalledPackages -MockWith { $installedPackages = @( @{
|
||
|
Version = "1.0.0"
|
||
|
Name = "app.package1"
|
||
|
IsValid = $false
|
||
|
},
|
||
|
@{
|
||
|
Version = "1.0.0"
|
||
|
Name = "app.package2"
|
||
|
IsValid = $false
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return [pscustomobject]$installedPackages
|
||
|
} -ParameterFilter { $ComputerName -like "*app*" }
|
||
|
|
||
|
# TODO : Check the return value; Possibly needs to be massaged.
|
||
|
# Cheating for the mock; assume you always get a unique list and just return it.
|
||
|
# Only works if you ensure the input is faked correctly.
|
||
|
Mock -CommandName Remove-PackagesThatAreAlreadyInstalled -MockWith {
|
||
|
return $packagesToInstall
|
||
|
}
|
||
|
|
||
|
Mock -CommandName Select-AlkamiAppServers -MockWith {return $true}
|
||
|
Mock -CommandName Select-AlkamiMicServers -MockWith {return $true}
|
||
|
Mock -CommandName Select-AlkamiWebServers -MockWith {return $true}
|
||
|
|
||
|
#endregion Mocks
|
||
|
|
||
|
Context "Checking that Dependencies are used" {
|
||
|
$packageData = Init-PackageData
|
||
|
$debugMetadata = Init-DebugMetadata
|
||
|
|
||
|
It "Gets EnvironmentData" {
|
||
|
Get-ServerPackageInformation -PackageMetadata $packageData -DebugMetadata $debugMetadata `
|
||
|
-BuildCheckoutDirectory "SomePath" -NugetCredential $fakeCred -AwsProfileName "JunkProfile" -DependencyReleaseValue "junkRelease"
|
||
|
|
||
|
Assert-MockCalled -CommandName Get-EnvironmentData
|
||
|
}
|
||
|
It "Builds PackageServerMapping" {
|
||
|
Get-ServerPackageInformation -PackageMetadata $packageData -DebugMetadata $debugMetadata `
|
||
|
-BuildCheckoutDirectory "SomePath" -NugetCredential $fakeCred -AwsProfileName "JunkProfile" -DependencyReleaseValue "junkRelease"
|
||
|
|
||
|
Assert-MockCalled -CommandName Get-PackageServerMapping
|
||
|
}
|
||
|
It "Gets EnvironmentData" {
|
||
|
Get-ServerPackageInformation -PackageMetadata $packageData -DebugMetadata $debugMetadata `
|
||
|
-BuildCheckoutDirectory "SomePath" -NugetCredential $fakeCred -AwsProfileName "JunkProfile" -DependencyReleaseValue "junkRelease"
|
||
|
|
||
|
Assert-MockCalled -CommandName Get-BadPackages
|
||
|
}
|
||
|
It "Gets EnvironmentData" {
|
||
|
Get-ServerPackageInformation -PackageMetadata $packageData -DebugMetadata $debugMetadata `
|
||
|
-BuildCheckoutDirectory "SomePath" -NugetCredential $fakeCred -AwsProfileName "JunkProfile" -DependencyReleaseValue "junkRelease"
|
||
|
|
||
|
Assert-MockCalled -CommandName Get-AwsSettings
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# We force reinstall Widgets & Providers if it's an orb deploy. We don't if it's a package install.
|
||
|
Context "When Force Re-installing Packages" {
|
||
|
|
||
|
$packageData = Init-PackageData
|
||
|
$debugMetadata = Init-DebugMetadata
|
||
|
|
||
|
# Create Pre-installed packages
|
||
|
$appReInstallPackage = New-DummyPackageInstallationData -packagename "app.reinstall.package" -packageversion "1.0.0" -isapponly
|
||
|
$webReInstallPackage = New-DummyPackageInstallationData -packagename "web.reinstall.package" -packageversion "1.0.0" -iswebonly
|
||
|
|
||
|
# Create Packages to be uninstalled
|
||
|
$appUninstallPackage = New-DummyPackageInstallationData -packagename "app.uninstall.package" -packageversion "1.0.0" -isapponly
|
||
|
$webuninstallPackage = New-DummyPackageInstallationData -packagename "web.uninstall.package" -packageversion "1.0.0" -iswebonly
|
||
|
|
||
|
# Create pre installed Packages to be uninstalled and reinstalled.
|
||
|
$appReUninstallPackage = New-DummyPackageInstallationData -packagename "app.re.uninstall.package" -packageversion "1.0.0" -isapponly
|
||
|
$webReUninstallPackage = New-DummyPackageInstallationData -packagename "web.re.uninstall.package" -packageversion "1.0.0" -iswebonly
|
||
|
|
||
|
# Add packages to install/uninstall lists
|
||
|
$packagedata.AppPackagesToUninstall += @($appReUninstallPackage)
|
||
|
$packagedata.WebPackagesToUninstall += @($webReUninstallPackage)
|
||
|
|
||
|
$packagedata.AppPackagesToUninstall += @($appUninstallPackage)
|
||
|
$packagedata.WebPackagesToUninstall += @($webUninstallPackage)
|
||
|
|
||
|
$packageData.AppPackagesToInstall += @($appReUninstallPackage)
|
||
|
$packageData.WebPackagesToInstall += @($webReUninstallPackage)
|
||
|
|
||
|
# Make this an orb run
|
||
|
$packageData.ForceReinstallPackages = $true
|
||
|
|
||
|
# Add packages to preinstalled lists
|
||
|
$debugMetadata.AppServerPackages += $appReInstallPackage
|
||
|
$debugMetadata.WebServerPackages += $webReInstallPackage
|
||
|
|
||
|
$debugMetadata.AppServerPackages += $appUninstallPackage
|
||
|
$debugMetadata.WebServerPackages += $webUninstallPackage
|
||
|
|
||
|
$debugMetadata.AppServerPackages += $appReUninstallPackage
|
||
|
$debugMetadata.WebServerPackages += $webReUninstallPackage
|
||
|
|
||
|
# Pretend packages to be reinstalled are everywhere
|
||
|
Mock -CommandName Select-InstallPackages -MockWith {
|
||
|
$appReInstallPackage.ForceSameVersion = $true
|
||
|
$webReInstallPackage.ForceSameVersion = $true
|
||
|
|
||
|
$newPackages = @()
|
||
|
$newPackages += $appReInstallPackage
|
||
|
$newPackages += $webReInstallPackage
|
||
|
|
||
|
# TODO: Change this to be uninstall/reinstall packages.
|
||
|
$newPackages += $appReUninstallPackage
|
||
|
$newPackages += $webReUninstallPackage
|
||
|
|
||
|
$newPackages += $packages
|
||
|
|
||
|
return $newPackages
|
||
|
}
|
||
|
|
||
|
Mock -CommandName Get-PackageServerMapping -MockWith{
|
||
|
$PackageMetadata.AppPackagesToInstall = $AllAppTierPackages
|
||
|
$PackageMetadata.WebPackagesToInstall = $AllWebTierPackages
|
||
|
|
||
|
return $PackageMetadata, $DebugMetadata
|
||
|
}
|
||
|
|
||
|
Mock -CommandName Add-OldHotfixPackagesToUninstallList -MockWith {
|
||
|
return $PackageMetadata, $DebugMetadata
|
||
|
}
|
||
|
|
||
|
$packages, $debugpackagses = Get-ServerPackageInformation -packagemetadata $packageData -debugmetadata $debugmetadata `
|
||
|
-buildcheckoutdirectory "somepath" -nugetcredential $fakecred -DependencyReleaseValue "123" -AwsProfileName "JunkProfile"
|
||
|
|
||
|
It "Calls Add-OldHotfixPackagesToUninstallList" {
|
||
|
Assert-MockCalled Add-OldHotfixPackagesToUninstallList
|
||
|
}
|
||
|
|
||
|
# Test App Packages
|
||
|
It "Keeps Providers To Be Reinstalled"{
|
||
|
$packages.AppPackagesToInstall | Should -Contain $appReInstallPackage
|
||
|
}
|
||
|
|
||
|
# Test Web Packages
|
||
|
It "Keeps Widgets To Be Reinstalled" {
|
||
|
$packages.WebPackagesToInstall | Should -Contain $WebReInstallPackage
|
||
|
}
|
||
|
|
||
|
It "Does Not Reinstall Packages Which Are Being Uninstalled" {
|
||
|
$packages.AppPackagesToInstall | Should -Not -Contain $appUninstallPackage
|
||
|
$packages.WebPackagesToInstall | Should -Not -Contain $webUninstallPackage
|
||
|
}
|
||
|
|
||
|
It "Does Reinstall Packages Which Are Being Uninstalled And Reinstalled" {
|
||
|
$packages.AppPackagesToInstall | Should -Contain $appReUninstallPackage
|
||
|
$packages.WebPackagesToInstall | Should -Contain $webReUninstallPackage
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Context "When Told To Install Chocolatey" {
|
||
|
$packageData = Init-PackageData
|
||
|
$debugMetadata = Init-DebugMetadata
|
||
|
$packageData.AppPackagesToInstall += New-DummyPackageInstallationData -PackageName "chocolatey" -PackageVersion "1.0.0" -IsAppOnly
|
||
|
$packageData.WebPackagesToInstall += New-DummyPackageInstallationData -PackageName "chocolatey" -PackageVersion "1.0.0" -IsWebOnly
|
||
|
|
||
|
# This is the function that strips out chocolatey based on allWebTierPackages and allAppTierPackages. Do that here.
|
||
|
Mock -CommandName Get-PackageServerMapping -MockWith {
|
||
|
$packageData.AppPackagesToInstall = $AllAppTierPackages
|
||
|
$packageData.WebPackagesToInstall = $AllWebTierPackages
|
||
|
|
||
|
return $packageData, $debugMetadata }
|
||
|
|
||
|
$packages, $debugPackagses = Get-ServerPackageInformation -PackageMetadata $packageData -DebugMetadata $debugMetadata `
|
||
|
-BuildCheckoutDirectory "SomePath" -NugetCredential $fakeCred -AwsProfileName "JunkProfile" -DependencyReleaseValue "junkRelease"
|
||
|
|
||
|
It "Writes a Warning on Apps" {
|
||
|
Assert-MockCalled -CommandName Write-Warning -Scope Context -Exactly 1 `
|
||
|
-ParameterFilter {$Message -eq "The Chocolatey Package Manager Program package (chocolatey) was passed in to be installed on the App Tier. At this time we explicitly dissallow that. It has been skipped."}
|
||
|
}
|
||
|
It "Writes a Warning on Webs" {
|
||
|
Assert-MockCalled -CommandName Write-Warning -Scope Context -Exactly 1 `
|
||
|
-ParameterFilter {$Message -eq "The Chocolatey Package Manager Program package (chocolatey) was passed in to be installed on the Web Tier. At this time we explicitly dissallow that. It has been skipped."}
|
||
|
}
|
||
|
It "Removes Chocolatey From the Install List on Apps" {
|
||
|
$packages.AppPackagesToInstall | ForEach-Object {$_.Name | Should -Not -BeExactly "chocolatey"}
|
||
|
}
|
||
|
It "Removes Chocolatey from The Install List on Webs" {
|
||
|
$packages.WebPackagesToInstall | ForEach-Object {$_.Name | Should -Not -BeExactly "chocolatey"}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# TODO: Need changes from SRE-16772 before we write tests
|
||
|
Context "When Different Servers Have Different Package Versions" {
|
||
|
$packageData = Init-PackageData
|
||
|
$debugMetadata = Init-DebugMetadata
|
||
|
|
||
|
$packageData.ServersToQuery = @("fake.appserver.1", "fake.appserver.2", "fake.fabserver.1", "fake.fabserver.2", "fake.micserver.1", "fake.micserver.2", "fake.webserver.1", "fake.webserver.2")
|
||
|
|
||
|
# Need one mock per server based on computer name. So, 8 mocks.
|
||
|
Mock -CommandName Get-InstalledPackages -MockWith { $installedPackages = @( @{
|
||
|
Version = "1.0.1"
|
||
|
Name = "web.package1"
|
||
|
IsValid = $false
|
||
|
},
|
||
|
@{
|
||
|
Version = "1.0.1"
|
||
|
Name = "web.package2"
|
||
|
IsValid = $false
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return [pscustomobject]$installedPackages
|
||
|
} -ParameterFilter { $ComputerName -like "*fake.webserver.1*" }
|
||
|
|
||
|
Mock -CommandName Get-InstalledPackages -MockWith { $installedPackages = @( @{
|
||
|
Version = "1.0.1"
|
||
|
Name = "web.package1"
|
||
|
IsValid = $false
|
||
|
},
|
||
|
@{
|
||
|
Version = "1.0.2"
|
||
|
Name = "web.package2"
|
||
|
IsValid = $false
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return [pscustomobject]$installedPackages
|
||
|
} -ParameterFilter { $ComputerName -like "*fake.webserver.2*" }
|
||
|
|
||
|
Mock -CommandName Get-InstalledPackages -MockWith { $installedPackages = @( @{
|
||
|
Version = "1.0.1"
|
||
|
Name = "mic.package1"
|
||
|
IsValid = $false
|
||
|
},
|
||
|
@{
|
||
|
Version = "1.0.1"
|
||
|
Name = "mic.package2"
|
||
|
IsValid = $false
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return [pscustomobject]$installedPackages
|
||
|
} -ParameterFilter { $ComputerName -like "*fake.micserver.1*" }
|
||
|
|
||
|
Mock -CommandName Get-InstalledPackages -MockWith { $installedPackages = @( @{
|
||
|
Version = "1.0.1"
|
||
|
Name = "mic.package1"
|
||
|
IsValid = $false
|
||
|
},
|
||
|
@{
|
||
|
Version = "1.0.2"
|
||
|
Name = "mic.package2"
|
||
|
IsValid = $false
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return [pscustomobject]$installedPackages
|
||
|
} -ParameterFilter { $ComputerName -like "*fake.micserver.2*" }
|
||
|
|
||
|
Mock -CommandName Get-InstalledPackages -MockWith { $installedPackages = @( @{
|
||
|
Version = "1.0.1"
|
||
|
Name = "mic.package1"
|
||
|
IsValid = $false
|
||
|
},
|
||
|
@{
|
||
|
Version = "1.0.1"
|
||
|
Name = "mic.package2"
|
||
|
IsValid = $false
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return [pscustomobject]$installedPackages
|
||
|
} -ParameterFilter { $ComputerName -like "*fake.fabserver.1*" }
|
||
|
|
||
|
Mock -CommandName Get-InstalledPackages -MockWith { $installedPackages = @( @{
|
||
|
Version = "1.0.1"
|
||
|
Name = "mic.package1"
|
||
|
IsValid = $false
|
||
|
},
|
||
|
@{
|
||
|
Version = "1.0.2"
|
||
|
Name = "mic.package2"
|
||
|
IsValid = $false
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return [pscustomobject]$installedPackages
|
||
|
} -ParameterFilter { $ComputerName -like "*fake.fabserver.2*" }
|
||
|
|
||
|
Mock -CommandName Get-InstalledPackages -MockWith { $installedPackages = @( @{
|
||
|
Version = "1.0.1"
|
||
|
Name = "app.package1"
|
||
|
IsValid = $false
|
||
|
},
|
||
|
@{
|
||
|
Version = "1.0.1"
|
||
|
Name = "app.package2"
|
||
|
IsValid = $false
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return [pscustomobject]$installedPackages
|
||
|
} -ParameterFilter { $ComputerName -like "*fake.appserver.1*" }
|
||
|
|
||
|
Mock -CommandName Get-InstalledPackages -MockWith { $installedPackages = @( @{
|
||
|
Version = "1.0.1"
|
||
|
Name = "app.package1"
|
||
|
IsValid = $false
|
||
|
},
|
||
|
@{
|
||
|
Version = "1.0.2"
|
||
|
Name = "app.package2"
|
||
|
IsValid = $false
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return [pscustomobject]$installedPackages
|
||
|
} -ParameterFilter { $ComputerName -like "*fake.appserver.2*" }
|
||
|
|
||
|
$packages, $debugPackagses = Get-ServerPackageInformation -PackageMetadata $packageData -DebugMetadata $debugMetadata `
|
||
|
-BuildCheckoutDirectory "SomePath" -NugetCredential $fakeCred -AwsProfileName "JunkProfile" -DependencyReleaseValue "junkRelease"
|
||
|
|
||
|
it "Reduces Them to Unique Values" {
|
||
|
$packages.PackageToVersions | should -not -BeNullOrEmpty
|
||
|
foreach ($h in $packages.packagetoversions.getenumerator()) {
|
||
|
$versions = $h.value
|
||
|
foreach ($version in $versions) {
|
||
|
($versions | Where-Object { $_ -eq $version }).Count | Should Be 1
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Context "When Already Installed Packages Are To Be Re-installed" {
|
||
|
$packageData = Init-PackageData
|
||
|
$debugMetadata = Init-DebugMetadata
|
||
|
|
||
|
# Create pre-installed package
|
||
|
$appInstalledPackage = New-DummyPackageInstallationData -packagename "app.package1" -packageversion "1.0.0" -isapponly
|
||
|
|
||
|
# Create package to install
|
||
|
$appPackageV2 = New-DummyPackageInstallationData -PackageName "app.package1" -PackageVersion "2.1.0" -IsAppOnly
|
||
|
|
||
|
# Add package to preinstalled list
|
||
|
$debugMetadata.AppServerPackages += $appInstalledPackage
|
||
|
|
||
|
# Add package to list to be installed
|
||
|
$packageData.AppPackagesToInstall += @($appPackageV2)
|
||
|
|
||
|
$packages, $debugPackagses = Get-ServerPackageInformation -PackageMetadata $packageData -DebugMetadata $debugMetadata `
|
||
|
-BuildCheckoutDirectory "SomePath" -NugetCredential $fakeCred -AwsProfileName "JunkProfile" -DependencyReleaseValue "junkRelease"
|
||
|
|
||
|
It "Calls Remove-PackagesThatAreAlreadyInstalled" {
|
||
|
|
||
|
Assert-MockCalled -CommandName Remove-PackagesThatAreAlreadyInstalled -Scope Context
|
||
|
}
|
||
|
|
||
|
It "Installs The Version From The Install List" {
|
||
|
$packages.AppPackagesToInstall | Should -Contain $appPackageV2
|
||
|
}
|
||
|
|
||
|
It "Does Not Install The Existing Version" {
|
||
|
$packages.AppPackagesToInstall | Should -Not -Contain $appInstalledPackage
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Context "When Uninstalling Packages" {
|
||
|
$packageData = Init-PackageData
|
||
|
$debugMetadata = Init-DebugMetadata
|
||
|
|
||
|
$appUninstallPackage = New-DummyPackageInstallationData -PackageName "app.uninstall.package" -PackageVersion "1.0.0" -IsAppOnly
|
||
|
$micUninstallPackage = New-DummyPackageInstallationData -PackageName "mic.uninstall.package" -PackageVersion "1.0.0" -IsMicOnly
|
||
|
$webUninstallPackage = New-DummyPackageInstallationData -PackageName "web.uninstall.package" -PackageVersion "1.0.0" -IsWebOnly
|
||
|
|
||
|
# Starts off in the same array, split inside the function we're testing.
|
||
|
$packageData.AppPackagesToUninstall += @($appUninstallPackage)
|
||
|
$packageData.AppPackagesToUninstall += @($micUninstallPackage)
|
||
|
|
||
|
$packageData.WebPackagesToUninstall += @($webUninstallPackage)
|
||
|
|
||
|
$debugMetadata.AppServerPackages += $appUninstallPackage
|
||
|
$debugMetadata.MicServerPackages += $micUninstallPackage
|
||
|
$debugMetadata.WebServerPackages += $webUninstallPackage
|
||
|
|
||
|
$packages, $debugPackagses = Get-ServerPackageInformation -PackageMetadata $packageData -DebugMetadata $debugMetadata `
|
||
|
-BuildCheckoutDirectory "SomePath" -NugetCredential $fakeCred -AwsProfileName "JunkProfile" -DependencyReleaseValue "junkRelease"
|
||
|
|
||
|
It "Removes Packages from App Servers" {
|
||
|
$packages.AppPackagesToUninstall | Should -Not -BeNullOrEmpty
|
||
|
|
||
|
$packages.AppPackagesToUninstall | Should -Match $packageData.AppPackagesToUninstall
|
||
|
}
|
||
|
|
||
|
It "Removes Packages from Mic Servers" {
|
||
|
$packages.MicPackagesToUninstall | Should -Not -BeNullOrEmpty
|
||
|
|
||
|
$packages.MicPackagesToUninstall | Should -Match $packageData.MicPackagesToUninstall
|
||
|
}
|
||
|
|
||
|
It "Removes Packages from Web Servers" {
|
||
|
$packages.WebPackagesToUninstall | Should -Not -BeNullOrEmpty
|
||
|
|
||
|
$packages.WebPackagesToUninstall | Should -Match $packageData.WebPackagesToUninstall
|
||
|
}
|
||
|
|
||
|
It "Correctly Labels Has App Uninstalls" {
|
||
|
$packages.HasAppUninstalls | Should -BeTrue
|
||
|
}
|
||
|
It "Correctly Labels Has Mic Uninstalls" {
|
||
|
$packages.HasMicUninstalls | Should -BeTrue
|
||
|
}
|
||
|
It "Correctly Labels Has Web Uninstalls" {
|
||
|
$packages.HasWebUninstalls | Should -BeTrue
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Context "When Packages Are Found On The Wrong Server Type" {
|
||
|
$packageData = Init-PackageData
|
||
|
$debugMetadata = Init-DebugMetadata
|
||
|
|
||
|
$appUninstallPackage = New-DummyPackageInstallationData -PackageName "app.uninstall.package" -PackageVersion "1.0.0" -IsAppOnly
|
||
|
$micUninstallPackage = New-DummyPackageInstallationData -PackageName "mic.uninstall.package" -PackageVersion "1.0.0" -IsMicOnly
|
||
|
$webUninstallPackage = New-DummyPackageInstallationData -PackageName "web.uninstall.package" -PackageVersion "1.0.0" -IsWebOnly
|
||
|
|
||
|
Mock -CommandName Get-BadPackages -MockWith {
|
||
|
$packageData.BadMicPackagesToUninstall += @($micUninstallPackage)
|
||
|
$packageData.BadAppPackagesToUninstall += @($webUninstallPackage)
|
||
|
$packageData.BadWebPackagesToUninstall += @($appUninstallPackage)
|
||
|
return $packageData
|
||
|
}
|
||
|
|
||
|
$packages, $debugPackagses = Get-ServerPackageInformation -PackageMetadata $packageData -DebugMetadata $debugMetadata `
|
||
|
-BuildCheckoutDirectory "SomePath" -NugetCredential $fakeCred -AwsProfileName "JunkProfile" -DependencyReleaseValue "junkRelease"
|
||
|
|
||
|
It "Removes Bad Packages from App Servers" {
|
||
|
$packages.AppPackagesToUninstall | Should -Not -BeNullOrEmpty
|
||
|
|
||
|
$packages.AppPackagesToUninstall | Should -Match $packageData.AppPackagesToUninstall
|
||
|
}
|
||
|
|
||
|
It "Removes Bad Packages from Mic Servers" {
|
||
|
$packages.MicPackagesToUninstall | Should -Not -BeNullOrEmpty
|
||
|
|
||
|
$packages.MicPackagesToUninstall | Should -Match $packageData.MicPackagesToUninstall
|
||
|
}
|
||
|
|
||
|
It "Removes Bad Packages from Web Servers" {
|
||
|
$packages.WebPackagesToUninstall | Should -Not -BeNullOrEmpty
|
||
|
|
||
|
$packages.WebPackagesToUninstall | Should -Match $packageData.WebPackagesToUninstall
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Context "When Getting Install Information" {
|
||
|
$packageData = Init-PackageData
|
||
|
$debugMetadata = Init-DebugMetadata
|
||
|
|
||
|
$packages, $debugPackagses = Get-ServerPackageInformation -PackageMetadata $packageData -DebugMetadata $debugMetadata `
|
||
|
-BuildCheckoutDirectory "SomePath" -NugetCredential $fakeCred -AwsProfileName "JunkProfile" -DependencyReleaseValue "junkRelease"
|
||
|
|
||
|
It "Correctly Labels Has App Installs" {
|
||
|
$packages.HasAppInstalls | Should -BeTrue
|
||
|
}
|
||
|
|
||
|
It "Correctly Labels Has Mic Installs" {
|
||
|
$packages.HasMicInstalls | Should -BeTrue
|
||
|
}
|
||
|
|
||
|
It "Correctly Labels Has Web Installs" {
|
||
|
$packages.HasWebInstalls | Should -BeTrue
|
||
|
}
|
||
|
|
||
|
It "Returns Package Metadata" {
|
||
|
$packages | Should -Not -BeNullOrEmpty
|
||
|
}
|
||
|
|
||
|
It "Returns DebugMetadata" {
|
||
|
$debugPackagses | Should -Not -BeNullOrEmpty
|
||
|
}
|
||
|
}
|
||
|
}
|