Merge pull request #294070 from corngood/dotnet-tests
dotnet: add publish and web tests
This commit is contained in:
commit
1bcfabc700
|
@ -4,6 +4,8 @@
|
|||
, writeText
|
||||
, testers
|
||||
, runCommand
|
||||
, expect
|
||||
, curl
|
||||
}: type: args: stdenv.mkDerivation (finalAttrs: args // {
|
||||
doInstallCheck = true;
|
||||
|
||||
|
@ -27,37 +29,97 @@
|
|||
|
||||
} // lib.optionalAttrs (type == "sdk") {
|
||||
passthru = {
|
||||
tests = {
|
||||
tests = let
|
||||
mkDotnetTest =
|
||||
{
|
||||
name,
|
||||
template,
|
||||
usePackageSource ? false,
|
||||
build,
|
||||
# TODO: use correct runtimes instead of sdk
|
||||
runtime ? finalAttrs.finalPackage,
|
||||
runInputs ? [],
|
||||
run ? null,
|
||||
}:
|
||||
let
|
||||
built = runCommand "dotnet-test-${name}" { buildInputs = [ finalAttrs.finalPackage ]; } (''
|
||||
HOME=$PWD/.home
|
||||
dotnet new nugetconfig
|
||||
dotnet nuget disable source nuget
|
||||
'' + lib.optionalString usePackageSource ''
|
||||
dotnet nuget add source ${finalAttrs.finalPackage.packages}
|
||||
'' + ''
|
||||
dotnet new ${template} -n test -o .
|
||||
'' + build);
|
||||
in
|
||||
if run == null
|
||||
then build
|
||||
else
|
||||
runCommand "${built.name}-run" { src = built; nativeBuildInputs = runInputs; } (
|
||||
lib.optionalString (runtime != null) ''
|
||||
# TODO: use runtime here
|
||||
export DOTNET_ROOT=${runtime}
|
||||
'' + run);
|
||||
|
||||
checkConsoleOutput = command: ''
|
||||
output="$(${command})"
|
||||
# yes, older SDKs omit the comma
|
||||
[[ "$output" =~ Hello,?\ World! ]] && touch "$out"
|
||||
'';
|
||||
|
||||
in {
|
||||
version = testers.testVersion {
|
||||
package = finalAttrs.finalPackage;
|
||||
};
|
||||
|
||||
console = runCommand "dotnet-test-console" {
|
||||
nativeBuildInputs = [ finalAttrs.finalPackage ];
|
||||
} ''
|
||||
HOME=$(pwd)/fake-home
|
||||
dotnet new nugetconfig
|
||||
dotnet nuget disable source nuget
|
||||
dotnet new console -n test -o .
|
||||
output="$(dotnet run)"
|
||||
# yes, older SDKs omit the comma
|
||||
[[ "$output" =~ Hello,?\ World! ]] && touch "$out"
|
||||
'';
|
||||
console = mkDotnetTest {
|
||||
name = "console";
|
||||
template = "console";
|
||||
build = checkConsoleOutput "dotnet run";
|
||||
};
|
||||
|
||||
single-file = let build = runCommand "dotnet-test-build-single-file" {
|
||||
nativeBuildInputs = [ finalAttrs.finalPackage ];
|
||||
} ''
|
||||
HOME=$(pwd)/fake-home
|
||||
dotnet new nugetconfig
|
||||
dotnet nuget disable source nuget
|
||||
dotnet nuget add source ${finalAttrs.finalPackage.packages}
|
||||
dotnet new console -n test -o .
|
||||
dotnet publish --use-current-runtime -p:PublishSingleFile=true -o $out
|
||||
''; in runCommand "dotnet-test-run-single-file" {} ''
|
||||
output="$(${build}/test)"
|
||||
# yes, older SDKs omit the comma
|
||||
[[ "$output" =~ Hello,?\ World! ]] && touch "$out"
|
||||
'';
|
||||
publish = mkDotnetTest {
|
||||
name = "publish";
|
||||
template = "console";
|
||||
build = "dotnet publish -o $out";
|
||||
run = checkConsoleOutput "$src/test";
|
||||
};
|
||||
|
||||
single-file = mkDotnetTest {
|
||||
name = "single-file";
|
||||
template = "console";
|
||||
usePackageSource = true;
|
||||
build = "dotnet publish --use-current-runtime -p:PublishSingleFile=true -o $out";
|
||||
runtime = null;
|
||||
run = checkConsoleOutput "$src/test";
|
||||
};
|
||||
|
||||
web = mkDotnetTest {
|
||||
name = "publish";
|
||||
template = "web";
|
||||
build = "dotnet publish -o $out";
|
||||
runInputs = [ expect curl ];
|
||||
run = ''
|
||||
expect <<"EOF"
|
||||
set status 1
|
||||
spawn $env(src)/test
|
||||
expect_before default abort
|
||||
expect -re {Now listening on: ([^\r]+)\r} {
|
||||
set url $expect_out(1,string)
|
||||
}
|
||||
expect "Application started. Press Ctrl+C to shut down."
|
||||
set output [exec curl -sSf $url]
|
||||
if {$output != "Hello World!"} {
|
||||
send_error "Unexpected output: $output\n"
|
||||
exit 1
|
||||
}
|
||||
send \x03
|
||||
catch wait result
|
||||
exit [lindex $result 3]
|
||||
EOF
|
||||
touch $out
|
||||
'';
|
||||
};
|
||||
} // args.passthru.tests or {};
|
||||
} // args.passthru or {};
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue