# End to end test: a real server, a real socket, a real login. # # This is the test that matters for the login path. A unit test can show that a # hash matches itself; only this shows that somebody can actually register, # connect, prove a password, get a token, redeem it and arrive as a player, and # that a wrong password does not. $ErrorActionPreference = 'Stop' $Repo = Split-Path -Parent $PSScriptRoot if (-not $Repo) { $Repo = $PSCommandPath | Split-Path -Parent | Split-Path -Parent } $Workspace = Split-Path -Parent $Repo $Out = Join-Path $Repo 'build' function Say($text) { Write-Host " $text" -ForegroundColor Cyan } $Protocol = Join-Path $Workspace 'rsx-protocol\build\classes' $Auth = Join-Path $Workspace 'rsx-auth\build\classes' foreach ($dep in @($Protocol, $Auth)) { if (-not (Test-Path $dep)) { Write-Host " Missing dependency: $dep" -ForegroundColor Red Write-Host ' Build rsx-protocol and rsx-auth first.' -ForegroundColor Red exit 1 } } New-Item -ItemType Directory -Force -Path $Out | Out-Null $mainOut = Join-Path $Out 'classes' Remove-Item $mainOut -Recurse -Force -ErrorAction SilentlyContinue New-Item -ItemType Directory -Force -Path $mainOut | Out-Null $mainFiles = @(Get-ChildItem (Join-Path $Repo 'src\main\java') -Recurse -Filter '*.java' | ForEach-Object { $_.FullName }) $cp = "$Protocol;$Auth" & javac -encoding UTF-8 --release 17 -Xlint:-options -nowarn -cp $cp -d $mainOut $mainFiles if ($LASTEXITCODE -ne 0) { Write-Host ' Main failed.' -ForegroundColor Red; exit 1 } $testOut = Join-Path $Out 'test-classes' Remove-Item $testOut -Recurse -Force -ErrorAction SilentlyContinue New-Item -ItemType Directory -Force -Path $testOut | Out-Null $testFiles = @(Get-ChildItem (Join-Path $Repo 'src\test\java') -Recurse -Filter '*.java' | ForEach-Object { $_.FullName }) & javac -encoding UTF-8 --release 17 -Xlint:-options -nowarn -cp "$cp;$mainOut" -d $testOut $testFiles if ($LASTEXITCODE -ne 0) { Write-Host ' Test failed to compile.' -ForegroundColor Red; exit 1 } Say "compiled $($mainFiles.Count) main + $($testFiles.Count) test files" $suites = @( 'net.rustnotmc.server.ServerTest', 'net.rustnotmc.server.world.WorldTest', 'net.rustnotmc.server.item.InventoryTest', 'net.rustnotmc.server.PlayTest' ) foreach ($suite in $suites) { Say "running $suite" & java -cp "$cp;$mainOut;$testOut" $suite (Join-Path $Out 'selftest') if ($LASTEXITCODE -ne 0) { Write-Host '' Write-Host " $suite FAILED" -ForegroundColor Red exit 1 } } Write-Host '' Write-Host ' Server tests passed.' -ForegroundColor Green