From 37daab6b504b1bfc6d0ce37b9ce7d1e5f65a5747 Mon Sep 17 00:00:00 2001 From: Johannes Weiss Date: Fri, 1 Dec 2017 14:58:04 +0000 Subject: [PATCH] integration test for blacklisted errnos --- .../test_02_blacklisted_errnos.sh | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 sh-tests/tests_02_syscall_wrappers/test_02_blacklisted_errnos.sh diff --git a/sh-tests/tests_02_syscall_wrappers/test_02_blacklisted_errnos.sh b/sh-tests/tests_02_syscall_wrappers/test_02_blacklisted_errnos.sh new file mode 100644 index 00000000..97fa4db3 --- /dev/null +++ b/sh-tests/tests_02_syscall_wrappers/test_02_blacklisted_errnos.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +set -eu + +swift_binary=swift +here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +if [[ ! -z "${SWIFT_EXEC-}" ]]; then + swift_binary="$(dirname "$SWIFT_EXEC")/swift" +elif [[ "$(uname -s)" == "Linux" ]]; then + swift_binary=$(which swift) +fi + +tmpdir=$(mktemp -d /tmp/.swift-nio-syscall-wrappers-sh-test_XXXXXX) +mkdir "$tmpdir/syscallwrapper" +cd "$tmpdir/syscallwrapper" +swift package init --type=executable +cat > "$tmpdir/syscallwrapper/Sources/syscallwrapper/main.swift" <(bitPattern: 0xdeadbeef)! : ptr, + size: 1) +} +exit(42) +EOF + +cat > "$tmpdir/syscallwrapper/Package.swift" <<"EOF" +// swift-tools-version:4.0 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "syscallwrapper", + dependencies: [], + targets: [ + .target( + name: "syscallwrapper", + dependencies: ["CNIOLinux"]), + .target( + name: "CNIOLinux", + dependencies: []), + ] +) +EOF + +cp "$here/../../Tests/NIOTests/SystemCallWrapperHelpers.swift" \ + "$here/../../Sources/NIO/System.swift" \ + "$here/../../Sources/NIO/IO.swift" \ + "$tmpdir/syscallwrapper/Sources/syscallwrapper" +ln -s "$here/../../Sources/CNIOLinux" "$tmpdir/syscallwrapper/Sources" +for mode in debug release; do + for error in EFAULT EBADF; do + temp_file="$tmp/stderr" + if "$swift_binary" run -c "$mode" -Xswiftc -DRUNNING_INTEGRATION_TESTS \ + syscallwrapper "$error" 2> "$temp_file"; then + + fail "exited successfully but was supposed to fail" + else + exit_code=$? + # expecting illegal instruction as it should fail with a blacklisted errno + if [[ "$mode" == "release" ]]; then + assert_equal 42 $exit_code + else + assert_equal $(( 128 + 4 )) $exit_code # 4 == SIGILL + grep -q blacklisted\ errno "$temp_file" + fi + fi + done +done + +rm -rf "$tmpdir"