Skip to content

Commit

Permalink
Move exec group tests out of platforms_test and into integration.
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 372383546
  • Loading branch information
katre committed Jul 13, 2021
1 parent 10d4473 commit 58a6fb1
Show file tree
Hide file tree
Showing 3 changed files with 476 additions and 350 deletions.
351 changes: 1 addition & 350 deletions src/test/shell/bazel/platforms_test.sh
Expand Up @@ -42,21 +42,6 @@ fi
source "$(rlocation "io_bazel/src/test/shell/integration_test_setup.sh")" \
|| { echo "integration_test_setup.sh not found!" >&2; exit 1; }

# `uname` returns the current platform, e.g "MSYS_NT-10.0" or "Linux".
# `tr` converts all upper case letters to lower case.
# `case` matches the result if the `uname | tr` expression to string prefixes
# that use the same wildcards as names do in Bash, i.e. "msys*" matches strings
# starting with "msys", and "*" matches everything (it's the default case).
case "$(uname -s | tr [:upper:] [:lower:])" in
msys*)
# As of 2019-01-15, Bazel on Windows only supports MSYS Bash.
declare -r is_windows=true
;;
*)
declare -r is_windows=false
;;
esac

function test_platforms_repository_builds_itself() {
# We test that a built-in @platforms repository is buildable.
bazel build @platforms//:all &> $TEST_log \
Expand Down Expand Up @@ -132,339 +117,5 @@ EOF
grep 'The properties are: {"key2": "value2", "key": "value"}' $TEST_log || fail "Did not find expected properties"
}

function test_target_exec_properties_starlark() {
cat > rules.bzl << 'EOF'
def _impl(ctx):
out_file = ctx.outputs.output
ctx.actions.run_shell(inputs = [], outputs = [out_file], arguments=[out_file.path], progress_message = "Saying hello", command = "echo hello > \"$1\"")
my_rule = rule(
implementation = _impl,
attrs = {
"output": attr.output(),
}
)
EOF
cat > BUILD << 'EOF'
load("//:rules.bzl", "my_rule")
my_rule(
name = "a",
output = "out.txt",
exec_properties = {"key3": "value3", "overridden": "child_value"}
)
platform(
name = "my_platform",
exec_properties = {
"key2": "value2",
"overridden": "parent_value",
}
)
EOF

bazel build --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt &> $TEST_log || fail "Build failed"
grep "key2" out.txt || fail "Did not find the platform key"
grep "key3" out.txt || fail "Did not find the target attribute key"
grep "child_value" out.txt || fail "Did not find the overriding value"
}


function test_target_exec_properties_starlark_test() {
if "$is_windows"; then
script_name="test_script.bat"
script_content="@echo off\necho hello\n"
else
script_name="test_script.sh"
script_content="#!/bin/bash\necho hello\n"
fi
cat > rules.bzl <<EOF
def _impl(ctx):
out_file = ctx.actions.declare_file("$script_name")
ctx.actions.write(out_file, "$script_content", is_executable=True)
return [DefaultInfo(executable = out_file)]
my_rule_test = rule(
implementation = _impl,
test = True,
)
EOF
cat > BUILD << 'EOF'
load("//:rules.bzl", "my_rule_test")
my_rule_test(
name = "a",
exec_properties = {"key3": "value3", "overridden": "child_value"}
)
platform(
name = "my_platform",
exec_properties = {
"key2": "value2",
"overridden": "parent_value",
}
)
EOF

bazel test --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt &> $TEST_log || fail "Build failed"
grep "key2" out.txt || fail "Did not find the platform key"
grep "key3" out.txt || fail "Did not find the target attribute key"
grep "child_value" out.txt || fail "Did not find the overriding value"
}

function test_target_exec_properties_cc() {
cat > a.cc <<'EOF'
#include <stdio.h>
int main() {
printf("Hello\n");
}
EOF
cat > BUILD <<'EOF'
cc_binary(
name = "a",
srcs = ["a.cc"],
exec_properties = {"key3": "value3", "overridden": "child_value"}
)
platform(
name = "my_platform",
parents = ["@local_config_platform//:host"],
exec_properties = {
"key2": "value2",
"overridden": "parent_value",
}
)
EOF
bazel build --extra_execution_platforms=":my_platform" --toolchain_resolution_debug :a --execution_log_json_file out.txt &> $TEST_log || fail "Build failed"
grep "key3" out.txt || fail "Did not find the target attribute key"
grep "child_value" out.txt || fail "Did not find the overriding value"
grep "key2" out.txt || fail "Did not find the platform key"
}

function test_target_exec_properties_cc_test() {
cat > a.cc <<'EOF'
#include <stdio.h>
int main() {
printf("Hello\n");
}
EOF
cat > BUILD <<'EOF'
cc_test(
name = "a",
srcs = ["a.cc"],
exec_properties = {"key3": "value3", "overridden": "child_value"}
)
platform(
name = "my_platform",
parents = ["@local_config_platform//:host"],
exec_properties = {
"key2": "value2",
"overridden": "parent_value",
}
)
EOF
bazel test --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt &> $TEST_log || fail "Build failed"
grep "key2" out.txt || fail "Did not find the platform key"
grep "key3" out.txt || fail "Did not find the target attribute key"
grep "child_value" out.txt || fail "Did not find the overriding value"
}

