diff options
Diffstat (limited to 'tests/system_library/system_library_test.sh')
-rwxr-xr-x | tests/system_library/system_library_test.sh | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/tests/system_library/system_library_test.sh b/tests/system_library/system_library_test.sh new file mode 100755 index 0000000..b8d52b3 --- /dev/null +++ b/tests/system_library/system_library_test.sh @@ -0,0 +1,213 @@ +# --- begin runfiles.bash initialization --- +set -euo pipefail +if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then + if [[ -f "$0.runfiles_manifest" ]]; then + export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest" + elif [[ -f "$0.runfiles/MANIFEST" ]]; then + export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST" + elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then + export RUNFILES_DIR="$0.runfiles" + fi +fi +if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then + source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash" +elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then + source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \ + "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)" +else + echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash" + exit 1 +fi +# --- end runfiles.bash initialization --- + +source "$(rlocation rules_cc/tests/system_library/unittest.bash)" \ + || { echo "Could not rules_cc/source tests/system_library/unittest.bash" >&2; exit 1; } + + +function setup_system_library() { + mkdir -p systemlib + + cat << EOF > systemlib/foo.cc +int bar() { + return 42; +} +EOF + + cat << EOF > systemlib/foo.h +int bar(); +EOF + + cd systemlib + + g++ -c -fpic foo.cc || fail "Expected foo.o to build successfully" + g++ -shared -o libfoo.so foo.o || fail "Expected foo.so to build successfully" + g++ -c foo.cc || fail "Expected foo.o to build successfully" + ar rvs foo.a foo.o || fail "Expected foo.a to build successfully" + + cd .. + + cat << EOF > WORKSPACE +load("//:cc/system_library.bzl", "system_library") +system_library( + name = "foo", + hdrs = [ + "foo.h", + ], + static_lib_names = ["libfoo.a"], + shared_lib_names = ["libfoo.so"] +) + +system_library( + name = "foo_hardcoded_path", + hdrs = [ + "foo.h", + ], + static_lib_names = ["libfoo.a"], + shared_lib_names = ["libfoo.so"], + lib_path_hints = ["${PWD}/systemlib"], + includes = ["${PWD}/systemlib"] +) +EOF + + cat << EOF > BUILD +cc_binary( + name = "test", + srcs = ["test.cc"], + deps = ["@foo"] +) + +cc_binary( + name = "test_static", + srcs = ["test.cc"], + deps = ["@foo"], + linkstatic = True +) + +cc_binary( + name = "test_hardcoded_path", + srcs = ["test.cc"], + deps = ["@foo_hardcoded_path"] +) + +cc_binary( + name = "test_static_hardcoded_path", + srcs = ["test.cc"], + deps = ["@foo_hardcoded_path"], + linkstatic = True +) + +cc_binary( + name = "fake_rbe", + srcs = ["test.cc"], + deps = ["@foo_hardcoded_path"] +) +EOF + + cat << EOF > test.cc +#include "foo.h" + +int main() { + return 42 - bar(); +} +EOF +} +#### TESTS ############################################################# + +# Make sure it fails with a correct message when no library is found +function test_system_library_not_found() { + setup_system_library + + bazel run //:test \ + --experimental_starlark_cc_import \ + --experimental_repo_remote_exec \ + &> $TEST_log \ + || true + expect_log "Library foo could not be found" + + bazel run //:test_static \ + --experimental_starlark_cc_import \ + --experimental_repo_remote_exec \ + &> $TEST_log \ + || true + expect_log "Library foo could not be found" + } + +function test_override_paths() { + setup_system_library + + bazel run //:test \ + --experimental_starlark_cc_import \ + --experimental_repo_remote_exec \ + --action_env=BAZEL_LIB_OVERRIDE_PATHS=foo="${PWD}"/systemlib \ + --action_env=BAZEL_INCLUDE_OVERRIDE_PATHS=foo="${PWD}"/systemlib \ + || fail "Expected test to run successfully" + + bazel run //:test_static \ + --experimental_starlark_cc_import \ + --experimental_repo_remote_exec \ + --action_env=BAZEL_LIB_OVERRIDE_PATHS=foo="${PWD}"/systemlib \ + --action_env=BAZEL_INCLUDE_OVERRIDE_PATHS=foo="${PWD}"/systemlib \ + || fail "Expected test_static to run successfully" +} + +function test_additional_paths() { + setup_system_library + + bazel run //:test \ + --experimental_starlark_cc_import \ + --experimental_repo_remote_exec \ + --action_env=BAZEL_LIB_ADDITIONAL_PATHS=foo="${PWD}"/systemlib \ + --action_env=BAZEL_INCLUDE_ADDITIONAL_PATHS=foo="${PWD}"/systemlib \ + || fail "Expected test to run successfully" + + bazel run //:test_static \ + --experimental_starlark_cc_import \ + --experimental_repo_remote_exec \ + --action_env=BAZEL_LIB_ADDITIONAL_PATHS=foo="${PWD}"/systemlib \ + --action_env=BAZEL_INCLUDE_ADDITIONAL_PATHS=foo="${PWD}"/systemlib \ + || fail "Expected test_static to run successfully" +} + +function test_hardcoded_paths() { + setup_system_library + + bazel run //:test_hardcoded_path \ + --experimental_starlark_cc_import \ + --experimental_repo_remote_exec \ + || fail "Expected test_hardcoded_path to run successfully" + + bazel run //:test_static_hardcoded_path \ + --experimental_starlark_cc_import \ + --experimental_repo_remote_exec \ + || fail "Expected test_static_hardcoded_path to run successfully" +} + +function test_system_library_no_lib_names() { + cat << EOF > WORKSPACE +load("//:cc/system_library.bzl", "system_library") +system_library( + name = "foo", + hdrs = [ + "foo.h", + ] +) +EOF + + cat << EOF > BUILD +cc_binary( + name = "test", + srcs = ["test.cc"], + deps = ["@foo"] +) +EOF + + # It should fail when no static_lib_names and static_lib_names are given + bazel run //:test \ + --experimental_starlark_cc_import \ + --experimental_repo_remote_exec \ + &> $TEST_log \ + || true + expect_log "Library foo could not be found" +} + +run_suite "Integration tests for system_library."
\ No newline at end of file |