121 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
#!/bin/bash
 | 
						|
 | 
						|
#
 | 
						|
# This script runs the full set of tests for product config:
 | 
						|
# 1. Build the product-config tool.
 | 
						|
# 2. Run the unit tests.
 | 
						|
# 3. Run the product config for every product available in the current
 | 
						|
#    source tree, for each of user, userdebug and eng.
 | 
						|
#       - To restrict which products or variants are run, set the
 | 
						|
#         PRODUCTS or VARIANTS environment variables.
 | 
						|
#       - Products for which the make based product config fails are
 | 
						|
#         skipped.
 | 
						|
#
 | 
						|
 | 
						|
# The PRODUCTS variable is used by the build, and setting it in the environment
 | 
						|
# interferes with that, so unset it.  (That should probably be fixed)
 | 
						|
products=$PRODUCTS
 | 
						|
variants=$VARIANTS
 | 
						|
unset PRODUCTS
 | 
						|
unset VARIANTS
 | 
						|
 | 
						|
# Don't use lunch from the user's shell
 | 
						|
unset TARGET_PRODUCT
 | 
						|
unset TARGET_BUILD_VARIANT
 | 
						|
 | 
						|
function die() {
 | 
						|
    format=$1
 | 
						|
    shift
 | 
						|
    printf "$format\nStopping...\n" $@ >&2
 | 
						|
    exit 1;
 | 
						|
}
 | 
						|
 | 
						|
[[ -f build/make/envsetup.sh ]] || die "Run this script from the root of the tree."
 | 
						|
: ${products:=$(build/soong/soong_ui.bash --dumpvar-mode all_named_products | sed -e "s/ /\n/g" | sort -u )}
 | 
						|
: ${variants:="user userdebug eng"}
 | 
						|
: ${CKATI_BIN:=prebuilts/build-tools/$(build/soong/soong_ui.bash --dumpvar-mode HOST_PREBUILT_TAG)/bin/ckati}
 | 
						|
 | 
						|
function if_signal_exit() {
 | 
						|
    [[ $1 -lt 128 ]] || exit $1
 | 
						|
}
 | 
						|
 | 
						|
build/soong/soong_ui.bash --build-mode --all-modules --dir="$(pwd)" product-config-test product-config \
 | 
						|
    || die "Build failed."
 | 
						|
 | 
						|
echo
 | 
						|
echo Running unit tests
 | 
						|
java -jar out/host/linux-x86/testcases/product-config-test/product-config-test.jar
 | 
						|
unit_tests=$?
 | 
						|
if_signal_exit $unit_tests
 | 
						|
 | 
						|
failed_baseline_checks=
 | 
						|
for product in $products ; do
 | 
						|
    for variant in $variants ; do
 | 
						|
        echo
 | 
						|
        echo "Checking: lunch $product-$variant"
 | 
						|
 | 
						|
        TARGET_PRODUCT=$product \
 | 
						|
            TARGET_BUILD_VARIANT=$variant \
 | 
						|
            build/soong/soong_ui.bash --dumpvar-mode TARGET_PRODUCT &> /dev/null
 | 
						|
        exit_status=$?
 | 
						|
        if_signal_exit $exit_status
 | 
						|
        if [ $exit_status -ne 0 ] ; then
 | 
						|
            echo "*** Combo fails with make, skipping product-config test run for $product-$variant"
 | 
						|
        else
 | 
						|
            rm -rf out/config/$product-$variant
 | 
						|
            TARGET_PRODUCT=$product TARGET_BUILD_VARIANT=$variant product-config \
 | 
						|
                            --ckati_bin $CKATI_BIN \
 | 
						|
                            --error 1000
 | 
						|
            exit_status=$?
 | 
						|
            if_signal_exit $exit_status
 | 
						|
            if [ $exit_status -ne 0 ] ; then
 | 
						|
                failed_baseline_checks="$failed_baseline_checks $product-$variant"
 | 
						|
            fi
 | 
						|
            if [ "$CHECK_FOR_RULES" != "" ] ; then
 | 
						|
                # This is a little bit of sleight of hand for good output formatting at the
 | 
						|
                # expense of speed. We've already run the command once without
 | 
						|
                # ALLOW_RULES_IN_PRODUCT_CONFIG, so we know it passes there. We run it again
 | 
						|
                # with ALLOW_RULES_IN_PRODUCT_CONFIG=error to see if it fails, but that will
 | 
						|
                # cause it to only print the first error. But we want to see all of them,
 | 
						|
                # so if it fails we run it a third time with ALLOW_RULES_IN_PRODUCT_CONFIG=warning,
 | 
						|
                # so we can see all the warnings.
 | 
						|
                TARGET_PRODUCT=$product \
 | 
						|
                    TARGET_BUILD_VARIANT=$variant \
 | 
						|
                    ALLOW_RULES_IN_PRODUCT_CONFIG=error \
 | 
						|
                    build/soong/soong_ui.bash --dumpvar-mode TARGET_PRODUCT &> /dev/null
 | 
						|
                exit_status=$?
 | 
						|
                if_signal_exit $exit_status
 | 
						|
                if [ $exit_status -ne 0 ] ; then
 | 
						|
                    TARGET_PRODUCT=$product \
 | 
						|
                        TARGET_BUILD_VARIANT=$variant \
 | 
						|
                        ALLOW_RULES_IN_PRODUCT_CONFIG=warning \
 | 
						|
                        build/soong/soong_ui.bash --dumpvar-mode TARGET_PRODUCT > /dev/null
 | 
						|
                    failed_rule_checks="$failed_rule_checks $product-$variant"
 | 
						|
                fi
 | 
						|
            fi
 | 
						|
        fi
 | 
						|
    done
 | 
						|
done
 | 
						|
 | 
						|
echo
 | 
						|
echo
 | 
						|
echo "------------------------------"
 | 
						|
echo SUMMARY
 | 
						|
echo "------------------------------"
 | 
						|
 | 
						|
echo -n "Unit tests        "
 | 
						|
if [ $unit_tests -eq 0 ] ; then echo PASSED ; else echo FAILED ; fi
 | 
						|
 | 
						|
echo -n "Baseline checks   "
 | 
						|
if [ "$failed_baseline_checks" = "" ] ; then echo PASSED ; else echo FAILED ; fi
 | 
						|
for combo in $failed_baseline_checks ; do
 | 
						|
    echo "                   ... $combo"
 | 
						|
done
 | 
						|
 | 
						|
echo -n "Rules checks      "
 | 
						|
if [ "$failed_rule_checks" = "" ] ; then echo PASSED ; else echo FAILED ; fi
 | 
						|
for combo in $failed_rule_checks ; do
 | 
						|
    echo "                   ... $combo"
 | 
						|
done
 | 
						|
 |