PowerShell/test/tools/Modules/HelpersCommon/HelpersCommon.psm1
Steve Lee c1c5344a88 Update copyright and license headers (#6134)
Based on standard practices, we need to have a copyright and license notice at the top of each source file. Removed existing copyrights and updated/added copyright notices for .h, .cpp, .cs, .ps1, and .psm1 files.

Updated module manifests for consistency to have Author = "PowerShell" and Company = "Microsoft Corporation". Removed multiple line breaks.

Separate PR coming to update contribution document for new source files: #6140

Manually reviewed each change.

Fix #6073
2018-02-13 09:23:53 -08:00

142 lines
3.6 KiB
PowerShell

# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
function Wait-UntilTrue
{
[CmdletBinding()]
param (
[ScriptBlock]$sb,
[int]$TimeoutInMilliseconds = 10000,
[int]$IntervalInMilliseconds = 1000
)
# Get the current time
$startTime = [DateTime]::Now
# Loop until the script block evaluates to true
while (-not ($sb.Invoke())) {
# If the timeout period has passed, return false
if (([DateTime]::Now - $startTime).TotalMilliseconds -gt $timeoutInMilliseconds) {
return $false
}
# Sleep for the specified interval
Start-Sleep -Milliseconds $intervalInMilliseconds
}
return $true
}
function Wait-FileToBePresent
{
[CmdletBinding()]
param (
[string]$File,
[int]$TimeoutInSeconds = 10,
[int]$IntervalInMilliseconds = 100
)
Wait-UntilTrue -sb { Test-Path $File } -TimeoutInMilliseconds ($TimeoutInSeconds*1000) -IntervalInMilliseconds $IntervalInMilliseconds > $null
}
function Test-IsElevated
{
$IsElevated = $False
if ( $IsWindows ) {
# on Windows we can determine whether we're executing in an
# elevated context
$identity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$windowsPrincipal = new-object 'Security.Principal.WindowsPrincipal' $identity
if ($windowsPrincipal.IsInRole("Administrators") -eq 1)
{
$IsElevated = $true
}
}
else {
# on Linux, tests run via sudo will generally report "root" for whoami
if ( (whoami) -match "root" ) {
$IsElevated = $true
}
}
return $IsElevated
}
#This function follows the pester naming convention
function ShouldBeErrorId
{
param([Parameter(ValueFromPipeline, Mandatory)]
[ScriptBlock]
$sb,
[Parameter(Mandatory, Position=0)]
[string]
$FullyQualifiedErrorId)
try
{
& $sb | Out-Null
Throw "No Exception!"
}
catch
{
$_.FullyQualifiedErrorId | Should Be $FullyQualifiedErrorId | Out-Null
# Write the exception to output that allow us to check later other properies of the exception
Write-Output $_
}
}
function Get-RandomFileName
{
[System.IO.Path]::GetFileNameWithoutExtension([IO.Path]::GetRandomFileName())
}
#
# Testhook setting functions
# note these manipulate private data in the PowerShell engine which will
# enable us to not actually alter the system or mock returned data
#
$SCRIPT:TesthookType = [system.management.automation.internal.internaltesthooks]
function Test-TesthookIsSet
{
param (
[ValidateNotNullOrEmpty()]
[Parameter(Mandatory=$true)]
$testhookName
)
try {
return ${Script:TesthookType}.GetField($testhookName, "NonPublic,Static").GetValue($null)
}
catch {
# fall through
}
return $false
}
function Enable-Testhook
{
param (
[ValidateNotNullOrEmpty()]
[Parameter(Mandatory=$true)]
$testhookName
)
${Script:TesthookType}::SetTestHook($testhookName, $true)
}
function Disable-Testhook
{
param (
[ValidateNotNullOrEmpty()]
[Parameter(Mandatory=$true)]
$testhookName
)
${Script:TesthookType}::SetTestHook($testhookName, $false)
}
function Set-TesthookResult
{
param (
[ValidateNotNullOrEmpty()]
[Parameter(Mandatory=$true)]
$testhookName,
[ValidateNotNullOrEmpty()]
[Parameter(Mandatory=$true)]
$value
)
${Script:TesthookType}::SetTestHook($testhookName, $value)
}