summaryrefslogtreecommitdiff
path: root/tests/symlinks_path_test.sh
blob: ed429119c941893ae08e121951f829a1ff0f0efb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/bash -eu

set -o pipefail

# Test that relative symlinks work by recreating the bug in b/259191764
# In some cases, developers prefer to move their checkouts. This causes
# issues in that symlinked files (namely, the bazel wrapper script)
# cannot be found. As such, we implemented relative symlinks so that a
# moved checkout doesn't need a full clean before rebuilding.
# The bazel output base will still need to be removed, as Starlark
# doesn't seem to support relative symlinks yet.

source "$(dirname "$0")/lib.sh"

function check_link_has_mock_top_prefix {
  input_link=$1
  link_target=`readlink $input_link`
  if [[ $link_target != "$MOCK_TOP"* ]]; then
    echo "Symlink for file $input_link -> $link_target doesn't start with $MOCK_TOP"
    exit 1
  fi
}

function test_symlinks_updated_when_top_dir_changed {
  setup

  mkdir -p a
  touch a/g.txt
  cat > a/Android.bp <<'EOF'
filegroup {
    name: "g",
    srcs: ["g.txt"],
    bazel_module: {bp2build_available: true},
}
EOF
  # A directory under $MOCK_TOP
  outdir=out2

  # Modify OUT_DIR in a subshell so it doesn't affect the top level one.
  (export OUT_DIR=$MOCK_TOP/$outdir; run_soong bp2build && run_bazel build --config=bp2build --config=ci //a:g)

  g_txt="out2/soong/workspace/a/g.txt"
  check_link_has_mock_top_prefix "$g_txt"

  move_mock_top

  (export OUT_DIR=$MOCK_TOP/$outdir; run_soong bp2build && run_bazel build --config=bp2build --config=ci //a:g)
  check_link_has_mock_top_prefix "$g_txt"
}

scan_and_run_tests