diff options
author | 2016-10-26 18:16:42 +0000 | |
---|---|---|
committer | 2016-10-27 09:27:05 +0000 | |
commit | 3bf723e3fb27143c22fe81711c9c9c1fa8c76d30 (patch) | |
tree | 2fb75b6df59b62d3953da2f84cbec7be37b477da /src | |
parent | 4d6aa197f5c07042fd970a5a9d82f6ec6acece1c (diff) |
Integration tests for RepositoryCache.
Remaining TODOs:
- Lockfiles for concurrent operations in the cache.
GITHUB: #1752
--
MOS_MIGRATED_REVID=137296606
Diffstat (limited to 'src')
-rw-r--r-- | src/test/shell/bazel/BUILD | 7 | ||||
-rwxr-xr-x | src/test/shell/bazel/bazel_repository_cache_test.sh | 211 |
2 files changed, 218 insertions, 0 deletions
diff --git a/src/test/shell/bazel/BUILD b/src/test/shell/bazel/BUILD index 9ffd05d8a7..e4f2643fcc 100644 --- a/src/test/shell/bazel/BUILD +++ b/src/test/shell/bazel/BUILD @@ -388,6 +388,13 @@ sh_test( data = [":test-deps"], ) +sh_test( + name = "bazel_repository_cache_test", + size = "medium", + srcs = ["bazel_repository_cache_test.sh"], + data = [":test-deps"], +) + test_suite( name = "all_tests", visibility = ["//visibility:public"], diff --git a/src/test/shell/bazel/bazel_repository_cache_test.sh b/src/test/shell/bazel/bazel_repository_cache_test.sh new file mode 100755 index 0000000000..007bfd957a --- /dev/null +++ b/src/test/shell/bazel/bazel_repository_cache_test.sh @@ -0,0 +1,211 @@ +#!/bin/bash +# +# Copyright 2016 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Test repository cache mechanisms +# TODO(jingwen): Test Skylark's download and download_and_extract + +# Load the test setup defined in the parent directory +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "${CURRENT_DIR}/../integration_test_setup.sh" \ + || { echo "integration_test_setup.sh not found!" >&2; exit 1; } +source "${CURRENT_DIR}/remote_helpers.sh" \ + || { echo "remote_helpers.sh not found!" >&2; exit 1; } + +function set_up() { + bazel clean --expunge >& $TEST_log + mkdir -p zoo + + http_archive_helper + repo_cache_dir=$TEST_TMPDIR/repository_cache + + # Delete the repository cache if it exists + rm -rf "$repo_cache_dir" + + # Test with the extension + serve_file $repo2_zip + cat > WORKSPACE <<EOF +http_archive( + name = 'endangered', + url = 'http://localhost:$nc_port/bleh', + sha256 = '$sha256', + type = 'zip', +) +EOF +} + +# Test downloading a file from a repository. +# This creates a simple repository containing: +# +# repo/ +# WORKSPACE +# zoo/ +# BUILD +# female.sh +# +# And a .zip file, which contains: +# +# WORKSPACE +# fox/ +# BUILD +# male +# male_relative -> male +# male_absolute -> /fox/male +function http_archive_helper() { + local write_workspace + [[ $# -gt 1 ]] && [[ "$2" = "nowrite" ]] && write_workspace=1 || write_workspace=0 + + if [[ $write_workspace -eq 0 ]]; then + # Create a zipped-up repository HTTP response. + repo2=$TEST_TMPDIR/repo2 + rm -rf $repo2 + mkdir -p $repo2/fox + cd $repo2 + touch WORKSPACE + cat > fox/BUILD <<EOF +filegroup( + name = "fox", + srcs = ["male"], + visibility = ["//visibility:public"], +) +EOF + what_does_the_fox_say="Fraka-kaka-kaka-kaka-kow" + cat > fox/male <<EOF +#!/bin/bash +echo $what_does_the_fox_say +EOF + chmod +x fox/male + ln -s male fox/male_relative + ln -s /fox/male fox/male_absolute + # Add some padding to the .zip to test that Bazel's download logic can + # handle breaking a response into chunks. + dd if=/dev/zero of=fox/padding bs=1024 count=10240 >& $TEST_log + repo2_zip=$TEST_TMPDIR/fox.zip + zip -0 -ry $repo2_zip WORKSPACE fox >& $TEST_log + repo2_name=$(basename $repo2_zip) + sha256=$(sha256sum $repo2_zip | cut -f 1 -d ' ') + fi + serve_file $repo2_zip + + cd ${WORKSPACE_DIR} + if [[ $write_workspace = 0 ]]; then + cat > WORKSPACE <<EOF +http_archive( + name = 'endangered', + url = 'http://localhost:$nc_port/$repo2_name', + sha256 = '$sha256' +) +EOF + + cat > zoo/BUILD <<EOF +sh_binary( + name = "breeding-program", + srcs = ["female.sh"], + data = ["@endangered//fox"], +) +EOF + + cat > zoo/female.sh <<EOF +#!/bin/bash +../endangered/fox/male +EOF + chmod +x zoo/female.sh +fi + + bazel run //zoo:breeding-program >& $TEST_log --show_progress_rate_limit=0 \ + || echo "Expected build/run to succeed" + kill_nc + expect_log "$what_does_the_fox_say" + + base_external_path=bazel-out/../external/endangered/fox + assert_files_same ${base_external_path}/male ${base_external_path}/male_relative + assert_files_same ${base_external_path}/male ${base_external_path}/male_absolute +} + +function assert_files_same() { + assert_contains "$(cat $1)" $2 && return 0 + echo "Expected these to be the same:" + echo "---------------------------" + cat $1 + echo "===========================" + cat $2 + echo "---------------------------" + return 1 +} + +function test_build() { + bazel run --experimental_repository_cache=$repo_cache_dir //zoo:breeding-program >& $TEST_log \ + || echo "Expected build/run to succeed" + kill_nc + expect_log $what_does_the_fox_say +} + +function test_fetch() { + bazel fetch --experimental_repository_cache=$repo_cache_dir //zoo:breeding-program >& $TEST_log \ + || echo "Expected fetch to succeed" + kill_nc + expect_log "All external dependencies fetched successfully" +} + +function test_directory_structure() { + bazel fetch --experimental_repository_cache=$repo_cache_dir //zoo:breeding-program >& $TEST_log \ + || echo "Expected fetch to succeed" + kill_nc + if [ ! -d $repo_cache_dir/content_addressable/sha256/ ]; then + fail "repository cache directories were not created" + fi +} + +function test_cache_entry_exists() { + bazel fetch --experimental_repository_cache=$repo_cache_dir //zoo:breeding-program >& $TEST_log \ + || echo "Expected fetch to succeed" + kill_nc + if [ ! -f $repo_cache_dir/content_addressable/sha256/$sha256/file ]; then + fail "the file was not cached successfully" + fi +} + +function test_load_cached_value() { + bazel fetch --experimental_repository_cache=$repo_cache_dir //zoo:breeding-program >& $TEST_log \ + || echo "Expected fetch to succeed" + + # Kill the server + kill_nc + bazel clean --expunge + + # Fetch again + bazel fetch --experimental_repository_cache=$repo_cache_dir //zoo:breeding-program >& $TEST_log \ + || echo "Expected fetch to succeed" + + expect_log "All external dependencies fetched successfully" +} + +function test_failed_fetch_without_cache() { + bazel fetch --experimental_repository_cache=$repo_cache_dir //zoo:breeding-program >& $TEST_log \ + || echo "Expected fetch to succeed" + + # Kill the server and reset state + kill_nc + bazel clean --expunge + rm -rf "$repo_cache_dir" + + # Attempt to fetch again + bazel fetch --experimental_repository_cache=$repo_cache_dir //zoo:breeding-program >& $TEST_log \ + && echo "Expected fetch to fail" + + expect_log "Error downloading" +} + +run_suite "repository cache tests" |