function test_target_test_properties_sh_test() {
cat > a.sh <<'EOF'
#!/bin/bash
echo hello
EOF
chmod u+x a.sh
cat > BUILD <<'EOF'
sh_test(
name = "a",
srcs = ["a.sh"],
exec_properties = {"key3": "value3", "overridden": "child_value"}
)
platform(
name = "my_platform",
parents = ["@local_config_platform//:host"],
exec_properties = {
"key2": "value2",
"overridden": "parent_value",
}
)
EOF
bazel test --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt &> $TEST_log || fail "Build failed"
grep "key2" out.txt || fail "Did not find the platform key"
grep "key3" out.txt || fail "Did not find the target attribute key"
grep "child_value" out.txt || fail "Did not find the overriding value"
}

function test_platform_execgroup_properties_cc_test() {
cat > a.cc <<'EOF'
int main() {}
EOF
cat > BUILD <<'EOF'
cc_test(
name = "a",
srcs = ["a.cc"],
)
platform(
name = "my_platform",
parents = ["@local_config_platform//:host"],
exec_properties = {
"platform_key": "default_value",
"test.platform_key": "test_value",
}
)
EOF
bazel build --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt || fail "Build failed"
grep "platform_key" out.txt || fail "Did not find the platform key"
grep "default_value" out.txt || fail "Did not find the default value"
grep "test_value" out.txt && fail "Used the test-action value when not testing"

bazel test --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt || fail "Test failed"
grep "platform_key" out.txt || fail "Did not find the platform key"
grep "test_value" out.txt || fail "Did not find the test-action value"
}

function test_platform_execgroup_properties_nongroup_override_cc_test() {
cat > a.cc <<'EOF'
int main() {}
EOF
cat > BUILD <<'EOF'
cc_test(
name = "a",
srcs = ["a.cc"],
exec_properties = {
"platform_key": "override_value",
},
)
platform(
name = "my_platform",
parents = ["@local_config_platform//:host"],
exec_properties = {
"platform_key": "default_value",
"test.platform_key": "test_value",
}
)
EOF
bazel build --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt || fail "Build failed"
grep "platform_key" out.txt || fail "Did not find the platform key"
grep "override_value" out.txt || fail "Did not find the overriding value"
grep "default_value" out.txt && fail "Used the default value"

bazel test --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt || fail "Test failed"
grep "platform_key" out.txt || fail "Did not find the platform key"
grep "override_value" out.txt || fail "Did not find the overriding value"
}

function test_platform_execgroup_properties_group_override_cc_test() {
cat > a.cc <<'EOF'
int main() {}
EOF
cat > BUILD <<'EOF'
cc_test(
name = "a",
srcs = ["a.cc"],
exec_properties = {
"test.platform_key": "test_override",
},
)
platform(
name = "my_platform",
parents = ["@local_config_platform//:host"],
exec_properties = {
"platform_key": "default_value",
"test.platform_key": "test_value",
}
)
EOF
bazel build --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt || fail "Build failed"
grep "platform_key" out.txt || fail "Did not find the platform key"
grep "default_value" out.txt || fail "Used the default value"

bazel test --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt || fail "Test failed"
grep "platform_key" out.txt || fail "Did not find the platform key"
grep "test_override" out.txt || fail "Did not find the overriding test-action value"
}

function test_platform_execgroup_properties_override_group_and_default_cc_test() {
cat > a.cc <<'EOF'
int main() {}
EOF
cat > BUILD <<'EOF'
cc_test(
name = "a",
srcs = ["a.cc"],
exec_properties = {
"platform_key": "override_value",
"test.platform_key": "test_override",
},
)
platform(
name = "my_platform",
parents = ["@local_config_platform//:host"],
exec_properties = {
"platform_key": "default_value",
"test.platform_key": "test_value",
}
)
EOF
bazel build --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt || fail "Build failed"
grep "platform_key" out.txt || fail "Did not find the platform key"
grep "override_value" out.txt || fail "Did not find the overriding value"
grep "default_value" out.txt && fail "Used the default value"

bazel test --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt || fail "Test failed"
grep "platform_key" out.txt || fail "Did not find the platform key"
grep "test_override" out.txt || fail "Did not find the overriding test-action value"
}

function test_platform_properties_only_applied_for_relevant_execgroups_cc_test() {
cat > a.cc <<'EOF'
int main() {}
EOF
cat > BUILD <<'EOF'
cc_test(
name = "a",
srcs = ["a.cc"],
)
platform(
name = "my_platform",
parents = ["@local_config_platform//:host"],
exec_properties = {
"platform_key": "default_value",
"unknown.platform_key": "unknown_value",
}
)
EOF
bazel test --extra_execution_platforms=":my_platform" :a --execution_log_json_file out.txt || fail "Build failed"
grep "platform_key" out.txt || fail "Did not find the platform key"
grep "default_value" out.txt || fail "Did not find the default value"
}

function test_cannot_set_properties_for_irrelevant_execgroup_on_target_cc_test() {
cat > a.cc <<'EOF'
int main() {}
EOF
cat > BUILD <<'EOF'
cc_test(
name = "a",
srcs = ["a.cc"],
exec_properties = {
"platform_key": "default_value",
"unknown.platform_key": "unknown_value",
}
)
EOF
bazel test :a &> $TEST_log && fail "Build passed when we expected an error"
grep "Tried to set properties for non-existent exec group" $TEST_log || fail "Did not complain about unknown exec group"
}

run_suite "platform mapping test"
run_suite "platform repo test"

9 changes: 9 additions & 0 deletions src/test/shell/integration/BUILD
Expand Up @@ -770,6 +770,15 @@ sh_test(
],
)

sh_test(
name = "exec_group_test",
srcs = ["exec_group_test.sh"],
data = [
":test-deps",
"@bazel_tools//tools/bash/runfiles",
],
)

########################################################################
# Test suites.

Expand Down

0 comments on commit 58a6fb1

Please sign in to comment.