function Exec { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [scriptblock]$cmd, [string]$errorMessage = ($msgs.error_bad_command -f $cmd) ) try { $global:lastexitcode = 0 & $cmd if ($lastexitcode -ne 0) { throw $errorMessage } } catch [Exception] { throw $_ } } # Setup Go. $env:GOPATH = $env:WORKSPACE $env:PATH = "$env:GOPATH\bin;C:\tools\mingw64\bin;$env:PATH" & gvm --format=powershell $(Get-Content .go-version) | Invoke-Expression # Write cached magefile binaries to workspace to ensure # each run starts from a clean slate. $env:MAGEFILE_CACHE = "$env:WORKSPACE\.magefile" # Configure testing parameters. $env:TEST_COVERAGE = "true" $env:RACE_DETECTOR = "true" # Install mage from vendor. exec { go install github.com/elastic/beats/vendor/github.com/magefile/mage } "mage install FAILURE" echo "Fetching testing dependencies" # TODO (elastic/beats#5050): Use a vendored copy of this. exec { go get github.com/docker/libcompose } if (Test-Path "$env:beat") { cd "$env:beat" } else { echo "$env:beat does not exist" New-Item -ItemType directory -Path build | Out-Null New-Item -Name build\TEST-empty.xml -ItemType File | Out-Null exit } if (Test-Path "build") { Remove-Item -Recurse -Force build } New-Item -ItemType directory -Path build\coverage | Out-Null New-Item -ItemType directory -Path build\system-tests | Out-Null New-Item -ItemType directory -Path build\system-tests\run | Out-Null echo "Building fields.yml" exec { mage fields } "mage fields FAILURE" echo "Building $env:beat" exec { mage build } "Build FAILURE" echo "Unit testing $env:beat" exec { mage goTestUnit } "mage goTestUnit FAILURE" echo "System testing $env:beat" # Get a CSV list of package names. $packages = $(go list ./... | select-string -Pattern "/vendor/" -NotMatch | select-string -Pattern "/scripts/cmd/" -NotMatch) $packages = ($packages|group|Select -ExpandProperty Name) -join "," exec { go test -race -c -cover -covermode=atomic -coverpkg $packages } "go test -race -cover FAILURE" Set-Location -Path tests/system exec { nosetests --with-timer --with-xunit --xunit-file=../../build/TEST-system.xml } "System test FAILURE"