* Add dockerfile and test so we can test simple remoting behaviors this docker file creates an image which can be used to test remoting with containers. We start with the microsoft/windowsservercore image and then set up the system for testing by adding a user, setting up configuration for basic auth, installing PowerShell Core, and creating a configuration endpoint for PSCore. The tests are very simple; it retrieve $PSVersionTable.PSVersion in the following connections: Full -> Full Full -> Core Core -> Full Core -> Core * Add new file to bootstrap the docker image fix the tests to be more resilient to changes in the version of the PSCore package * update script to use local user cmdlets rather than net.exe also remove pscore.msi at the end of the image build process to save space * clean up commented lines and remove an unused parameter from one of the functions also use constants more consistently * remove reference to docker image name by string and use variable instead.
87 lines
4.7 KiB
PowerShell
87 lines
4.7 KiB
PowerShell
$imageName = "remotetestimage"
|
|
Describe "Basic remoting test with docker" -tags @("Scenario","Slow"){
|
|
BeforeAll {
|
|
$Timeout = 600 # 10 minutes to run these tests
|
|
$dockerimage = docker images --format "{{ .Repository }}" $imageName
|
|
if ( $dockerimage -ne $imageName ) {
|
|
$pending = $true
|
|
write-warning "Docker image '$imageName' not found, not running tests"
|
|
return
|
|
}
|
|
else {
|
|
$pending = $false
|
|
}
|
|
|
|
# give the containers something to do, otherwise they will exit and be removed
|
|
Write-Verbose -verbose "setting up docker container PowerShell server"
|
|
$server = docker run -d $imageName powershell -c start-sleep $timeout
|
|
Write-Verbose -verbose "setting up docker container PowerShell client"
|
|
$client = docker run -d $imageName powershell -c start-sleep $timeout
|
|
|
|
# get fullpath to installed core powershell
|
|
Write-Verbose -verbose "Getting path to PowerShell core"
|
|
$powershellcorepath = docker exec $server powershell -c "(get-childitem 'c:\program files\powershell\*\powershell.exe').fullname"
|
|
if ( ! $powershellcorepath )
|
|
{
|
|
$pending = $true
|
|
write-warning "Cannot find powershell core executable, not running tests"
|
|
return
|
|
}
|
|
$powershellcoreversion = ($powershellcorepath -split "[\\/]")[-2]
|
|
# we will need the configuration of the core powershell endpoint
|
|
$powershellcoreConfiguration = "powershell.${powershellcoreversion}"
|
|
|
|
# capture the hostnames of the containers which will be used by the tests
|
|
write-verbose -verbose "getting server hostname"
|
|
$serverhostname = docker exec $server hostname
|
|
write-verbose -verbose "getting client hostname"
|
|
$clienthostname = docker exec $client hostname
|
|
|
|
# capture the versions of full and core PowerShell
|
|
write-verbose -verbose "getting powershell full version"
|
|
$fullVersion = docker exec $client powershell -c "`$psversiontable.psversion.tostring()"
|
|
if ( ! $fullVersion )
|
|
{
|
|
$pending = $true
|
|
write-warning "Cannot determine PowerShell full version, not running tests"
|
|
return
|
|
}
|
|
|
|
write-verbose -verbose "getting powershell core version"
|
|
$coreVersion = docker exec $client "$powershellcorepath" -c "`$psversiontable.psversion.tostring()"
|
|
if ( ! $coreVersion )
|
|
{
|
|
$pending = $true
|
|
write-warning "Cannot determine PowerShell core version, not running tests"
|
|
return
|
|
}
|
|
}
|
|
|
|
AfterAll {
|
|
# to debug, comment out the following
|
|
if ( $pending -eq $false ) {
|
|
docker rm -f $server
|
|
docker rm -f $client
|
|
}
|
|
}
|
|
|
|
It "Full powershell can get correct remote powershell core version" -pending:$pending {
|
|
$result = docker exec $client powershell -c "`$ss = [security.securestring]::new(); '11aa!!AA'.ToCharArray() | %{ `$ss.appendchar(`$_)}; `$c = [pscredential]::new('testuser',`$ss); `$ses=new-pssession $serverhostname -configurationname $powershellcoreConfiguration -auth basic -credential `$c; invoke-command -session `$ses { `$psversiontable.psversion.tostring() }"
|
|
$result | should be $coreVersion
|
|
}
|
|
|
|
It "Full powershell can get correct remote powershell full version" -pending:$pending {
|
|
$result = docker exec $client powershell -c "`$ss = [security.securestring]::new(); '11aa!!AA'.ToCharArray() | %{ `$ss.appendchar(`$_)}; `$c = [pscredential]::new('testuser',`$ss); `$ses=new-pssession $serverhostname -auth basic -credential `$c; invoke-command -session `$ses { `$psversiontable.psversion.tostring() }"
|
|
$result | should be $fullVersion
|
|
}
|
|
|
|
It "Core powershell can get correct remote powershell core version" -pending:$pending {
|
|
$result = docker exec $client "$powershellcorepath" -c "`$ss = [security.securestring]::new(); '11aa!!AA'.ToCharArray() | %{ `$ss.appendchar(`$_)}; `$c = [pscredential]::new('testuser',`$ss); `$ses=new-pssession $serverhostname -configurationname $powershellcoreConfiguration -auth basic -credential `$c; invoke-command -session `$ses { `$psversiontable.psversion.tostring() }"
|
|
$result | should be $coreVersion
|
|
}
|
|
|
|
It "Core powershell can get correct remote powershell full version" -pending:$pending {
|
|
$result = docker exec $client "$powershellcorepath" -c "`$ss = [security.securestring]::new(); '11aa!!AA'.ToCharArray() | %{ `$ss.appendchar(`$_)}; `$c = [pscredential]::new('testuser',`$ss); `$ses=new-pssession $serverhostname -auth basic -credential `$c; invoke-command -session `$ses { `$psversiontable.psversion.tostring() }"
|
|
$result | should be $fullVersion
|
|
}
|
|
}
|