Add an incremental parity test.
This is to ensure the incremental enabled clean
build generates the equivalent ninja statements
as the normal build.
Bug: 358428180
Test: Run the test locally.
Change-Id: I2ecbffb125eced73bd59b63da8ad2a9504ae7cb8
diff --git a/tests/build_action_caching_test.sh b/tests/build_action_caching_test.sh
index 7524d82..8ecd037 100755
--- a/tests/build_action_caching_test.sh
+++ b/tests/build_action_caching_test.sh
@@ -6,6 +6,7 @@
# incremental modules are restored from cache.
OUTPUT_DIR="$(mktemp -d tmp.XXXXXX)"
+
echo ${OUTPUT_DIR}
function cleanup {
@@ -14,7 +15,7 @@
trap cleanup EXIT
function run_soong_build {
- USE_RBE=false TARGET_PRODUCT=aosp_arm TARGET_RELEASE=trunk_staging TARGET_BUILD_VARIANT=userdebug build/soong/soong_ui.bash --make-mode --incremental-build-actions nothing
+ USE_RBE=false TARGET_PRODUCT=aosp_arm TARGET_RELEASE=trunk_staging TARGET_BUILD_VARIANT=userdebug build/soong/soong_ui.bash --make-mode "$@" nothing
}
function run_soong_clean {
@@ -50,34 +51,102 @@
}
function test_build_action_restoring() {
+ local test_dir="${OUTPUT_DIR}/test_build_action_restoring"
+ mkdir -p ${test_dir}
run_soong_clean
- cat > ${OUTPUT_DIR}/Android.bp <<'EOF'
+ cat > ${test_dir}/Android.bp <<'EOF'
python_binary_host {
name: "my_little_binary_host",
srcs: ["my_little_binary_host.py"],
}
EOF
- touch ${OUTPUT_DIR}/my_little_binary_host.py
- run_soong_build
- mkdir -p "${OUTPUT_DIR}/before"
- cp -pr out/soong/build_aosp_arm_ninja_incremental out/soong/*.mk out/soong/build.aosp_arm.*.ninja ${OUTPUT_DIR}/before
+ touch ${test_dir}/my_little_binary_host.py
+ run_soong_build --incremental-build-actions
+ local dir_before="${test_dir}/before"
+ mkdir -p ${dir_before}
+ cp -pr out/soong/build_aosp_arm_ninja_incremental out/soong/*.mk out/soong/build.aosp_arm*.ninja ${test_dir}/before
# add a comment to the bp file, this should force a new analysis but no module
# should be really impacted, so all the incremental modules should be skipped.
- cat >> ${OUTPUT_DIR}/Android.bp <<'EOF'
+ cat >> ${test_dir}/Android.bp <<'EOF'
// new comments
EOF
- run_soong_build
- mkdir -p "${OUTPUT_DIR}/after"
- cp -pr out/soong/build_aosp_arm_ninja_incremental out/soong/*.mk out/soong/build.aosp_arm.*.ninja ${OUTPUT_DIR}/after
+ run_soong_build --incremental-build-actions
+ local dir_after="${test_dir}/after"
+ mkdir -p ${dir_after}
+ cp -pr out/soong/build_aosp_arm_ninja_incremental out/soong/*.mk out/soong/build.aosp_arm*.ninja ${test_dir}/after
- compare_files
- echo "Tests passed"
+ compare_incremental_files $dir_before $dir_after
+ rm -rf "$test_dir"
+ echo "test_build_action_restoring test passed"
}
-function compare_files() {
+function test_incremental_build_parity() {
+ local test_dir="${OUTPUT_DIR}/test_incremental_build_parity"
+ run_soong_clean
+ run_soong_build
+ local dir_before="${test_dir}/before"
+ mkdir -p ${dir_before}
+ cp -pr out/soong/*.mk out/soong/build.aosp_arm*.ninja ${test_dir}/before
+
+ # Now run clean build with incremental enabled
+ run_soong_clean
+ run_soong_build --incremental-build-actions
+ local dir_after="${test_dir}/after"
+ mkdir -p ${dir_after}
+ cp -pr out/soong/build_aosp_arm_ninja_incremental out/soong/*.mk out/soong/build.aosp_arm*.ninja ${test_dir}/after
+
+ compare_files_parity $dir_before $dir_after
+ rm -rf "$test_dir"
+ echo "test_incremental_build_parity test passed"
+}
+
+function compare_files_parity() {
+ local dir_before=$1; shift
+ local dir_after=$1; shift
count=0
- for file_before in ${OUTPUT_DIR}/before/*.ninja; do
- file_after="${OUTPUT_DIR}/after/$(basename "$file_before")"
+ for file_before in ${dir_before}/*.mk; do
+ file_after="${dir_after}/$(basename "$file_before")"
+ assert_files_equal $file_before $file_after
+ ((count++))
+ done
+ echo "Compared $count mk files"
+
+ combined_before_file="${dir_before}/combined_files.ninja"
+ count=0
+ for file in ${dir_before}/build.aosp_arm.*.ninja; do
+ cat $file >> $combined_before_file
+ ((count++))
+ done
+ echo "Combined $count ninja files from normal build"
+
+ combined_after_file="${dir_after}/combined_files.ninja"
+ count=0
+ for file in ${dir_after}/build.aosp_arm.*.ninja; do
+ cat $file >> $combined_after_file
+ ((count++))
+ done
+ echo "Combined $count ninja files from incremental build"
+
+ combined_incremental_ninjas="${dir_after}/combined_incremental_files.ninja"
+ count=0
+ for file in ${dir_after}/build_aosp_arm_ninja_incremental/*.ninja; do
+ cat $file >> $combined_incremental_ninjas
+ ((count++))
+ done
+ echo "Combined $count incremental ninja files"
+
+ cat $combined_incremental_ninjas >> $combined_after_file
+ sort $combined_after_file -o $combined_after_file
+ sort $combined_before_file -o $combined_before_file
+ assert_files_equal $combined_before_file $combined_after_file
+}
+
+function compare_incremental_files() {
+ local dir_before=$1; shift
+ local dir_after=$1; shift
+ count=0
+ for file_before in ${dir_before}/*.ninja; do
+ file_after="${dir_after}/$(basename "$file_before")"
assert_files_equal $file_before $file_after
compare_mtimes $file_before $file_after
if [ $? -ne 0 ]; then
@@ -89,8 +158,8 @@
echo "Compared $count ninja files"
count=0
- for file_before in ${OUTPUT_DIR}/before/*.mk; do
- file_after="${OUTPUT_DIR}/after/$(basename "$file_before")"
+ for file_before in ${dir_before}/*.mk; do
+ file_after="${dir_after}/$(basename "$file_before")"
assert_files_equal $file_before $file_after
compare_mtimes $file_before $file_after
# mk files shouldn't be regenerated
@@ -103,8 +172,8 @@
echo "Compared $count mk files"
count=0
- for file_before in ${OUTPUT_DIR}/before/build_aosp_arm_ninja_incremental/*.ninja; do
- file_after="${OUTPUT_DIR}/after/build_aosp_arm_ninja_incremental/$(basename "$file_before")"
+ for file_before in ${dir_before}/build_aosp_arm_ninja_incremental/*.ninja; do
+ file_after="${dir_after}/build_aosp_arm_ninja_incremental/$(basename "$file_before")"
assert_files_equal $file_before $file_after
compare_mtimes $file_before $file_after
# ninja files of skipped modules shouldn't be regenerated
@@ -117,4 +186,5 @@
echo "Compared $count incremental ninja files"
}
+test_incremental_build_parity
test_build_action_restoring