tests/Get-DbaMaxMemory.Tests.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
## Thank you Warren http://ramblingcookiemonster.github.io/Testing-DSC-with-Pester-and-AppVeyor/

if(-not $PSScriptRoot) {
    $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
}

$Verbose = @{}
if($env:APPVEYOR_REPO_BRANCH -and $env:APPVEYOR_REPO_BRANCH -notlike "master") {
    $Verbose.add("Verbose",$true)
}


$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path).Replace('.Tests.', '.')
Import-Module "$PSScriptRoot\..\functions\$sut" -Force
Import-Module PSScriptAnalyzer
## Added PSAvoidUsingPlainTextForPassword as credential is an object and therefore fails. We can ignore any rules here under special circumstances agreed by admins :-)
$rules = Get-ScriptAnalyzerRule | Where-Object {$_.RuleName -notin ('PSAvoidUsingPlainTextForPassword') }
$name = $sut.Split('.')[0]

Describe 'Script Analyzer Tests' {
    Context "Testing $name for Standard Processing" {
        foreach ($rule in $rules) { 
            $index = $rules.IndexOf($rule)
            It "passes the PSScriptAnalyzer Rule number $index - $rule " {
                (Invoke-ScriptAnalyzer -Path "$PSScriptRoot\..\functions\$sut" -IncludeRule $rule.RuleName).Count | Should Be 0 
            }
        }
    }
}

## Load the command
$ModuleBase = Split-Path -Parent $MyInvocation.MyCommand.Path

# For tests in .\Tests subdirectory
if ((Split-Path $ModuleBase -Leaf) -eq 'Tests')
{
$ModuleBase = Split-Path $ModuleBase -Parent
}

# Handles modules in version directories
$leaf = Split-Path $ModuleBase -Leaf
$parent = Split-Path $ModuleBase -Parent
$parsedVersion = $null
if ([System.Version]::TryParse($leaf, [ref]$parsedVersion)) {
$ModuleName = Split-Path $parent -Leaf
}
else {
$ModuleName = $leaf
}

# Removes all versions of the module from the session before importing
Get-Module $ModuleName | Remove-Module

# Because ModuleBase includes version number, this imports the required version
# of the module
$null = Import-Module $ModuleBase\$ModuleName.psd1 -PassThru -ErrorAction Stop 


## Validate functionality.

Describe $name {
    InModuleScope dbatools {
        Context 'Validate input arguments' {
            It 'SqlServer parameter is empty' {
                Mock Connect-SqlServer { throw System.Data.SqlClient.SqlException }
                { Get-DbaMaxMemory -SqlServer '' -WarningAction Stop 3> $null } | Should Throw
            }

            It 'SqlServer parameter host cannot be found' {
                Mock Connect-SqlServer { throw System.Data.SqlClient.SqlException }
                { Get-DbaMaxMemory -SqlServer 'ABC' -WarningAction Stop 3> $null } | Should Throw
            }
        }

        Context 'Validate functionality ' {
            It 'Server name reported correctly the installed memory' {
                Mock Connect-SqlServer { 
                    return @{
        Name = 'ABC'
        }
                } 
                
                (Get-DbaMaxMemory -SqlServer 'ABC').Server | Should be 'ABC'
            }  
        
            It 'Server under-report by 1MB the memory installed on the host' {
                Mock Connect-SqlServer { 
                    return @{
                        PhysicalMemory = 1023
        }
                } 
                
                (Get-DbaMaxMemory -SqlServer 'ABC').TotalMB | Should be 1024
            }     
            
            It 'Server reports correctly the memory installed on the host' {
                Mock Connect-SqlServer { 
                    return @{
                        PhysicalMemory = 1024
        }
                } 
                
                (Get-DbaMaxMemory -SqlServer 'ABC').TotalMB | Should be 1024
            }      

            It 'Memory allocated to SQL Server instance reported' {
                Mock Connect-SqlServer { 
                    return @{
                        Configuration = @{
                            MaxServerMemory = @{
                                ConfigValue = 2147483647
                            }
                        }
        }
                } 
                
                (Get-DbaMaxMemory -SqlServer 'ABC').SqlMaxMB | Should be 2147483647
            }  
        }
    }
}