test/PSCertUtils.Tests.ps1
$ModuleManifestName = 'PSCertUtils.psd1' $ModuleManifestPath = "$PSScriptRoot\..\$ModuleManifestName" Describe 'Module Manifest Tests' { It 'Passes Test-ModuleManifest' { Test-ModuleManifest -Path $ModuleManifestPath $? | Should Be $true } } Describe 'Testing Get-X509Certificate' { It 'Passes download from http' { $X509Certificate = Get-X509Certificate -CertificateUri "http://crt.sh/?d=9314791" -ValidationThumbprint "CABD2A79A1076A31F21D253635CB039D4329A5E8" $X509Certificate.X509Certificate.Thumbprint | Should Be "CABD2A79A1076A31F21D253635CB039D4329A5E8" } It 'Passes download from https' { $X509Certificate = Get-X509Certificate -CertificateUri "https://crt.sh/?d=9314791" -ValidationThumbprint "CABD2A79A1076A31F21D253635CB039D4329A5E8" $X509Certificate.X509Certificate.Thumbprint | Should Be "CABD2A79A1076A31F21D253635CB039D4329A5E8" } It 'Passes import from local file' { $CertificateFile = [System.IO.Path]::GetTempFileName() (New-Object System.Net.WebClient).DownloadString('https://crt.sh/?d=9314791') | Set-Content $CertificateFile $X509Certificate = Get-X509Certificate -CertificateUri "$CertificateFile" -ValidationThumbprint "CABD2A79A1076A31F21D253635CB039D4329A5E8" Remove-Item $CertificateFile $X509Certificate.X509Certificate.Thumbprint | Should Be "CABD2A79A1076A31F21D253635CB039D4329A5E8" } <# It 'Passes pfx download from https with password' { $SecPass = ConvertTo-SecureString -String "Demo" -AsPlainText -Force $X509Certificate = Get-X509Certificate -CertificateUri "http://dominic86.de/demo/demo.pfx" -ValidationThumbprint "B6BEEE5404ACC55CD732589164DBF4EEB8031B87" -CertificatePassword $SecPass $X509Certificate.X509Certificate.Thumbprint | Should Be "B6BEEE5404ACC55CD732589164DBF4EEB8031B87" $X509Certificate.X509Certificate.HasPrivateKey | Should Be $True } #> } <# Describe 'Testing Export' { $SecPass = ConvertTo-SecureString -String "Demo" -AsPlainText -Force $X509DemoCertificate = Get-X509Certificate -CertificateUri "http://dominic86.de/demo/demo.pfx" -ValidationThumbprint "B6BEEE5404ACC55CD732589164DBF4EEB8031B87" -CertificatePassword $SecPass It 'Passes private key still existing after export and import as pfx' { $NewPass = ConvertTo-SecureString -String "Demo2" -AsPlainText -Force $CertificateFile = Export-X509CertificatePfx -X509Certificate $X509DemoCertificate -CertificatePassword $NewPass $ImportedX509Certificate = Get-X509Certificate -CertificateUri $CertificateFile -ValidationThumbprint "B6BEEE5404ACC55CD732589164DBF4EEB8031B87" -CertificatePassword $NewPass $ImportedX509Certificate.X509Certificate.Thumbprint | Should Be "B6BEEE5404ACC55CD732589164DBF4EEB8031B87" $ImportedX509Certificate.X509Certificate.HasPrivateKey | Should Be $True } It 'Passes private key still existing after export and import as pfx without password' { $CertificateFile = Export-X509CertificatePfx -X509Certificate $X509DemoCertificate $ImportedX509Certificate = Get-X509Certificate -CertificateUri $CertificateFile -ValidationThumbprint "B6BEEE5404ACC55CD732589164DBF4EEB8031B87" $ImportedX509Certificate.X509Certificate.Thumbprint | Should Be "B6BEEE5404ACC55CD732589164DBF4EEB8031B87" $ImportedX509Certificate.X509Certificate.HasPrivateKey | Should Be $True } It 'Passes export as base64 certificate' { $CertificateFile = Export-X509Certificate -X509Certificate $X509DemoCertificate Get-FileHash -Path $CertificateFile -Algorithm SHA256 | Select-Object -ExpandProperty Hash | Should Be '2A081A0E6B25FCC0DA97E78BA4D71F9CCD7D0751447A6351276FE7E1CD11C204' } } #> Describe "Get-X509CommonNameFromSubject" { Context "subjects without common name" { It "Without a common name in '<Subject>', it returns an empty string" -TestCases @( @{ Subject = 'CN=, C=Demo Company, O=Demo Company' } @{ Subject = 'CN='} @{ Subject = 'C=Demo Company, O=Demo Company' } @{ Subject = '' } ) { param ($Subject) $CommonName = Get-X509CommonNameFromSubject -X509Subject $Subject $CommonName | Should -Be "" } } Context "subjects with common name" { It "Given valid subject '<Subject>', it returns '<Expected>'" -TestCases @( @{ Subject = 'CN=Demo, C=Demo Company, O=Demo Company'; Expected = 'Demo' } @{ Subject = 'C=Demo Company, O=Demo Company, CN=Demo' ; Expected = 'Demo' } @{ Subject = 'C=Demo Company, CN=Demo, O=Demo Company' ; Expected = 'Demo' } @{ Subject = 'CN=Demo'; Expected = 'Demo' } @{ Subject = 'CN=Demo One'; Expected = 'Demo One' } @{ Subject = 'C=Demo Company, CN=Demo One, O=Demo Company' ; Expected = 'Demo One' } ) { param ($Subject, $Expected) $CommonName = Get-X509CommonNameFromSubject -X509Subject $Subject $CommonName | Should -Be $Expected } } } |