aboutsummaryrefslogtreecommitdiff
path: root/Tests/Exfiltration.tests.ps1
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/Exfiltration.tests.ps1')
-rw-r--r--Tests/Exfiltration.tests.ps185
1 files changed, 85 insertions, 0 deletions
diff --git a/Tests/Exfiltration.tests.ps1 b/Tests/Exfiltration.tests.ps1
new file mode 100644
index 0000000..ed98f45
--- /dev/null
+++ b/Tests/Exfiltration.tests.ps1
@@ -0,0 +1,85 @@
+Set-StrictMode -Version Latest
+
+$TestScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
+$ModuleRoot = Resolve-Path "$TestScriptRoot\.."
+$ModuleManifest = "$ModuleRoot\Exfiltration\Exfiltration.psd1"
+
+Remove-Module [E]xfiltration
+Import-Module $ModuleManifest -Force -ErrorAction Stop
+
+Describe 'Get-Keystrokes' {
+
+ if (Test-Path "$($env:TEMP)\key.log") { Remove-Item -Force "$($env:TEMP)\key.log" }
+ $WindowTitle = (Get-Process -Id $PID).MainWindowTitle
+
+ $Shell = New-Object -ComObject wscript.shell
+ $Shell.AppActivate($WindowTitle)
+
+ $KeyLogger = Get-Keystrokes -PassThru
+ Start-Sleep -Seconds 1
+
+ $Shell.SendKeys("Pester`b`b`b`b`b`b")
+ $KeyLogger.Dispose()
+
+ It 'Should output to file' { Test-Path "$($env:TEMP)\key.log" | Should Be $true }
+
+ $KeyObjects = Get-Content -Path "$($env:TEMP)\key.log" | ConvertFrom-Csv
+
+ It 'Should log keystrokes' {
+ $FileLength = (Get-Item "$($env:TEMP)\key.log").Length
+ $FileLength | Should BeGreaterThan 14
+ }
+
+ It 'Should get foreground window title' {
+ $KeyObjects[0].WindowTitle | Should Be $WindowTitle
+ }
+
+ It 'Should log time of key press' {
+ $KeyTime = [DateTime]::Parse($KeyObjects[0].Time)
+ $KeyTime.GetType().Name | Should Be 'DateTime'
+ }
+
+ It 'Should stop logging after timeout' {
+
+ $Timeout = 0.05
+ $KeyLogger = Get-Keystrokes -Timeout $Timeout -PassThru
+
+ Start-Sleep -Seconds 4
+
+ $KeyLogger.Runspace.RunspaceAvailability | Should Be 'Available'
+ $KeyLogger.Dispose()
+ }
+
+ Remove-Item -Force "$($env:TEMP)\key.log"
+}
+
+Describe "Get-MicrophoneAudio" {
+
+ $RecordPath = "$env:TEMP\test_record.wav"
+ $RecordLen = 2
+ Context 'Successful Recording' {
+ BeforeEach {
+ #Ensure the recording as been removed prior to testing
+ Remove-Item -Path $RecordPath -ErrorAction SilentlyContinue
+ }
+
+ AfterEach {
+ #Remove the recording after testing
+ Remove-Item -Path $RecordPath -ErrorAction SilentlyContinue
+ }
+
+ It 'should record audio from the microphone and save it to a specified path' {
+ $result = Get-MicrophoneAudio -Path $RecordPath -Length $RecordLen
+ $result | Should Not BeNullOrEmpty
+ $result.Length | Should BeGreaterThan 0
+ }
+
+ }
+
+ Context 'Invalid Arguments' {
+ It 'should not allow invalid paths to be used' {
+ { Get-MicrophoneAudio -Path "c:\FAKEPATH\yay.wav" -Length RecordLen} | Should Throw
+ }
+ }
+
+}