Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport PR #15861 to 7.17: Allow running Java+Ruby tests on Windows separately #15887

Merged
merged 1 commit into from
Feb 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .buildkite/scripts/exhaustive-tests/generate-steps.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def compat_linux_step(imagesuffix: str) -> dict[str, typing.Any]:


def compat_windows_step(imagesuffix: str) -> dict[str, typing.Any]:
windows_command = LiteralScalarString(r'''$$env:WORKSPACE=$$PWD.Path ; .\\ci\\unit_tests.bat''')
windows_command = LiteralScalarString(r'''.\\ci\\unit_tests.ps1''')

return compat_step(imagesuffix, command=windows_command)

Expand Down
2 changes: 1 addition & 1 deletion .buildkite/scripts/jdk-matrix-tests/generate-steps.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ def all_jobs(self) -> list[typing.Callable[[], JobRetValues]]:
def unit_tests(self) -> JobRetValues:
step_name_human = "Unit Test (Java/Ruby)"
step_key = f"{self.group_key}-unit-test"
test_command = rf'''.\\.buildkite\\scripts\\jdk-matrix-tests\\launch-command.ps1 -JDK "{self.jdk}" -StepNameHuman "{step_name_human}" -AnnotateContext "{self.group_key}" -CIScript ".\\ci\\unit_tests.bat" -Annotate
test_command = rf'''.\\.buildkite\\scripts\\jdk-matrix-tests\\launch-command.ps1 -JDK "{self.jdk}" -StepNameHuman "{step_name_human}" -AnnotateContext "{self.group_key}" -CIScript ".\\ci\\unit_tests.ps1" -Annotate
'''

return JobRetValues(
Expand Down
3 changes: 0 additions & 3 deletions .buildkite/scripts/jdk-matrix-tests/launch-command.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@ param (
# expand previous buildkite folded section (command invocation)
Write-Host "^^^ +++"

# the unit test script expects the WORKSPACE env var
$env:WORKSPACE = $PWD.Path

# unset generic JAVA_HOME
if (Test-Path env:JAVA_HOME) {
Remove-Item -Path env:JAVA_HOME
Expand Down
56 changes: 0 additions & 56 deletions ci/unit_tests.bat

This file was deleted.

106 changes: 106 additions & 0 deletions ci/unit_tests.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
<#
.SYNOPSIS
This is a gradle wrapper script to help run the Logstash unit tests on Windows.

.PARAMETER UnnamedArgument1
Optionally allows to specify a subset of tests.
Allows values are "ruby" or "java".
If unset, all tests are executed.

.EXAMPLE
.\ci\unit_tests.ps1
Runs all unit tests.

.\ci\unit_tests.ps1 java
Runs only Java unit tests.
#>

$selectedTestSuite="all"

if ($args.Count -eq 1) {
$selectedTestSuite=$args[0]
}

$startingPath = Get-Location

## Map a drive letter to the current path to avoid path length issues

# First, check if there is already a mapping
$currentDir = $PWD.Path
$substOutput = subst

# Filter the subst output based on the path
$matchedLines = $substOutput | Where-Object { $_ -like "*$currentDir*" }

if ($matchedLines) {
# $currentDir seems to be already mapped to another drive letter; switch to this drive
# Extract the drive letter from the matched lines
$driveLetter = $matchedLines | ForEach-Object {
# Split the line by colon and extract the drive letter
($_ -split ':')[0]
}
$drivePath = "$driveLetter`:"

Write-Output "$currentDir is already mapped to $drivePath."
Set-Location -Path $drivePath
Write-Output "Changing drive to $drivePath."
}
else {
# $currentDir isn't mapped to a drive letter, let's find a free drive letter and change to it

# Loop through drive letters A to Z; we don't use the 'A'..'Z' for BWC with Windows 2016 / Powershell < 7
for ($driveLetterAscii = 65; $driveLetterAscii -le 90; $driveLetterAscii++) {
$drivePath = [char]$driveLetterAscii + ":"

# check if the drive letter is available
if (-not (Test-Path $drivePath)) {
# found a free drive letter, create the virtual drive mapping and switch to it
subst $drivePath $currentDir

Write-Output "Mapped $currentDir to $drivePath"
Set-Location -Path $drivePath
Write-Output "Changing drive to $drivePath."
# exit the loop since we found a free drive letter
break
}
}
}

if (Test-Path Env:BUILD_JAVA_HOME) {
if (Test-Path Env:GRADLE_OPTS) {
$env:GRADLE_OPTS=$env:GRADLE_OPTS + " " + "-Dorg.gradle.java.home=" + $env:BUILD_JAVA_HOME
} else {
$env:GRADLE_OPTS="-Dorg.gradle.java.home=" + $env:BUILD_JAVA_HOME
}
}

$testOpts = "GRADLE_OPTS: $env:GRADLE_OPTS, BUILD_JAVA_HOME: $env:BUILD_JAVA_HOME"

try {
if ($selectedTestSuite -eq "java") {
Write-Host "~~~ :java: Running Java tests via Gradle using $testOpts"
$CIScript = ".\gradlew.bat javaTests --console=plain --no-daemon --info"
Invoke-Expression $CIScript
}
elseif ($selectedTestSuite -eq "ruby") {
Write-Host "~~~ :ruby: Running Ruby tests via Gradle using $testOpts"
$CIScript = ".\gradlew.bat rubyTests --console=plain --no-daemon --info"
Invoke-Expression $CIScript
}
else {
Write-Host "~~~ Running all tests via Gradle using $testOpts"
$CIScript = ".\gradlew.bat test --console=plain --no-daemon --info"
Invoke-Expression $CIScript
}

if ($LASTEXITCODE -ne 0) {
throw "Test script $CIScript failed with a non-zero code: $LASTEXITCODE"
}
} catch {
# tests failed
Write-Host "^^^ +++"
exit 1
}

# switch back to the path when the script started
Set-Location -Path $startingPath