1 #!powershell
2 
3 #Requires -Module Ansible.ModuleUtils.Legacy
4 #Requires -Module Ansible.ModuleUtils.FileUtil
5 
6 $ErrorActionPreference = "Stop"
7 
8 $result = @{
9     changed = $false
10 }
11 
Assert-Equals($actual, $expected)12 Function Assert-Equals($actual, $expected) {
13     if ($actual -cne $expected) {
14         $call_stack = (Get-PSCallStack)[1]
15         $error_msg = "AssertionError:`r`nActual: `"$actual`" != Expected: `"$expected`"`r`nLine: $($call_stack.ScriptLineNumber), Method: $($call_stack.Position.Text)"
16         Fail-Json -obj $result -message $error_msg
17     }
18 }
19 
Get-PagefilePath()20 Function Get-PagefilePath() {
21     $pagefile = $null
22     $cs = Get-CimInstance -ClassName Win32_ComputerSystem
23     if ($cs.AutomaticManagedPagefile) {
24         $pagefile = "$($env:SystemRoot.Substring(0, 1)):\pagefile.sys"
25     } else {
26         $pf = Get-CimInstance -ClassName Win32_PageFileSetting
27         if ($null -ne $pf) {
28             $pagefile = $pf[0].Name
29         }
30     }
31     return $pagefile
32 }
33 
34 $pagefile = Get-PagefilePath
35 if ($pagefile) {
36     # Test-AnsiblePath Hidden system file
37     $actual = Test-AnsiblePath -Path $pagefile
38     Assert-Equals -actual $actual -expected $true
39 
40     # Get-AnsibleItem file
41     $actual = Get-AnsibleItem -Path $pagefile
42     Assert-Equals -actual $actual.FullName -expected $pagefile
43     Assert-Equals -actual $actual.Attributes.HasFlag([System.IO.FileAttributes]::Directory) -expected $false
44     Assert-Equals -actual $actual.Exists -expected $true
45 }
46 
47 # Test-AnsiblePath File that doesn't exist
48 $actual = Test-AnsiblePath -Path C:\fakefile
49 Assert-Equals -actual $actual -expected $false
50 
51 # Test-AnsiblePath Directory that doesn't exist
52 $actual = Test-AnsiblePath -Path C:\fakedirectory
53 Assert-Equals -actual $actual -expected $false
54 
55 # Test-AnsiblePath file in non-existant directory
56 $actual = Test-AnsiblePath -Path C:\fakedirectory\fakefile.txt
57 Assert-Equals -actual $actual -expected $false
58 
59 # Test-AnsiblePath Normal directory
60 $actual = Test-AnsiblePath -Path C:\Windows
61 Assert-Equals -actual $actual -expected $true
62 
63 # Test-AnsiblePath Normal file
64 $actual = Test-AnsiblePath -Path C:\Windows\System32\kernel32.dll
65 Assert-Equals -actual $actual -expected $true
66 
67 # Test-AnsiblePath fails with wildcard
68 $failed = $false
69 try {
70     Test-AnsiblePath -Path C:\Windows\*.exe
71 } catch {
72     $failed = $true
73     Assert-Equals -actual $_.Exception.Message -expected "Exception calling `"GetAttributes`" with `"1`" argument(s): `"Illegal characters in path.`""
74 }
75 Assert-Equals -actual $failed -expected $true
76 
77 # Test-AnsiblePath on non file PS Provider object
78 $actual = Test-AnsiblePath -Path Cert:\LocalMachine\My
79 Assert-Equals -actual $actual -expected $true
80 
81 # Test-AnsiblePath on environment variable
82 $actual = Test-AnsiblePath -Path env:SystemDrive
83 Assert-Equals -actual $actual -expected $true
84 
85 # Test-AnsiblePath on environment variable that does not exist
86 $actual = Test-AnsiblePath -Path env:FakeEnvValue
87 Assert-Equals -actual $actual -expected $false
88 
89 # Get-AnsibleItem doesn't exist with -ErrorAction SilentlyContinue param
90 $actual = Get-AnsibleItem -Path C:\fakefile -ErrorAction SilentlyContinue
91 Assert-Equals -actual $actual -expected $null
92 
93 # Get-AnsibleItem directory
94 $actual = Get-AnsibleItem -Path C:\Windows
95 Assert-Equals -actual $actual.FullName -expected C:\Windows
96 Assert-Equals -actual $actual.Attributes.HasFlag([System.IO.FileAttributes]::Directory) -expected $true
97 Assert-Equals -actual $actual.Exists -expected $true
98 
99 # ensure Get-AnsibleItem doesn't fail in a try/catch and -ErrorAction SilentlyContinue - stop's a trap from trapping it
100 try {
101     $actual = Get-AnsibleItem -Path C:\fakepath -ErrorAction SilentlyContinue
102 } catch {
103     Fail-Json -obj $result -message "this should not fire"
104 }
105 Assert-Equals -actual $actual -expected $null
106 
107 $result.data = "success"
108 Exit-Json -obj $result
109