PowerShell/test/docker/networktest/DockerRemoting.Tests.ps1
James Truher [MSFT] 63c20f15b1 Add dockerfile and test so we can test simple remoting behaviors (#3470)
* 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.
2017-04-21 17:23:08 -07:00

88 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
}
}