forked from OCram85/PSCredentialStore
Increase code coverage (#22)
This commit is contained in:
parent
2422afbd8f
commit
ce823d4564
@ -20,7 +20,7 @@ image: Visual Studio 2017
|
||||
|
||||
install:
|
||||
- ps: Import-Module .\tools\AppVeyor.psm1
|
||||
- ps: Invoke-InstallDependencies -Verbose
|
||||
- ps: Invoke-InstallDependencies
|
||||
|
||||
environment:
|
||||
NuGetToken:
|
||||
|
@ -32,6 +32,7 @@ function Get-RandomKey {
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[ValidateNotNullOrEmpty()]
|
||||
[ValidateSet(16, 24, 32)]
|
||||
[string]$size
|
||||
)
|
||||
|
@ -83,14 +83,14 @@ Could not find the required {0} called {1}. Please install the required {0} to r
|
||||
}
|
||||
|
||||
'PSSnapin' {
|
||||
if (Get-PSSnapin -Name $Name -Registered) {
|
||||
if (Get-PSSnapin -Name $Name -Registered -ErrorAction SilentlyContinue) {
|
||||
return $true
|
||||
}
|
||||
else {
|
||||
if ($StopIfFails) {
|
||||
Write-Error -Message $Message -ErrorAction Stop -Category NotInstalled
|
||||
return $false
|
||||
}
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
|
60
tests/ChallengeFile/01_Set-ChallengeFile.Tests.ps1
Normal file
60
tests/ChallengeFile/01_Set-ChallengeFile.Tests.ps1
Normal file
@ -0,0 +1,60 @@
|
||||
#region HEADER
|
||||
$RepoRoot = (Get-GitDirectory).replace('\.git', '')
|
||||
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
|
||||
$sut = $sut -replace "\d{2}`_", ''
|
||||
$suthome = (Get-ChildItem -Path $RepoRoot -Exclude ".\tests\" -Filter $sut -Recurse).FullName
|
||||
# Skip try loading the source file if it doesn't exists.
|
||||
If ($suthome.Length -gt 0) {
|
||||
. $suthome
|
||||
}
|
||||
Else {
|
||||
Write-Warning ("Could not find source file {0}" -f $sut)
|
||||
}
|
||||
|
||||
# load additional functions defined in the repository. Replace the expression <FunctionName>.
|
||||
. (Get-ChildItem -Path $RepoRoot -Filter "Get-RandomKey.ps1" -Recurse).FullName
|
||||
|
||||
#endregion HEADER
|
||||
|
||||
Describe "Set-ChallengeFile" {
|
||||
Context "Tests with custom path" {
|
||||
It "Working dir and path not exist" {
|
||||
{Set-ChallengeFile -Path 'C:\PSCredentialStore\Challenge.bin'} | Should -Not -Throw
|
||||
}
|
||||
It "No parameter and non file should return true" {
|
||||
if (Test-Path -Path ("{0}\PSCredentialStore\Challenge.bin" -f $env:ProgramData)) {
|
||||
Remove-Item -Path ("{0}\PSCredentialStore\Challenge.bin" -f $env:ProgramData)
|
||||
}
|
||||
Set-ChallengeFile
|
||||
Test-Path -Path ("{0}\PSCredentialStore\Challenge.bin" -f $env:ProgramData) | Should -Be $true
|
||||
}
|
||||
It "Existing Credential file should return error" {
|
||||
{ Set-ChallengeFile } | Should -Throw
|
||||
Remove-Item -Path ("{0}\PSCredentialStore\Challenge.bin" -f $env:ProgramData)
|
||||
}
|
||||
It "Use -Force switch should create a new challenge file" {
|
||||
# prepare for test and clean up old data
|
||||
if (Test-Path -Path ("{0}\PSCredentialStore\Challenge.bin" -f $env:ProgramData)) {
|
||||
Remove-Item -Path ("{0}\PSCredentialStore\Challenge.bin" -f $env:ProgramData)
|
||||
}
|
||||
Set-ChallengeFile
|
||||
{ Set-ChallengeFile -Force } | Should -Not -Throw
|
||||
}
|
||||
It "Test directory creation for shared store" {
|
||||
if (Test-Path -Path ("{0}\PSCredentialStore" -f $env:ProgramData)) {
|
||||
Remove-Item -Path ("{0}\PSCredentialStore" -f $env:ProgramData) -Force -Recurse
|
||||
}
|
||||
Set-ChallengeFile
|
||||
Test-Path -Path ("{0}\PSCredentialStore" -f $env:ProgramData) | Should -Be $true
|
||||
}
|
||||
}
|
||||
Context "General Exception handling" {
|
||||
Mock New-Item {throw "foobar exception"}
|
||||
It "Test exception handling if the root directory could not be created" {
|
||||
if (Test-Path -Path ("{0}\PSCredentialStore" -f $env:ProgramData)) {
|
||||
Remove-Item -Path ("{0}\PSCredentialStore" -f $env:ProgramData) -Force -Recurse
|
||||
}
|
||||
{ Set-ChallengeFile } | Should -Throw "Could not create the parent data dir"
|
||||
}
|
||||
}
|
||||
}
|
38
tests/ChallengeFile/01_Test-ChallengeFile.Tests.ps1
Normal file
38
tests/ChallengeFile/01_Test-ChallengeFile.Tests.ps1
Normal file
@ -0,0 +1,38 @@
|
||||
#region HEADER
|
||||
$RepoRoot = (Get-GitDirectory).replace('\.git', '')
|
||||
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
|
||||
$sut = $sut -replace "\d{2}`_", ''
|
||||
$suthome = (Get-ChildItem -Path $RepoRoot -Exclude ".\tests\" -Filter $sut -Recurse).FullName
|
||||
# Skip try loading the source file if it doesn't exists.
|
||||
If ($suthome.Length -gt 0) {
|
||||
. $suthome
|
||||
}
|
||||
Else {
|
||||
Write-Warning ("Could not find source file {0}" -f $sut)
|
||||
}
|
||||
|
||||
# load additional functions defined in the repository. Replace the expression <FunctionName>.
|
||||
#. (Get-ChildItem -Path $RepoRoot -Filter "Test-ChallengeFile.ps1" -Recurse).FullName
|
||||
|
||||
#endregion HEADER
|
||||
|
||||
Describe "Test-ChallengeFile" {
|
||||
Context "Basic input tests" {
|
||||
Mock Test-Path {return $true}
|
||||
It "No parameter with existing challenge file" {
|
||||
{Test-ChallengeFile} | Should -Not -Throw
|
||||
}
|
||||
It "No parameter and existing file should return true" {
|
||||
Test-ChallengeFile | Should -Be $true
|
||||
}
|
||||
}
|
||||
Context "Execute with parameter" {
|
||||
$TestChFile = "{0}\resources\cs\Challenge.bin" -f $RepoRoot
|
||||
It "Provide valid path" {
|
||||
Test-ChallengeFile -Path $TestChFile | Should -Be $true
|
||||
}
|
||||
It "Provide fake path" {
|
||||
Test-ChallengeFile -Path "C:\notexisting.bin" | Should -Be $false
|
||||
}
|
||||
}
|
||||
}
|
25
tests/Helper/01_Get-ModuleBase.Tests.ps1
Normal file
25
tests/Helper/01_Get-ModuleBase.Tests.ps1
Normal file
@ -0,0 +1,25 @@
|
||||
#region HEADER
|
||||
$RepoRoot = (Get-GitDirectory).replace('\.git', '')
|
||||
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
|
||||
$sut = $sut -replace "\d{2}`_", ''
|
||||
$suthome = (Get-ChildItem -Path $RepoRoot -Exclude ".\tests\" -Filter $sut -Recurse).FullName
|
||||
# Skip try loading the source file if it doesn't exists.
|
||||
If ($suthome.Length -gt 0) {
|
||||
. $suthome
|
||||
}
|
||||
Else {
|
||||
Write-Warning ("Could not find source file {0}" -f $sut)
|
||||
}
|
||||
|
||||
# load additional functions defined in the repository. Replace the expression <FunctionName>.
|
||||
# . (Get-ChildItem -Path $RepoRoot -Filter "<FunctionName>.ps1" -Recurse).FullName
|
||||
|
||||
#endregion HEADER
|
||||
|
||||
Describe "Get-ModuleBase" {
|
||||
Context "Basic syntax check" {
|
||||
It "Test1: Should not throw" {
|
||||
{ Get-ModuleBase } | Should -Not -Throw
|
||||
}
|
||||
}
|
||||
}
|
39
tests/Helper/01_Get-RandomKey.Tests.ps1
Normal file
39
tests/Helper/01_Get-RandomKey.Tests.ps1
Normal file
@ -0,0 +1,39 @@
|
||||
#region HEADER
|
||||
$RepoRoot = (Get-GitDirectory).replace('\.git', '')
|
||||
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
|
||||
$sut = $sut -replace "\d{2}`_", ''
|
||||
$suthome = (Get-ChildItem -Path $RepoRoot -Exclude ".\tests\" -Filter $sut -Recurse).FullName
|
||||
# Skip try loading the source file if it doesn't exists.
|
||||
If ($suthome.Length -gt 0) {
|
||||
. $suthome
|
||||
}
|
||||
Else {
|
||||
Write-Warning ("Could not find source file {0}" -f $sut)
|
||||
}
|
||||
|
||||
# load additional functions defined in the repository. Replace the expression <FunctionName>.
|
||||
# . (Get-ChildItem -Path $RepoRoot -Filter "<FunctionName>.ps1" -Recurse).FullName
|
||||
|
||||
#endregion HEADER
|
||||
|
||||
Describe "Get-RandomKey" {
|
||||
Context "Basic input tests" {
|
||||
It "Test1: Should throw if wrong size is given" {
|
||||
{Get-RandomKey -size 43} | Should -Throw
|
||||
}
|
||||
}
|
||||
Context "Basic syntax check" {
|
||||
It "Test1: Should return a key with a length of 16" {
|
||||
$Key = Get-RandomKey -size 16
|
||||
$Key.length | Should -Be 16
|
||||
}
|
||||
It "Test2: Should return a key with a length of 24" {
|
||||
$Key = Get-RandomKey -size 24
|
||||
$Key.length | Should -Be 24
|
||||
}
|
||||
It "Test3: Should return a key with a length of 32" {
|
||||
$Key = Get-RandomKey -size 32
|
||||
$Key.length | Should -Be 32
|
||||
}
|
||||
}
|
||||
}
|
65
tests/Helper/01_Test-Module.Tests.ps1
Normal file
65
tests/Helper/01_Test-Module.Tests.ps1
Normal file
@ -0,0 +1,65 @@
|
||||
#region HEADER
|
||||
$RepoRoot = (Get-GitDirectory).replace('\.git', '')
|
||||
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
|
||||
$sut = $sut -replace "\d{2}`_", ''
|
||||
$suthome = (Get-ChildItem -Path $RepoRoot -Exclude ".\tests\" -Filter $sut -Recurse).FullName
|
||||
# Skip try loading the source file if it doesn't exists.
|
||||
If ($suthome.Length -gt 0) {
|
||||
. $suthome
|
||||
}
|
||||
Else {
|
||||
Write-Warning ("Could not find source file {0}" -f $sut)
|
||||
}
|
||||
|
||||
# load additional functions defined in the repository. Replace the expression <FunctionName>.
|
||||
#. (Get-ChildItem -Path $RepoRoot -Filter "<FunctionName>.ps1" -Recurse).FullName
|
||||
|
||||
#endregion HEADER
|
||||
|
||||
Describe "Test-ModuleName" {
|
||||
Context "Basic input tests" {
|
||||
It "Testing standard module should not throw" {
|
||||
{ Test-Module -Name 'PowerShellGet' -Type Module } | Should -Not -Throw
|
||||
}
|
||||
It "Existing module should return true" {
|
||||
Test-Module -Name 'PowerShellGet' -Type Module | Should -Be $true
|
||||
}
|
||||
}
|
||||
Context "Custom Type tests" {
|
||||
It "Using custom type should throw" {
|
||||
{ Test-Module -Name "foobarr" -Type Custom} | Should -Throw
|
||||
}
|
||||
}
|
||||
Context "Working with PSSnapins" {
|
||||
It "Loading first PSSnaping should not throw " {
|
||||
$Snap = Get-PSSnapin -Registered | Select-Object -First 1
|
||||
{ Test-Module -Name $Snap.Name -Type PSSnapin } | Should -Not -Throw
|
||||
}
|
||||
It "Loading first PSSnaping should return true" {
|
||||
$Snap = Get-PSSnapin -Registered | Select-Object -First 1
|
||||
Test-Module -Name $Snap.Name -Type PSSnapin | Should -Be $true
|
||||
}
|
||||
It "Not existing PSSnaping should return false" {
|
||||
Test-Module -Name 'foobar2000' -Type PSSnapin | Should -Be $false
|
||||
}
|
||||
It "StopifFails switch should thrown an error" {
|
||||
{Test-Module -Name 'foobar2000' -Type PSSnapin -StopIfFails }| Should -Throw
|
||||
}
|
||||
}
|
||||
Context "Working with modules" {
|
||||
It "Loading first module should not throw " {
|
||||
$Mod = Get-Module -ListAvailable | Select-Object -First 1
|
||||
{ Test-Module -Name $Mod.Name -Type Module } | Should -Not -Throw
|
||||
}
|
||||
It "Loading first module should return true" {
|
||||
$Snap = Get-Module -ListAvailable | Select-Object -First 1
|
||||
Test-Module -Name $Snap.Name -Type Module | Should -Be $true
|
||||
}
|
||||
It "Not existing module should return false" {
|
||||
Test-Module -Name 'foobar2000' -Type Module | Should -Be $false
|
||||
}
|
||||
It "StopifFails switch should thrown an error" {
|
||||
{Test-Module -Name 'foobar2000' -Type Module -StopIfFails }| Should -Throw
|
||||
}
|
||||
}
|
||||
}
|
@ -61,5 +61,42 @@ Describe "New-CredentialStoreItem" {
|
||||
$res = Get-Member -InputObject $tmpCS -Name $RemoteHost -Membertype Properties
|
||||
$res.Name | Should Be $RemoteHost
|
||||
}
|
||||
It "Adds Item with identifier to shared store" {
|
||||
$tmpCS = 'C:\CredentialStore.json'
|
||||
$UserName = "myuser"
|
||||
$Password = ConvertTo-SecureString -String "mypasswd" -AsPlainText -Force
|
||||
$mycreds = New-Object -TypeName PSCredential -ArgumentList $UserName, $Password
|
||||
$RemoteHost = "foobar2"
|
||||
New-CredentialStoreItem -Path $tmpCS -RemoteHost $RemoteHost -Credential $mycreds -Identifier 'Foo'
|
||||
$writtenItem = Get-CredentialStoreItem -Path $tmpCS -RemoteHost $RemoteHost -Identifier 'Foo'
|
||||
($writtenItem.UserName -eq $UserName) -and ($writtenItem.Password.Length -gt 0) | Should -Be $true
|
||||
}
|
||||
}
|
||||
Context "Test optional parameter lookup" {
|
||||
Mock Get-Credential {
|
||||
$UserName = 'testuser'
|
||||
$Password = ConvertTo-SecureString -String "mypasswd" -AsPlainText -Force
|
||||
return [PSCredential]::new($UserName, $Password)
|
||||
|
||||
}
|
||||
It "Test missing Credential" {
|
||||
$tmpCS = 'C:\CredentialStore.json'
|
||||
New-CredentialStoreItem -Path $tmpCs -Shared -RemoteHost 'foobar3'
|
||||
$writtenItem = Get-CredentialStoreItem -Path $tmpCS -Shared -RemoteHost 'foobar3'
|
||||
$writtenItem.UserName | Should -Be "testuser"
|
||||
}
|
||||
}
|
||||
Context "General Exception handling" {
|
||||
Mock Test-CredentialStore {return $false}
|
||||
Mock Get-Credential {
|
||||
$UserName = 'myUser'
|
||||
$Password = ConvertTo-SecureString -String "mypasswd" -AsPlainText -Force
|
||||
return [PSCredential]::new($UserName, $Password)
|
||||
|
||||
}
|
||||
It "Missing CredentialStore should throw" {
|
||||
{ New-CredentialStoreItem -Path 'C:\missingStore.json' -RemoteHost 'notrelevant' } | Should -Throw "Could not add anything"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -33,5 +33,15 @@ Describe "Get-CredentialStore" {
|
||||
|
||||
{Get-CredentialStore -Path $TestCredentialStore} | Should Not Throw
|
||||
}
|
||||
It "Test3: Not existing path should return false" {
|
||||
{ Get-CredentialStore -Path 'C:\foobar\CredentialStore.json' -Shared }| Should -Throw "Could not find the CredentialStore."
|
||||
}
|
||||
}
|
||||
Context "Testing invalid json data" {
|
||||
Mock Test-CredentialStore {return $true}
|
||||
Mock Get-Content {return '"foo":"bar",'}
|
||||
It "Should throw with invalid CredentialStore" {
|
||||
{ Get-Credentialstore -Path "C:\dummy.json"} | Should -Throw "Unknown CredentialStore format. Invalid JSON file."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -92,6 +92,12 @@ Describe "New-CredentialStore" {
|
||||
{New-CredentialStore -Path $pCS -Shared -Force} | Should Not Throw
|
||||
}
|
||||
}
|
||||
Context "Test exception handling" {
|
||||
Mock Out-File {throw "foobar exception"}
|
||||
It "JSON Converstion should fail and throw" {
|
||||
{ New-CredentialStore -Path "C:\dummy.json"} | Should -Throw
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Cleanup test stores and restore existing ones.
|
||||
|
@ -36,5 +36,14 @@ Describe "Test-CredentialStore" {
|
||||
$res | Should Be $False
|
||||
$WarningPreference = $oWarningPreference
|
||||
}
|
||||
It "Test4: Not existing path should return false" {
|
||||
Test-CredentialStore -Path 'C:\foobar\CredentialStore.json' | Should -Be $false
|
||||
}
|
||||
It "Test5: testing private CredentialStore path" {
|
||||
if (Test-Path -Path ("{0}\CredentialStore.json" -f $env:APPDATA) ) {
|
||||
Remove-Item -Path ("{0}\CredentialStore.json" -f $env:APPDATA)
|
||||
}
|
||||
Test-CredentialStore | Should -Be $false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -154,7 +154,6 @@ Function Invoke-CoverageReport() {
|
||||
[String]$RepoToken = $Env:CoverallsToken
|
||||
)
|
||||
|
||||
Import-Module ('.\src\{0}.psm1' -f $CALLSIGN) -Verbose -Force
|
||||
$FileMap = New-PesterFileMap -SourceRoot '.\src' -PesterRoot '.\tests'
|
||||
$CoverageReport = New-CoverageReport -PesterFileMap $FileMap -RepoToken $RepoToken
|
||||
Write-Host "CoverageReport JSON:" -ForegroundColor Yellow
|
||||
|
Loading…
Reference in New Issue
Block a user