Skip to content

Commit

Permalink
Merge pull request jenkinsci/docker-inbound-agent#195 from slide/wind…
Browse files Browse the repository at this point in the history
…ows_refactor

Windows refactor
  • Loading branch information
slide authored Oct 5, 2020
2 parents ced2fdb + 59b285a commit 927180f
Showing 1 changed file with 152 additions and 0 deletions.
152 changes: 152 additions & 0 deletions tests/inboundAgent.Tests.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
Import-Module -DisableNameChecking -Force $PSScriptRoot/test_helpers.psm1

$AGENT_IMAGE='jenkins-inbound-agent'
$AGENT_CONTAINER='pester-jenkins-inbound-agent'
$SHELL="powershell.exe"

$FOLDER = Get-EnvOrDefault 'FOLDER' ''
$VERSION = Get-EnvOrDefault 'VERSION' '4.3-6'

$REAL_FOLDER=Resolve-Path -Path "$PSScriptRoot/../${FOLDER}"

if(($FOLDER -match '^(?<jdk>[0-9]+)[\\/](?<flavor>.+)$') -and (Test-Path $REAL_FOLDER)) {
$JDK = $Matches['jdk']
$FLAVOR = $Matches['flavor']
} else {
Write-Error "Wrong folder format or folder does not exist: $FOLDER"
exit 1
}

if($FLAVOR -match "nanoserver-(\d+)") {
$AGENT_IMAGE += "-nanoserver"
$AGENT_CONTAINER += "-nanoserver-$($Matches[1])"
$SHELL = "pwsh.exe"
}

if($JDK -eq "11") {
$AGENT_IMAGE += ":jdk11"
$AGENT_CONTAINER += "-jdk11"
} else {
$AGENT_IMAGE += ":latest"
}

Cleanup($AGENT_CONTAINER)
Cleanup("nmap")
CleanupNetwork("jnlp-network")

BuildNcatImage

Describe "[$JDK $FLAVOR] build image" {
BeforeAll {
Push-Location -StackName 'agent' -Path "$PSScriptRoot/.."
}

It 'builds image' {
$exitCode, $stdout, $stderr = Run-Program 'docker.exe' "build --build-arg 'VERSION=$VERSION' -t $AGENT_IMAGE $FOLDER"
$exitCode | Should -Be 0
}

AfterAll {
Pop-Location -StackName 'agent'
}
}

Describe "[$JDK $FLAVOR] check user account" {
BeforeAll {
docker run -d -it --name "$AGENT_CONTAINER" -P "$AGENT_IMAGE" "$SHELL"
Is-ContainerRunning $AGENT_CONTAINER
}

It 'Password never expires' {
$exitCode, $stdout, $stderr = Run-Program 'docker.exe' "exec $AGENT_CONTAINER $SHELL -C `"if((net user jenkins | Select-String -Pattern 'Password expires') -match 'Never') { exit 0 } else { exit -1 }`""
$exitCode | Should -Be 0
}

It 'Password not required' {
$exitCode, $stdout, $stderr = Run-Program 'docker.exe' "exec $AGENT_CONTAINER $SHELL -C `"if((net user jenkins | Select-String -Pattern 'Password required') -match 'No') { exit 0 } else { exit -1 }`""
$exitCode | Should -Be 0
}

AfterAll {
Cleanup($AGENT_CONTAINER)
}
}

Describe "[$JDK $FLAVOR] image has jenkins-agent.ps1 in the correct location" {
BeforeAll {
& docker run -dit --name "$AGENT_CONTAINER" -P "$AGENT_IMAGE" $SHELL
Is-ContainerRunning $AGENT_CONTAINER | Should -BeTrue
}

It 'has jenkins-agent.ps1 in C:/ProgramData/Jenkins' {
$exitCode, $stdout, $stderr = Run-Program 'docker.exe' "exec $AGENT_CONTAINER $SHELL -C `"if(Test-Path 'C:/ProgramData/Jenkins/jenkins-agent.ps1') { exit 0 } else { exit 1 }`""
$exitCode | Should -Be 0
}

AfterAll {
Cleanup($AGENT_CONTAINER)
}
}

Describe "[$JDK $FLAVOR] image starts jenkins-agent.ps1 correctly (slow test)" {
It 'connects to the nmap container' {
$exitCode, $stdout, $stderr = Run-Program 'docker.exe' "network create --driver nat jnlp-network"
# Launch the netcat utility, listening at port 5000 for 30 sec
# bats will capture the output from netcat and compare the first line
# of the header of the first HTTP request with the expected one
$exitCode, $stdout, $stderr = Run-Program 'docker.exe' "run -dit --name nmap --network=jnlp-network nmap:latest ncat.exe -w 30 -l 5000"
$exitCode | Should -Be 0
Is-ContainerRunning "nmap" | Should -BeTrue

# get the ip address of the nmap container
$exitCode, $stdout, $stderr = Run-Program 'docker.exe' "inspect -f `"{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}`" nmap"
$exitCode | Should -Be 0
$nmap_ip = $stdout.Trim()

# run Jenkins agent which tries to connect to the nmap container at port 5000
$exitCode, $stdout, $stderr = Run-Program 'docker.exe' "run -dit --network=jnlp-network --name $AGENT_CONTAINER $AGENT_IMAGE -Url http://${nmap_ip}:5000 -Secret aaa -Name bbb"
$exitCode | Should -Be 0
Is-ContainerRunning $AGENT_CONTAINER | Should -BeTrue

$exitCode, $stdout, $stderr = Run-Program 'docker.exe' 'wait nmap'
$exitCode, $stdout, $stderr = Run-Program 'docker.exe' 'logs nmap'
$exitCode | Should -Be 0
$stdout | Should -Match "GET /tcpSlaveAgentListener/ HTTP/1.1`r"
}

AfterAll {
Cleanup($AGENT_CONTAINER)
Cleanup("nmap")
CleanupNetwork("jnlp-network")
}
}

Describe "[$JDK $FLAVOR] build args" {
BeforeAll {
Push-Location -StackName 'agent' -Path "$PSScriptRoot/.."
}

It -Skip 'uses build args correctly' {
$TEST_VERSION="4.3"
$TEST_USER="foo"

$exitCode, $stdout, $stderr = Run-Program 'docker.exe' "build --build-arg VERSION=${TEST_VERSION}-2 --build-arg user=$TEST_USER -t $AGENT_IMAGE $FOLDER"
$exitCode | Should -Be 0

$exitCode, $stdout, $stderr = Run-Program 'docker.exe' "run -dit --name $AGENT_CONTAINER -P $AGENT_IMAGE $SHELL"
$exitCode | Should -Be 0
Is-ContainerRunning "$AGENT_CONTAINER" | Should -BeTrue

$exitCode, $stdout, $stderr = Run-Program 'docker.exe' "exec $AGENT_CONTAINER $SHELL -c `"java -cp C:/ProgramData/Jenkins/agent.jar hudson.remoting.jnlp.Main -version`""
$exitCode | Should -Be 0
$stdout | Should -Match $TEST_VERSION

$exitCode, $stdout, $stderr = Run-Program 'docker.exe' "exec $AGENT_CONTAINER $SHELL -c `"(Get-ChildItem env:\ | Where-Object { `$_.Name -eq 'USERNAME' }).Value`""
$exitCode | Should -Be 0
$stdout | Should -Match $TEST_USER
}

AfterAll {
Pop-Location -StackName 'agent'
}
}

0 comments on commit 927180f

Please sign in to comment.