1*053f45beSAndroid Build Coastguard Worker#!/bin/bash 2*053f45beSAndroid Build Coastguard Worker# Copyright (C) 2017 Luis R. Rodriguez <[email protected]> 3*053f45beSAndroid Build Coastguard Worker# 4*053f45beSAndroid Build Coastguard Worker# This program is free software; you can redistribute it and/or modify it 5*053f45beSAndroid Build Coastguard Worker# under the terms of the GNU General Public License as published by the Free 6*053f45beSAndroid Build Coastguard Worker# Software Foundation; either version 2 of the License, or at your option any 7*053f45beSAndroid Build Coastguard Worker# later version; or, when distributed separately from the Linux kernel or 8*053f45beSAndroid Build Coastguard Worker# when incorporated into other software packages, subject to the following 9*053f45beSAndroid Build Coastguard Worker# license: 10*053f45beSAndroid Build Coastguard Worker# 11*053f45beSAndroid Build Coastguard Worker# This program is free software; you can redistribute it and/or modify it 12*053f45beSAndroid Build Coastguard Worker# under the terms of copyleft-next (version 0.3.1 or later) as published 13*053f45beSAndroid Build Coastguard Worker# at http://copyleft-next.org/. 14*053f45beSAndroid Build Coastguard Worker 15*053f45beSAndroid Build Coastguard Worker# This performs a series tests against the proc sysctl interface. 16*053f45beSAndroid Build Coastguard Worker 17*053f45beSAndroid Build Coastguard Worker# Kselftest framework requirement - SKIP code is 4. 18*053f45beSAndroid Build Coastguard Workerksft_skip=4 19*053f45beSAndroid Build Coastguard Worker 20*053f45beSAndroid Build Coastguard WorkerTEST_NAME="sysctl" 21*053f45beSAndroid Build Coastguard WorkerTEST_DRIVER="test_${TEST_NAME}" 22*053f45beSAndroid Build Coastguard WorkerTEST_DIR=$(dirname $0) 23*053f45beSAndroid Build Coastguard WorkerTEST_FILE=$(mktemp) 24*053f45beSAndroid Build Coastguard Worker 25*053f45beSAndroid Build Coastguard Worker# This represents 26*053f45beSAndroid Build Coastguard Worker# 27*053f45beSAndroid Build Coastguard Worker# TEST_ID:TEST_COUNT:ENABLED:TARGET 28*053f45beSAndroid Build Coastguard Worker# 29*053f45beSAndroid Build Coastguard Worker# TEST_ID: is the test id number 30*053f45beSAndroid Build Coastguard Worker# TEST_COUNT: number of times we should run the test 31*053f45beSAndroid Build Coastguard Worker# ENABLED: 1 if enabled, 0 otherwise 32*053f45beSAndroid Build Coastguard Worker# TARGET: test target file required on the test_sysctl module 33*053f45beSAndroid Build Coastguard Worker# 34*053f45beSAndroid Build Coastguard Worker# Once these are enabled please leave them as-is. Write your own test, 35*053f45beSAndroid Build Coastguard Worker# we have tons of space. 36*053f45beSAndroid Build Coastguard WorkerALL_TESTS="0001:1:1:int_0001" 37*053f45beSAndroid Build Coastguard WorkerALL_TESTS="$ALL_TESTS 0002:1:1:string_0001" 38*053f45beSAndroid Build Coastguard WorkerALL_TESTS="$ALL_TESTS 0003:1:1:int_0002" 39*053f45beSAndroid Build Coastguard WorkerALL_TESTS="$ALL_TESTS 0004:1:1:uint_0001" 40*053f45beSAndroid Build Coastguard WorkerALL_TESTS="$ALL_TESTS 0005:3:1:int_0003" 41*053f45beSAndroid Build Coastguard WorkerALL_TESTS="$ALL_TESTS 0006:50:1:bitmap_0001" 42*053f45beSAndroid Build Coastguard WorkerALL_TESTS="$ALL_TESTS 0007:1:1:boot_int" 43*053f45beSAndroid Build Coastguard WorkerALL_TESTS="$ALL_TESTS 0008:1:1:match_int" 44*053f45beSAndroid Build Coastguard Worker 45*053f45beSAndroid Build Coastguard Workerfunction allow_user_defaults() 46*053f45beSAndroid Build Coastguard Worker{ 47*053f45beSAndroid Build Coastguard Worker if [ -z $DIR ]; then 48*053f45beSAndroid Build Coastguard Worker DIR="/sys/module/test_sysctl/" 49*053f45beSAndroid Build Coastguard Worker fi 50*053f45beSAndroid Build Coastguard Worker if [ -z $DEFAULT_NUM_TESTS ]; then 51*053f45beSAndroid Build Coastguard Worker DEFAULT_NUM_TESTS=50 52*053f45beSAndroid Build Coastguard Worker fi 53*053f45beSAndroid Build Coastguard Worker if [ -z $SYSCTL ]; then 54*053f45beSAndroid Build Coastguard Worker SYSCTL="/proc/sys/debug/test_sysctl" 55*053f45beSAndroid Build Coastguard Worker fi 56*053f45beSAndroid Build Coastguard Worker if [ -z $PROD_SYSCTL ]; then 57*053f45beSAndroid Build Coastguard Worker PROD_SYSCTL="/proc/sys" 58*053f45beSAndroid Build Coastguard Worker fi 59*053f45beSAndroid Build Coastguard Worker if [ -z $WRITES_STRICT ]; then 60*053f45beSAndroid Build Coastguard Worker WRITES_STRICT="${PROD_SYSCTL}/kernel/sysctl_writes_strict" 61*053f45beSAndroid Build Coastguard Worker fi 62*053f45beSAndroid Build Coastguard Worker} 63*053f45beSAndroid Build Coastguard Worker 64*053f45beSAndroid Build Coastguard Workerfunction check_production_sysctl_writes_strict() 65*053f45beSAndroid Build Coastguard Worker{ 66*053f45beSAndroid Build Coastguard Worker echo -n "Checking production write strict setting ... " 67*053f45beSAndroid Build Coastguard Worker if [ ! -e ${WRITES_STRICT} ]; then 68*053f45beSAndroid Build Coastguard Worker echo "FAIL, but skip in case of old kernel" >&2 69*053f45beSAndroid Build Coastguard Worker else 70*053f45beSAndroid Build Coastguard Worker old_strict=$(cat ${WRITES_STRICT}) 71*053f45beSAndroid Build Coastguard Worker if [ "$old_strict" = "1" ]; then 72*053f45beSAndroid Build Coastguard Worker echo "ok" 73*053f45beSAndroid Build Coastguard Worker else 74*053f45beSAndroid Build Coastguard Worker echo "FAIL, strict value is 0 but force to 1 to continue" >&2 75*053f45beSAndroid Build Coastguard Worker echo "1" > ${WRITES_STRICT} 76*053f45beSAndroid Build Coastguard Worker fi 77*053f45beSAndroid Build Coastguard Worker fi 78*053f45beSAndroid Build Coastguard Worker 79*053f45beSAndroid Build Coastguard Worker if [ -z $PAGE_SIZE ]; then 80*053f45beSAndroid Build Coastguard Worker PAGE_SIZE=$(getconf PAGESIZE) 81*053f45beSAndroid Build Coastguard Worker fi 82*053f45beSAndroid Build Coastguard Worker if [ -z $MAX_DIGITS ]; then 83*053f45beSAndroid Build Coastguard Worker MAX_DIGITS=$(($PAGE_SIZE/8)) 84*053f45beSAndroid Build Coastguard Worker fi 85*053f45beSAndroid Build Coastguard Worker if [ -z $INT_MAX ]; then 86*053f45beSAndroid Build Coastguard Worker INT_MAX=$(getconf INT_MAX) 87*053f45beSAndroid Build Coastguard Worker fi 88*053f45beSAndroid Build Coastguard Worker if [ -z $UINT_MAX ]; then 89*053f45beSAndroid Build Coastguard Worker UINT_MAX=$(getconf UINT_MAX) 90*053f45beSAndroid Build Coastguard Worker fi 91*053f45beSAndroid Build Coastguard Worker} 92*053f45beSAndroid Build Coastguard Worker 93*053f45beSAndroid Build Coastguard Workertest_reqs() 94*053f45beSAndroid Build Coastguard Worker{ 95*053f45beSAndroid Build Coastguard Worker uid=$(id -u) 96*053f45beSAndroid Build Coastguard Worker if [ $uid -ne 0 ]; then 97*053f45beSAndroid Build Coastguard Worker echo $msg must be run as root >&2 98*053f45beSAndroid Build Coastguard Worker exit $ksft_skip 99*053f45beSAndroid Build Coastguard Worker fi 100*053f45beSAndroid Build Coastguard Worker 101*053f45beSAndroid Build Coastguard Worker if ! which perl 2> /dev/null > /dev/null; then 102*053f45beSAndroid Build Coastguard Worker echo "$0: You need perl installed" 103*053f45beSAndroid Build Coastguard Worker exit $ksft_skip 104*053f45beSAndroid Build Coastguard Worker fi 105*053f45beSAndroid Build Coastguard Worker if ! which getconf 2> /dev/null > /dev/null; then 106*053f45beSAndroid Build Coastguard Worker echo "$0: You need getconf installed" 107*053f45beSAndroid Build Coastguard Worker exit $ksft_skip 108*053f45beSAndroid Build Coastguard Worker fi 109*053f45beSAndroid Build Coastguard Worker if ! which diff 2> /dev/null > /dev/null; then 110*053f45beSAndroid Build Coastguard Worker echo "$0: You need diff installed" 111*053f45beSAndroid Build Coastguard Worker exit $ksft_skip 112*053f45beSAndroid Build Coastguard Worker fi 113*053f45beSAndroid Build Coastguard Worker} 114*053f45beSAndroid Build Coastguard Worker 115*053f45beSAndroid Build Coastguard Workerfunction load_req_mod() 116*053f45beSAndroid Build Coastguard Worker{ 117*053f45beSAndroid Build Coastguard Worker if [ ! -d $SYSCTL ]; then 118*053f45beSAndroid Build Coastguard Worker if ! modprobe -q -n $TEST_DRIVER; then 119*053f45beSAndroid Build Coastguard Worker echo "$0: module $TEST_DRIVER not found [SKIP]" 120*053f45beSAndroid Build Coastguard Worker echo "You must set CONFIG_TEST_SYSCTL=m in your kernel" >&2 121*053f45beSAndroid Build Coastguard Worker exit $ksft_skip 122*053f45beSAndroid Build Coastguard Worker fi 123*053f45beSAndroid Build Coastguard Worker modprobe $TEST_DRIVER 124*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 125*053f45beSAndroid Build Coastguard Worker echo "$0: modprobe $TEST_DRIVER failed." 126*053f45beSAndroid Build Coastguard Worker exit 127*053f45beSAndroid Build Coastguard Worker fi 128*053f45beSAndroid Build Coastguard Worker fi 129*053f45beSAndroid Build Coastguard Worker} 130*053f45beSAndroid Build Coastguard Worker 131*053f45beSAndroid Build Coastguard Workerreset_vals() 132*053f45beSAndroid Build Coastguard Worker{ 133*053f45beSAndroid Build Coastguard Worker VAL="" 134*053f45beSAndroid Build Coastguard Worker TRIGGER=$(basename ${TARGET}) 135*053f45beSAndroid Build Coastguard Worker case "$TRIGGER" in 136*053f45beSAndroid Build Coastguard Worker int_0001) 137*053f45beSAndroid Build Coastguard Worker VAL="60" 138*053f45beSAndroid Build Coastguard Worker ;; 139*053f45beSAndroid Build Coastguard Worker int_0002) 140*053f45beSAndroid Build Coastguard Worker VAL="1" 141*053f45beSAndroid Build Coastguard Worker ;; 142*053f45beSAndroid Build Coastguard Worker uint_0001) 143*053f45beSAndroid Build Coastguard Worker VAL="314" 144*053f45beSAndroid Build Coastguard Worker ;; 145*053f45beSAndroid Build Coastguard Worker string_0001) 146*053f45beSAndroid Build Coastguard Worker VAL="(none)" 147*053f45beSAndroid Build Coastguard Worker ;; 148*053f45beSAndroid Build Coastguard Worker bitmap_0001) 149*053f45beSAndroid Build Coastguard Worker VAL="" 150*053f45beSAndroid Build Coastguard Worker ;; 151*053f45beSAndroid Build Coastguard Worker *) 152*053f45beSAndroid Build Coastguard Worker ;; 153*053f45beSAndroid Build Coastguard Worker esac 154*053f45beSAndroid Build Coastguard Worker echo -n $VAL > $TARGET 155*053f45beSAndroid Build Coastguard Worker} 156*053f45beSAndroid Build Coastguard Worker 157*053f45beSAndroid Build Coastguard Workerset_orig() 158*053f45beSAndroid Build Coastguard Worker{ 159*053f45beSAndroid Build Coastguard Worker if [ ! -z $TARGET ] && [ ! -z $ORIG ]; then 160*053f45beSAndroid Build Coastguard Worker if [ -f ${TARGET} ]; then 161*053f45beSAndroid Build Coastguard Worker echo "${ORIG}" > "${TARGET}" 162*053f45beSAndroid Build Coastguard Worker fi 163*053f45beSAndroid Build Coastguard Worker fi 164*053f45beSAndroid Build Coastguard Worker} 165*053f45beSAndroid Build Coastguard Worker 166*053f45beSAndroid Build Coastguard Workerset_test() 167*053f45beSAndroid Build Coastguard Worker{ 168*053f45beSAndroid Build Coastguard Worker echo "${TEST_STR}" > "${TARGET}" 169*053f45beSAndroid Build Coastguard Worker} 170*053f45beSAndroid Build Coastguard Worker 171*053f45beSAndroid Build Coastguard Workerverify() 172*053f45beSAndroid Build Coastguard Worker{ 173*053f45beSAndroid Build Coastguard Worker local seen 174*053f45beSAndroid Build Coastguard Worker seen=$(cat "$1") 175*053f45beSAndroid Build Coastguard Worker if [ "${seen}" != "${TEST_STR}" ]; then 176*053f45beSAndroid Build Coastguard Worker return 1 177*053f45beSAndroid Build Coastguard Worker fi 178*053f45beSAndroid Build Coastguard Worker return 0 179*053f45beSAndroid Build Coastguard Worker} 180*053f45beSAndroid Build Coastguard Worker 181*053f45beSAndroid Build Coastguard Worker# proc files get read a page at a time, which can confuse diff, 182*053f45beSAndroid Build Coastguard Worker# and get you incorrect results on proc files with long data. To use 183*053f45beSAndroid Build Coastguard Worker# diff against them you must first extract the output to a file, and 184*053f45beSAndroid Build Coastguard Worker# then compare against that file. 185*053f45beSAndroid Build Coastguard Workerverify_diff_proc_file() 186*053f45beSAndroid Build Coastguard Worker{ 187*053f45beSAndroid Build Coastguard Worker TMP_DUMP_FILE=$(mktemp) 188*053f45beSAndroid Build Coastguard Worker cat $1 > $TMP_DUMP_FILE 189*053f45beSAndroid Build Coastguard Worker 190*053f45beSAndroid Build Coastguard Worker if ! diff -w -q $TMP_DUMP_FILE $2; then 191*053f45beSAndroid Build Coastguard Worker return 1 192*053f45beSAndroid Build Coastguard Worker else 193*053f45beSAndroid Build Coastguard Worker return 0 194*053f45beSAndroid Build Coastguard Worker fi 195*053f45beSAndroid Build Coastguard Worker} 196*053f45beSAndroid Build Coastguard Worker 197*053f45beSAndroid Build Coastguard Workerverify_diff_w() 198*053f45beSAndroid Build Coastguard Worker{ 199*053f45beSAndroid Build Coastguard Worker echo "$TEST_STR" | diff -q -w -u - $1 > /dev/null 200*053f45beSAndroid Build Coastguard Worker return $? 201*053f45beSAndroid Build Coastguard Worker} 202*053f45beSAndroid Build Coastguard Worker 203*053f45beSAndroid Build Coastguard Workertest_rc() 204*053f45beSAndroid Build Coastguard Worker{ 205*053f45beSAndroid Build Coastguard Worker if [[ $rc != 0 ]]; then 206*053f45beSAndroid Build Coastguard Worker echo "Failed test, return value: $rc" >&2 207*053f45beSAndroid Build Coastguard Worker exit $rc 208*053f45beSAndroid Build Coastguard Worker fi 209*053f45beSAndroid Build Coastguard Worker} 210*053f45beSAndroid Build Coastguard Worker 211*053f45beSAndroid Build Coastguard Workertest_finish() 212*053f45beSAndroid Build Coastguard Worker{ 213*053f45beSAndroid Build Coastguard Worker set_orig 214*053f45beSAndroid Build Coastguard Worker rm -f "${TEST_FILE}" 215*053f45beSAndroid Build Coastguard Worker 216*053f45beSAndroid Build Coastguard Worker if [ ! -z ${old_strict} ]; then 217*053f45beSAndroid Build Coastguard Worker echo ${old_strict} > ${WRITES_STRICT} 218*053f45beSAndroid Build Coastguard Worker fi 219*053f45beSAndroid Build Coastguard Worker exit $rc 220*053f45beSAndroid Build Coastguard Worker} 221*053f45beSAndroid Build Coastguard Worker 222*053f45beSAndroid Build Coastguard Workerrun_numerictests() 223*053f45beSAndroid Build Coastguard Worker{ 224*053f45beSAndroid Build Coastguard Worker echo "== Testing sysctl behavior against ${TARGET} ==" 225*053f45beSAndroid Build Coastguard Worker 226*053f45beSAndroid Build Coastguard Worker rc=0 227*053f45beSAndroid Build Coastguard Worker 228*053f45beSAndroid Build Coastguard Worker echo -n "Writing test file ... " 229*053f45beSAndroid Build Coastguard Worker echo "${TEST_STR}" > "${TEST_FILE}" 230*053f45beSAndroid Build Coastguard Worker if ! verify "${TEST_FILE}"; then 231*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 232*053f45beSAndroid Build Coastguard Worker exit 1 233*053f45beSAndroid Build Coastguard Worker else 234*053f45beSAndroid Build Coastguard Worker echo "ok" 235*053f45beSAndroid Build Coastguard Worker fi 236*053f45beSAndroid Build Coastguard Worker 237*053f45beSAndroid Build Coastguard Worker echo -n "Checking sysctl is not set to test value ... " 238*053f45beSAndroid Build Coastguard Worker if verify "${TARGET}"; then 239*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 240*053f45beSAndroid Build Coastguard Worker exit 1 241*053f45beSAndroid Build Coastguard Worker else 242*053f45beSAndroid Build Coastguard Worker echo "ok" 243*053f45beSAndroid Build Coastguard Worker fi 244*053f45beSAndroid Build Coastguard Worker 245*053f45beSAndroid Build Coastguard Worker echo -n "Writing sysctl from shell ... " 246*053f45beSAndroid Build Coastguard Worker set_test 247*053f45beSAndroid Build Coastguard Worker if ! verify "${TARGET}"; then 248*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 249*053f45beSAndroid Build Coastguard Worker exit 1 250*053f45beSAndroid Build Coastguard Worker else 251*053f45beSAndroid Build Coastguard Worker echo "ok" 252*053f45beSAndroid Build Coastguard Worker fi 253*053f45beSAndroid Build Coastguard Worker 254*053f45beSAndroid Build Coastguard Worker echo -n "Resetting sysctl to original value ... " 255*053f45beSAndroid Build Coastguard Worker set_orig 256*053f45beSAndroid Build Coastguard Worker if verify "${TARGET}"; then 257*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 258*053f45beSAndroid Build Coastguard Worker exit 1 259*053f45beSAndroid Build Coastguard Worker else 260*053f45beSAndroid Build Coastguard Worker echo "ok" 261*053f45beSAndroid Build Coastguard Worker fi 262*053f45beSAndroid Build Coastguard Worker 263*053f45beSAndroid Build Coastguard Worker # Now that we've validated the sanity of "set_test" and "set_orig", 264*053f45beSAndroid Build Coastguard Worker # we can use those functions to set starting states before running 265*053f45beSAndroid Build Coastguard Worker # specific behavioral tests. 266*053f45beSAndroid Build Coastguard Worker 267*053f45beSAndroid Build Coastguard Worker echo -n "Writing entire sysctl in single write ... " 268*053f45beSAndroid Build Coastguard Worker set_orig 269*053f45beSAndroid Build Coastguard Worker dd if="${TEST_FILE}" of="${TARGET}" bs=4096 2>/dev/null 270*053f45beSAndroid Build Coastguard Worker if ! verify "${TARGET}"; then 271*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 272*053f45beSAndroid Build Coastguard Worker rc=1 273*053f45beSAndroid Build Coastguard Worker else 274*053f45beSAndroid Build Coastguard Worker echo "ok" 275*053f45beSAndroid Build Coastguard Worker fi 276*053f45beSAndroid Build Coastguard Worker 277*053f45beSAndroid Build Coastguard Worker echo -n "Writing middle of sysctl after synchronized seek ... " 278*053f45beSAndroid Build Coastguard Worker set_test 279*053f45beSAndroid Build Coastguard Worker dd if="${TEST_FILE}" of="${TARGET}" bs=1 seek=1 skip=1 2>/dev/null 280*053f45beSAndroid Build Coastguard Worker if ! verify "${TARGET}"; then 281*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 282*053f45beSAndroid Build Coastguard Worker rc=1 283*053f45beSAndroid Build Coastguard Worker else 284*053f45beSAndroid Build Coastguard Worker echo "ok" 285*053f45beSAndroid Build Coastguard Worker fi 286*053f45beSAndroid Build Coastguard Worker 287*053f45beSAndroid Build Coastguard Worker echo -n "Writing beyond end of sysctl ... " 288*053f45beSAndroid Build Coastguard Worker set_orig 289*053f45beSAndroid Build Coastguard Worker dd if="${TEST_FILE}" of="${TARGET}" bs=20 seek=2 2>/dev/null 290*053f45beSAndroid Build Coastguard Worker if verify "${TARGET}"; then 291*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 292*053f45beSAndroid Build Coastguard Worker rc=1 293*053f45beSAndroid Build Coastguard Worker else 294*053f45beSAndroid Build Coastguard Worker echo "ok" 295*053f45beSAndroid Build Coastguard Worker fi 296*053f45beSAndroid Build Coastguard Worker 297*053f45beSAndroid Build Coastguard Worker echo -n "Writing sysctl with multiple long writes ... " 298*053f45beSAndroid Build Coastguard Worker set_orig 299*053f45beSAndroid Build Coastguard Worker (perl -e 'print "A" x 50;'; echo "${TEST_STR}") | \ 300*053f45beSAndroid Build Coastguard Worker dd of="${TARGET}" bs=50 2>/dev/null 301*053f45beSAndroid Build Coastguard Worker if verify "${TARGET}"; then 302*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 303*053f45beSAndroid Build Coastguard Worker rc=1 304*053f45beSAndroid Build Coastguard Worker else 305*053f45beSAndroid Build Coastguard Worker echo "ok" 306*053f45beSAndroid Build Coastguard Worker fi 307*053f45beSAndroid Build Coastguard Worker test_rc 308*053f45beSAndroid Build Coastguard Worker} 309*053f45beSAndroid Build Coastguard Worker 310*053f45beSAndroid Build Coastguard Workercheck_failure() 311*053f45beSAndroid Build Coastguard Worker{ 312*053f45beSAndroid Build Coastguard Worker echo -n "Testing that $1 fails as expected..." 313*053f45beSAndroid Build Coastguard Worker reset_vals 314*053f45beSAndroid Build Coastguard Worker TEST_STR="$1" 315*053f45beSAndroid Build Coastguard Worker orig="$(cat $TARGET)" 316*053f45beSAndroid Build Coastguard Worker echo -n "$TEST_STR" > $TARGET 2> /dev/null 317*053f45beSAndroid Build Coastguard Worker 318*053f45beSAndroid Build Coastguard Worker # write should fail and $TARGET should retain its original value 319*053f45beSAndroid Build Coastguard Worker if [ $? = 0 ] || [ "$(cat $TARGET)" != "$orig" ]; then 320*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 321*053f45beSAndroid Build Coastguard Worker rc=1 322*053f45beSAndroid Build Coastguard Worker else 323*053f45beSAndroid Build Coastguard Worker echo "ok" 324*053f45beSAndroid Build Coastguard Worker fi 325*053f45beSAndroid Build Coastguard Worker test_rc 326*053f45beSAndroid Build Coastguard Worker} 327*053f45beSAndroid Build Coastguard Worker 328*053f45beSAndroid Build Coastguard Workerrun_wideint_tests() 329*053f45beSAndroid Build Coastguard Worker{ 330*053f45beSAndroid Build Coastguard Worker # sysctl conversion functions receive a boolean sign and ulong 331*053f45beSAndroid Build Coastguard Worker # magnitude; here we list the magnitudes we want to test (each of 332*053f45beSAndroid Build Coastguard Worker # which will be tested in both positive and negative forms). Since 333*053f45beSAndroid Build Coastguard Worker # none of these values fit in 32 bits, writing them to an int- or 334*053f45beSAndroid Build Coastguard Worker # uint-typed sysctl should fail. 335*053f45beSAndroid Build Coastguard Worker local magnitudes=( 336*053f45beSAndroid Build Coastguard Worker # common boundary-condition values (zero, +1, -1, INT_MIN, 337*053f45beSAndroid Build Coastguard Worker # and INT_MAX respectively) if truncated to lower 32 bits 338*053f45beSAndroid Build Coastguard Worker # (potential for being falsely deemed in range) 339*053f45beSAndroid Build Coastguard Worker 0x0000000100000000 340*053f45beSAndroid Build Coastguard Worker 0x0000000100000001 341*053f45beSAndroid Build Coastguard Worker 0x00000001ffffffff 342*053f45beSAndroid Build Coastguard Worker 0x0000000180000000 343*053f45beSAndroid Build Coastguard Worker 0x000000017fffffff 344*053f45beSAndroid Build Coastguard Worker 345*053f45beSAndroid Build Coastguard Worker # these look like negatives, but without a leading '-' are 346*053f45beSAndroid Build Coastguard Worker # actually large positives (should be rejected as above 347*053f45beSAndroid Build Coastguard Worker # despite being zero/+1/-1/INT_MIN/INT_MAX in the lower 32) 348*053f45beSAndroid Build Coastguard Worker 0xffffffff00000000 349*053f45beSAndroid Build Coastguard Worker 0xffffffff00000001 350*053f45beSAndroid Build Coastguard Worker 0xffffffffffffffff 351*053f45beSAndroid Build Coastguard Worker 0xffffffff80000000 352*053f45beSAndroid Build Coastguard Worker 0xffffffff7fffffff 353*053f45beSAndroid Build Coastguard Worker ) 354*053f45beSAndroid Build Coastguard Worker 355*053f45beSAndroid Build Coastguard Worker for sign in '' '-'; do 356*053f45beSAndroid Build Coastguard Worker for mag in "${magnitudes[@]}"; do 357*053f45beSAndroid Build Coastguard Worker check_failure "${sign}${mag}" 358*053f45beSAndroid Build Coastguard Worker done 359*053f45beSAndroid Build Coastguard Worker done 360*053f45beSAndroid Build Coastguard Worker} 361*053f45beSAndroid Build Coastguard Worker 362*053f45beSAndroid Build Coastguard Worker# Your test must accept digits 3 and 4 to use this 363*053f45beSAndroid Build Coastguard Workerrun_limit_digit() 364*053f45beSAndroid Build Coastguard Worker{ 365*053f45beSAndroid Build Coastguard Worker echo -n "Checking ignoring spaces up to PAGE_SIZE works on write ..." 366*053f45beSAndroid Build Coastguard Worker reset_vals 367*053f45beSAndroid Build Coastguard Worker 368*053f45beSAndroid Build Coastguard Worker LIMIT=$((MAX_DIGITS -1)) 369*053f45beSAndroid Build Coastguard Worker TEST_STR="3" 370*053f45beSAndroid Build Coastguard Worker (perl -e 'print " " x '$LIMIT';'; echo "${TEST_STR}") | \ 371*053f45beSAndroid Build Coastguard Worker dd of="${TARGET}" 2>/dev/null 372*053f45beSAndroid Build Coastguard Worker 373*053f45beSAndroid Build Coastguard Worker if ! verify "${TARGET}"; then 374*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 375*053f45beSAndroid Build Coastguard Worker rc=1 376*053f45beSAndroid Build Coastguard Worker else 377*053f45beSAndroid Build Coastguard Worker echo "ok" 378*053f45beSAndroid Build Coastguard Worker fi 379*053f45beSAndroid Build Coastguard Worker test_rc 380*053f45beSAndroid Build Coastguard Worker 381*053f45beSAndroid Build Coastguard Worker echo -n "Checking passing PAGE_SIZE of spaces fails on write ..." 382*053f45beSAndroid Build Coastguard Worker reset_vals 383*053f45beSAndroid Build Coastguard Worker 384*053f45beSAndroid Build Coastguard Worker LIMIT=$((MAX_DIGITS)) 385*053f45beSAndroid Build Coastguard Worker TEST_STR="4" 386*053f45beSAndroid Build Coastguard Worker (perl -e 'print " " x '$LIMIT';'; echo "${TEST_STR}") | \ 387*053f45beSAndroid Build Coastguard Worker dd of="${TARGET}" 2>/dev/null 388*053f45beSAndroid Build Coastguard Worker 389*053f45beSAndroid Build Coastguard Worker if verify "${TARGET}"; then 390*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 391*053f45beSAndroid Build Coastguard Worker rc=1 392*053f45beSAndroid Build Coastguard Worker else 393*053f45beSAndroid Build Coastguard Worker echo "ok" 394*053f45beSAndroid Build Coastguard Worker fi 395*053f45beSAndroid Build Coastguard Worker test_rc 396*053f45beSAndroid Build Coastguard Worker} 397*053f45beSAndroid Build Coastguard Worker 398*053f45beSAndroid Build Coastguard Worker# You are using an int 399*053f45beSAndroid Build Coastguard Workerrun_limit_digit_int() 400*053f45beSAndroid Build Coastguard Worker{ 401*053f45beSAndroid Build Coastguard Worker echo -n "Testing INT_MAX works ..." 402*053f45beSAndroid Build Coastguard Worker reset_vals 403*053f45beSAndroid Build Coastguard Worker TEST_STR="$INT_MAX" 404*053f45beSAndroid Build Coastguard Worker echo -n $TEST_STR > $TARGET 405*053f45beSAndroid Build Coastguard Worker 406*053f45beSAndroid Build Coastguard Worker if ! verify "${TARGET}"; then 407*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 408*053f45beSAndroid Build Coastguard Worker rc=1 409*053f45beSAndroid Build Coastguard Worker else 410*053f45beSAndroid Build Coastguard Worker echo "ok" 411*053f45beSAndroid Build Coastguard Worker fi 412*053f45beSAndroid Build Coastguard Worker test_rc 413*053f45beSAndroid Build Coastguard Worker 414*053f45beSAndroid Build Coastguard Worker echo -n "Testing INT_MAX + 1 will fail as expected..." 415*053f45beSAndroid Build Coastguard Worker reset_vals 416*053f45beSAndroid Build Coastguard Worker let TEST_STR=$INT_MAX+1 417*053f45beSAndroid Build Coastguard Worker echo -n $TEST_STR > $TARGET 2> /dev/null 418*053f45beSAndroid Build Coastguard Worker 419*053f45beSAndroid Build Coastguard Worker if verify "${TARGET}"; then 420*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 421*053f45beSAndroid Build Coastguard Worker rc=1 422*053f45beSAndroid Build Coastguard Worker else 423*053f45beSAndroid Build Coastguard Worker echo "ok" 424*053f45beSAndroid Build Coastguard Worker fi 425*053f45beSAndroid Build Coastguard Worker test_rc 426*053f45beSAndroid Build Coastguard Worker 427*053f45beSAndroid Build Coastguard Worker echo -n "Testing negative values will work as expected..." 428*053f45beSAndroid Build Coastguard Worker reset_vals 429*053f45beSAndroid Build Coastguard Worker TEST_STR="-3" 430*053f45beSAndroid Build Coastguard Worker echo -n $TEST_STR > $TARGET 2> /dev/null 431*053f45beSAndroid Build Coastguard Worker if ! verify "${TARGET}"; then 432*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 433*053f45beSAndroid Build Coastguard Worker rc=1 434*053f45beSAndroid Build Coastguard Worker else 435*053f45beSAndroid Build Coastguard Worker echo "ok" 436*053f45beSAndroid Build Coastguard Worker fi 437*053f45beSAndroid Build Coastguard Worker test_rc 438*053f45beSAndroid Build Coastguard Worker} 439*053f45beSAndroid Build Coastguard Worker 440*053f45beSAndroid Build Coastguard Worker# You used an int array 441*053f45beSAndroid Build Coastguard Workerrun_limit_digit_int_array() 442*053f45beSAndroid Build Coastguard Worker{ 443*053f45beSAndroid Build Coastguard Worker echo -n "Testing array works as expected ... " 444*053f45beSAndroid Build Coastguard Worker TEST_STR="4 3 2 1" 445*053f45beSAndroid Build Coastguard Worker echo -n $TEST_STR > $TARGET 446*053f45beSAndroid Build Coastguard Worker 447*053f45beSAndroid Build Coastguard Worker if ! verify_diff_w "${TARGET}"; then 448*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 449*053f45beSAndroid Build Coastguard Worker rc=1 450*053f45beSAndroid Build Coastguard Worker else 451*053f45beSAndroid Build Coastguard Worker echo "ok" 452*053f45beSAndroid Build Coastguard Worker fi 453*053f45beSAndroid Build Coastguard Worker test_rc 454*053f45beSAndroid Build Coastguard Worker 455*053f45beSAndroid Build Coastguard Worker echo -n "Testing skipping trailing array elements works ... " 456*053f45beSAndroid Build Coastguard Worker # Do not reset_vals, carry on the values from the last test. 457*053f45beSAndroid Build Coastguard Worker # If we only echo in two digits the last two are left intact 458*053f45beSAndroid Build Coastguard Worker TEST_STR="100 101" 459*053f45beSAndroid Build Coastguard Worker echo -n $TEST_STR > $TARGET 460*053f45beSAndroid Build Coastguard Worker # After we echo in, to help diff we need to set on TEST_STR what 461*053f45beSAndroid Build Coastguard Worker # we expect the result to be. 462*053f45beSAndroid Build Coastguard Worker TEST_STR="100 101 2 1" 463*053f45beSAndroid Build Coastguard Worker 464*053f45beSAndroid Build Coastguard Worker if ! verify_diff_w "${TARGET}"; then 465*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 466*053f45beSAndroid Build Coastguard Worker rc=1 467*053f45beSAndroid Build Coastguard Worker else 468*053f45beSAndroid Build Coastguard Worker echo "ok" 469*053f45beSAndroid Build Coastguard Worker fi 470*053f45beSAndroid Build Coastguard Worker test_rc 471*053f45beSAndroid Build Coastguard Worker 472*053f45beSAndroid Build Coastguard Worker echo -n "Testing PAGE_SIZE limit on array works ... " 473*053f45beSAndroid Build Coastguard Worker # Do not reset_vals, carry on the values from the last test. 474*053f45beSAndroid Build Coastguard Worker # Even if you use an int array, you are still restricted to 475*053f45beSAndroid Build Coastguard Worker # MAX_DIGITS, this is a known limitation. Test limit works. 476*053f45beSAndroid Build Coastguard Worker LIMIT=$((MAX_DIGITS -1)) 477*053f45beSAndroid Build Coastguard Worker TEST_STR="9" 478*053f45beSAndroid Build Coastguard Worker (perl -e 'print " " x '$LIMIT';'; echo "${TEST_STR}") | \ 479*053f45beSAndroid Build Coastguard Worker dd of="${TARGET}" 2>/dev/null 480*053f45beSAndroid Build Coastguard Worker 481*053f45beSAndroid Build Coastguard Worker TEST_STR="9 101 2 1" 482*053f45beSAndroid Build Coastguard Worker if ! verify_diff_w "${TARGET}"; then 483*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 484*053f45beSAndroid Build Coastguard Worker rc=1 485*053f45beSAndroid Build Coastguard Worker else 486*053f45beSAndroid Build Coastguard Worker echo "ok" 487*053f45beSAndroid Build Coastguard Worker fi 488*053f45beSAndroid Build Coastguard Worker test_rc 489*053f45beSAndroid Build Coastguard Worker 490*053f45beSAndroid Build Coastguard Worker echo -n "Testing exceeding PAGE_SIZE limit fails as expected ... " 491*053f45beSAndroid Build Coastguard Worker # Do not reset_vals, carry on the values from the last test. 492*053f45beSAndroid Build Coastguard Worker # Now go over limit. 493*053f45beSAndroid Build Coastguard Worker LIMIT=$((MAX_DIGITS)) 494*053f45beSAndroid Build Coastguard Worker TEST_STR="7" 495*053f45beSAndroid Build Coastguard Worker (perl -e 'print " " x '$LIMIT';'; echo "${TEST_STR}") | \ 496*053f45beSAndroid Build Coastguard Worker dd of="${TARGET}" 2>/dev/null 497*053f45beSAndroid Build Coastguard Worker 498*053f45beSAndroid Build Coastguard Worker TEST_STR="7 101 2 1" 499*053f45beSAndroid Build Coastguard Worker if verify_diff_w "${TARGET}"; then 500*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 501*053f45beSAndroid Build Coastguard Worker rc=1 502*053f45beSAndroid Build Coastguard Worker else 503*053f45beSAndroid Build Coastguard Worker echo "ok" 504*053f45beSAndroid Build Coastguard Worker fi 505*053f45beSAndroid Build Coastguard Worker test_rc 506*053f45beSAndroid Build Coastguard Worker} 507*053f45beSAndroid Build Coastguard Worker 508*053f45beSAndroid Build Coastguard Worker# You are using an unsigned int 509*053f45beSAndroid Build Coastguard Workerrun_limit_digit_uint() 510*053f45beSAndroid Build Coastguard Worker{ 511*053f45beSAndroid Build Coastguard Worker echo -n "Testing UINT_MAX works ..." 512*053f45beSAndroid Build Coastguard Worker reset_vals 513*053f45beSAndroid Build Coastguard Worker TEST_STR="$UINT_MAX" 514*053f45beSAndroid Build Coastguard Worker echo -n $TEST_STR > $TARGET 515*053f45beSAndroid Build Coastguard Worker 516*053f45beSAndroid Build Coastguard Worker if ! verify "${TARGET}"; then 517*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 518*053f45beSAndroid Build Coastguard Worker rc=1 519*053f45beSAndroid Build Coastguard Worker else 520*053f45beSAndroid Build Coastguard Worker echo "ok" 521*053f45beSAndroid Build Coastguard Worker fi 522*053f45beSAndroid Build Coastguard Worker test_rc 523*053f45beSAndroid Build Coastguard Worker 524*053f45beSAndroid Build Coastguard Worker echo -n "Testing UINT_MAX + 1 will fail as expected..." 525*053f45beSAndroid Build Coastguard Worker reset_vals 526*053f45beSAndroid Build Coastguard Worker TEST_STR=$(($UINT_MAX+1)) 527*053f45beSAndroid Build Coastguard Worker echo -n $TEST_STR > $TARGET 2> /dev/null 528*053f45beSAndroid Build Coastguard Worker 529*053f45beSAndroid Build Coastguard Worker if verify "${TARGET}"; then 530*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 531*053f45beSAndroid Build Coastguard Worker rc=1 532*053f45beSAndroid Build Coastguard Worker else 533*053f45beSAndroid Build Coastguard Worker echo "ok" 534*053f45beSAndroid Build Coastguard Worker fi 535*053f45beSAndroid Build Coastguard Worker test_rc 536*053f45beSAndroid Build Coastguard Worker 537*053f45beSAndroid Build Coastguard Worker echo -n "Testing negative values will not work as expected ..." 538*053f45beSAndroid Build Coastguard Worker reset_vals 539*053f45beSAndroid Build Coastguard Worker TEST_STR="-3" 540*053f45beSAndroid Build Coastguard Worker echo -n $TEST_STR > $TARGET 2> /dev/null 541*053f45beSAndroid Build Coastguard Worker 542*053f45beSAndroid Build Coastguard Worker if verify "${TARGET}"; then 543*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 544*053f45beSAndroid Build Coastguard Worker rc=1 545*053f45beSAndroid Build Coastguard Worker else 546*053f45beSAndroid Build Coastguard Worker echo "ok" 547*053f45beSAndroid Build Coastguard Worker fi 548*053f45beSAndroid Build Coastguard Worker test_rc 549*053f45beSAndroid Build Coastguard Worker} 550*053f45beSAndroid Build Coastguard Worker 551*053f45beSAndroid Build Coastguard Workerrun_stringtests() 552*053f45beSAndroid Build Coastguard Worker{ 553*053f45beSAndroid Build Coastguard Worker echo -n "Writing entire sysctl in short writes ... " 554*053f45beSAndroid Build Coastguard Worker set_orig 555*053f45beSAndroid Build Coastguard Worker dd if="${TEST_FILE}" of="${TARGET}" bs=1 2>/dev/null 556*053f45beSAndroid Build Coastguard Worker if ! verify "${TARGET}"; then 557*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 558*053f45beSAndroid Build Coastguard Worker rc=1 559*053f45beSAndroid Build Coastguard Worker else 560*053f45beSAndroid Build Coastguard Worker echo "ok" 561*053f45beSAndroid Build Coastguard Worker fi 562*053f45beSAndroid Build Coastguard Worker 563*053f45beSAndroid Build Coastguard Worker echo -n "Writing middle of sysctl after unsynchronized seek ... " 564*053f45beSAndroid Build Coastguard Worker set_test 565*053f45beSAndroid Build Coastguard Worker dd if="${TEST_FILE}" of="${TARGET}" bs=1 seek=1 2>/dev/null 566*053f45beSAndroid Build Coastguard Worker if verify "${TARGET}"; then 567*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 568*053f45beSAndroid Build Coastguard Worker rc=1 569*053f45beSAndroid Build Coastguard Worker else 570*053f45beSAndroid Build Coastguard Worker echo "ok" 571*053f45beSAndroid Build Coastguard Worker fi 572*053f45beSAndroid Build Coastguard Worker 573*053f45beSAndroid Build Coastguard Worker echo -n "Checking sysctl maxlen is at least $MAXLEN ... " 574*053f45beSAndroid Build Coastguard Worker set_orig 575*053f45beSAndroid Build Coastguard Worker perl -e 'print "A" x ('"${MAXLEN}"'-2), "B";' | \ 576*053f45beSAndroid Build Coastguard Worker dd of="${TARGET}" bs="${MAXLEN}" 2>/dev/null 577*053f45beSAndroid Build Coastguard Worker if ! grep -q B "${TARGET}"; then 578*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 579*053f45beSAndroid Build Coastguard Worker rc=1 580*053f45beSAndroid Build Coastguard Worker else 581*053f45beSAndroid Build Coastguard Worker echo "ok" 582*053f45beSAndroid Build Coastguard Worker fi 583*053f45beSAndroid Build Coastguard Worker 584*053f45beSAndroid Build Coastguard Worker echo -n "Checking sysctl keeps original string on overflow append ... " 585*053f45beSAndroid Build Coastguard Worker set_orig 586*053f45beSAndroid Build Coastguard Worker perl -e 'print "A" x ('"${MAXLEN}"'-1), "B";' | \ 587*053f45beSAndroid Build Coastguard Worker dd of="${TARGET}" bs=$(( MAXLEN - 1 )) 2>/dev/null 588*053f45beSAndroid Build Coastguard Worker if grep -q B "${TARGET}"; then 589*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 590*053f45beSAndroid Build Coastguard Worker rc=1 591*053f45beSAndroid Build Coastguard Worker else 592*053f45beSAndroid Build Coastguard Worker echo "ok" 593*053f45beSAndroid Build Coastguard Worker fi 594*053f45beSAndroid Build Coastguard Worker 595*053f45beSAndroid Build Coastguard Worker echo -n "Checking sysctl stays NULL terminated on write ... " 596*053f45beSAndroid Build Coastguard Worker set_orig 597*053f45beSAndroid Build Coastguard Worker perl -e 'print "A" x ('"${MAXLEN}"'-1), "B";' | \ 598*053f45beSAndroid Build Coastguard Worker dd of="${TARGET}" bs="${MAXLEN}" 2>/dev/null 599*053f45beSAndroid Build Coastguard Worker if grep -q B "${TARGET}"; then 600*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 601*053f45beSAndroid Build Coastguard Worker rc=1 602*053f45beSAndroid Build Coastguard Worker else 603*053f45beSAndroid Build Coastguard Worker echo "ok" 604*053f45beSAndroid Build Coastguard Worker fi 605*053f45beSAndroid Build Coastguard Worker 606*053f45beSAndroid Build Coastguard Worker echo -n "Checking sysctl stays NULL terminated on overwrite ... " 607*053f45beSAndroid Build Coastguard Worker set_orig 608*053f45beSAndroid Build Coastguard Worker perl -e 'print "A" x ('"${MAXLEN}"'-1), "BB";' | \ 609*053f45beSAndroid Build Coastguard Worker dd of="${TARGET}" bs=$(( $MAXLEN + 1 )) 2>/dev/null 610*053f45beSAndroid Build Coastguard Worker if grep -q B "${TARGET}"; then 611*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 612*053f45beSAndroid Build Coastguard Worker rc=1 613*053f45beSAndroid Build Coastguard Worker else 614*053f45beSAndroid Build Coastguard Worker echo "ok" 615*053f45beSAndroid Build Coastguard Worker fi 616*053f45beSAndroid Build Coastguard Worker 617*053f45beSAndroid Build Coastguard Worker test_rc 618*053f45beSAndroid Build Coastguard Worker} 619*053f45beSAndroid Build Coastguard Worker 620*053f45beSAndroid Build Coastguard Workertarget_exists() 621*053f45beSAndroid Build Coastguard Worker{ 622*053f45beSAndroid Build Coastguard Worker TARGET="${SYSCTL}/$1" 623*053f45beSAndroid Build Coastguard Worker TEST_ID="$2" 624*053f45beSAndroid Build Coastguard Worker 625*053f45beSAndroid Build Coastguard Worker if [ ! -f ${TARGET} ] ; then 626*053f45beSAndroid Build Coastguard Worker echo "Target for test $TEST_ID: $TARGET not exist, skipping test ..." 627*053f45beSAndroid Build Coastguard Worker return 0 628*053f45beSAndroid Build Coastguard Worker fi 629*053f45beSAndroid Build Coastguard Worker return 1 630*053f45beSAndroid Build Coastguard Worker} 631*053f45beSAndroid Build Coastguard Worker 632*053f45beSAndroid Build Coastguard Workerrun_bitmaptest() { 633*053f45beSAndroid Build Coastguard Worker # Total length of bitmaps string to use, a bit under 634*053f45beSAndroid Build Coastguard Worker # the maximum input size of the test node 635*053f45beSAndroid Build Coastguard Worker LENGTH=$((RANDOM % 65000)) 636*053f45beSAndroid Build Coastguard Worker 637*053f45beSAndroid Build Coastguard Worker # First bit to set 638*053f45beSAndroid Build Coastguard Worker BIT=$((RANDOM % 1024)) 639*053f45beSAndroid Build Coastguard Worker 640*053f45beSAndroid Build Coastguard Worker # String containing our list of bits to set 641*053f45beSAndroid Build Coastguard Worker TEST_STR=$BIT 642*053f45beSAndroid Build Coastguard Worker 643*053f45beSAndroid Build Coastguard Worker # build up the string 644*053f45beSAndroid Build Coastguard Worker while [ "${#TEST_STR}" -le "$LENGTH" ]; do 645*053f45beSAndroid Build Coastguard Worker # Make sure next entry is discontiguous, 646*053f45beSAndroid Build Coastguard Worker # skip ahead at least 2 647*053f45beSAndroid Build Coastguard Worker BIT=$((BIT + $((2 + RANDOM % 10)))) 648*053f45beSAndroid Build Coastguard Worker 649*053f45beSAndroid Build Coastguard Worker # Add new bit to the list 650*053f45beSAndroid Build Coastguard Worker TEST_STR="${TEST_STR},${BIT}" 651*053f45beSAndroid Build Coastguard Worker 652*053f45beSAndroid Build Coastguard Worker # Randomly make it a range 653*053f45beSAndroid Build Coastguard Worker if [ "$((RANDOM % 2))" -eq "1" ]; then 654*053f45beSAndroid Build Coastguard Worker RANGE_END=$((BIT + $((1 + RANDOM % 10)))) 655*053f45beSAndroid Build Coastguard Worker TEST_STR="${TEST_STR}-${RANGE_END}" 656*053f45beSAndroid Build Coastguard Worker BIT=$RANGE_END 657*053f45beSAndroid Build Coastguard Worker fi 658*053f45beSAndroid Build Coastguard Worker done 659*053f45beSAndroid Build Coastguard Worker 660*053f45beSAndroid Build Coastguard Worker echo -n "Checking bitmap handler... " 661*053f45beSAndroid Build Coastguard Worker TEST_FILE=$(mktemp) 662*053f45beSAndroid Build Coastguard Worker echo -n "$TEST_STR" > $TEST_FILE 663*053f45beSAndroid Build Coastguard Worker 664*053f45beSAndroid Build Coastguard Worker cat $TEST_FILE > $TARGET 2> /dev/null 665*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 666*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 667*053f45beSAndroid Build Coastguard Worker rc=1 668*053f45beSAndroid Build Coastguard Worker test_rc 669*053f45beSAndroid Build Coastguard Worker fi 670*053f45beSAndroid Build Coastguard Worker 671*053f45beSAndroid Build Coastguard Worker if ! verify_diff_proc_file "$TARGET" "$TEST_FILE"; then 672*053f45beSAndroid Build Coastguard Worker echo "FAIL" >&2 673*053f45beSAndroid Build Coastguard Worker rc=1 674*053f45beSAndroid Build Coastguard Worker else 675*053f45beSAndroid Build Coastguard Worker echo "ok" 676*053f45beSAndroid Build Coastguard Worker rc=0 677*053f45beSAndroid Build Coastguard Worker fi 678*053f45beSAndroid Build Coastguard Worker test_rc 679*053f45beSAndroid Build Coastguard Worker} 680*053f45beSAndroid Build Coastguard Worker 681*053f45beSAndroid Build Coastguard Workersysctl_test_0001() 682*053f45beSAndroid Build Coastguard Worker{ 683*053f45beSAndroid Build Coastguard Worker TARGET="${SYSCTL}/$(get_test_target 0001)" 684*053f45beSAndroid Build Coastguard Worker reset_vals 685*053f45beSAndroid Build Coastguard Worker ORIG=$(cat "${TARGET}") 686*053f45beSAndroid Build Coastguard Worker TEST_STR=$(( $ORIG + 1 )) 687*053f45beSAndroid Build Coastguard Worker 688*053f45beSAndroid Build Coastguard Worker run_numerictests 689*053f45beSAndroid Build Coastguard Worker run_wideint_tests 690*053f45beSAndroid Build Coastguard Worker run_limit_digit 691*053f45beSAndroid Build Coastguard Worker} 692*053f45beSAndroid Build Coastguard Worker 693*053f45beSAndroid Build Coastguard Workersysctl_test_0002() 694*053f45beSAndroid Build Coastguard Worker{ 695*053f45beSAndroid Build Coastguard Worker TARGET="${SYSCTL}/$(get_test_target 0002)" 696*053f45beSAndroid Build Coastguard Worker reset_vals 697*053f45beSAndroid Build Coastguard Worker ORIG=$(cat "${TARGET}") 698*053f45beSAndroid Build Coastguard Worker TEST_STR="Testing sysctl" 699*053f45beSAndroid Build Coastguard Worker # Only string sysctls support seeking/appending. 700*053f45beSAndroid Build Coastguard Worker MAXLEN=65 701*053f45beSAndroid Build Coastguard Worker 702*053f45beSAndroid Build Coastguard Worker run_numerictests 703*053f45beSAndroid Build Coastguard Worker run_stringtests 704*053f45beSAndroid Build Coastguard Worker} 705*053f45beSAndroid Build Coastguard Worker 706*053f45beSAndroid Build Coastguard Workersysctl_test_0003() 707*053f45beSAndroid Build Coastguard Worker{ 708*053f45beSAndroid Build Coastguard Worker TARGET="${SYSCTL}/$(get_test_target 0003)" 709*053f45beSAndroid Build Coastguard Worker reset_vals 710*053f45beSAndroid Build Coastguard Worker ORIG=$(cat "${TARGET}") 711*053f45beSAndroid Build Coastguard Worker TEST_STR=$(( $ORIG + 1 )) 712*053f45beSAndroid Build Coastguard Worker 713*053f45beSAndroid Build Coastguard Worker run_numerictests 714*053f45beSAndroid Build Coastguard Worker run_wideint_tests 715*053f45beSAndroid Build Coastguard Worker run_limit_digit 716*053f45beSAndroid Build Coastguard Worker run_limit_digit_int 717*053f45beSAndroid Build Coastguard Worker} 718*053f45beSAndroid Build Coastguard Worker 719*053f45beSAndroid Build Coastguard Workersysctl_test_0004() 720*053f45beSAndroid Build Coastguard Worker{ 721*053f45beSAndroid Build Coastguard Worker TARGET="${SYSCTL}/$(get_test_target 0004)" 722*053f45beSAndroid Build Coastguard Worker reset_vals 723*053f45beSAndroid Build Coastguard Worker ORIG=$(cat "${TARGET}") 724*053f45beSAndroid Build Coastguard Worker TEST_STR=$(( $ORIG + 1 )) 725*053f45beSAndroid Build Coastguard Worker 726*053f45beSAndroid Build Coastguard Worker run_numerictests 727*053f45beSAndroid Build Coastguard Worker run_wideint_tests 728*053f45beSAndroid Build Coastguard Worker run_limit_digit 729*053f45beSAndroid Build Coastguard Worker run_limit_digit_uint 730*053f45beSAndroid Build Coastguard Worker} 731*053f45beSAndroid Build Coastguard Worker 732*053f45beSAndroid Build Coastguard Workersysctl_test_0005() 733*053f45beSAndroid Build Coastguard Worker{ 734*053f45beSAndroid Build Coastguard Worker TARGET="${SYSCTL}/$(get_test_target 0005)" 735*053f45beSAndroid Build Coastguard Worker reset_vals 736*053f45beSAndroid Build Coastguard Worker ORIG=$(cat "${TARGET}") 737*053f45beSAndroid Build Coastguard Worker 738*053f45beSAndroid Build Coastguard Worker run_limit_digit_int_array 739*053f45beSAndroid Build Coastguard Worker} 740*053f45beSAndroid Build Coastguard Worker 741*053f45beSAndroid Build Coastguard Workersysctl_test_0006() 742*053f45beSAndroid Build Coastguard Worker{ 743*053f45beSAndroid Build Coastguard Worker TARGET="${SYSCTL}/bitmap_0001" 744*053f45beSAndroid Build Coastguard Worker reset_vals 745*053f45beSAndroid Build Coastguard Worker ORIG="" 746*053f45beSAndroid Build Coastguard Worker run_bitmaptest 747*053f45beSAndroid Build Coastguard Worker} 748*053f45beSAndroid Build Coastguard Worker 749*053f45beSAndroid Build Coastguard Workersysctl_test_0007() 750*053f45beSAndroid Build Coastguard Worker{ 751*053f45beSAndroid Build Coastguard Worker TARGET="${SYSCTL}/boot_int" 752*053f45beSAndroid Build Coastguard Worker if [ ! -f $TARGET ]; then 753*053f45beSAndroid Build Coastguard Worker echo "Skipping test for $TARGET as it is not present ..." 754*053f45beSAndroid Build Coastguard Worker return $ksft_skip 755*053f45beSAndroid Build Coastguard Worker fi 756*053f45beSAndroid Build Coastguard Worker 757*053f45beSAndroid Build Coastguard Worker if [ -d $DIR ]; then 758*053f45beSAndroid Build Coastguard Worker echo "Boot param test only possible sysctl_test is built-in, not module:" 759*053f45beSAndroid Build Coastguard Worker cat $TEST_DIR/config >&2 760*053f45beSAndroid Build Coastguard Worker return $ksft_skip 761*053f45beSAndroid Build Coastguard Worker fi 762*053f45beSAndroid Build Coastguard Worker 763*053f45beSAndroid Build Coastguard Worker echo -n "Testing if $TARGET is set to 1 ..." 764*053f45beSAndroid Build Coastguard Worker ORIG=$(cat "${TARGET}") 765*053f45beSAndroid Build Coastguard Worker 766*053f45beSAndroid Build Coastguard Worker if [ x$ORIG = "x1" ]; then 767*053f45beSAndroid Build Coastguard Worker echo "ok" 768*053f45beSAndroid Build Coastguard Worker return 0 769*053f45beSAndroid Build Coastguard Worker fi 770*053f45beSAndroid Build Coastguard Worker echo "FAIL" 771*053f45beSAndroid Build Coastguard Worker echo "Checking if /proc/cmdline contains setting of the expected parameter ..." 772*053f45beSAndroid Build Coastguard Worker if [ ! -f /proc/cmdline ]; then 773*053f45beSAndroid Build Coastguard Worker echo "/proc/cmdline does not exist, test inconclusive" 774*053f45beSAndroid Build Coastguard Worker return 0 775*053f45beSAndroid Build Coastguard Worker fi 776*053f45beSAndroid Build Coastguard Worker 777*053f45beSAndroid Build Coastguard Worker FOUND=$(grep -c "sysctl[./]debug[./]test_sysctl[./]boot_int=1" /proc/cmdline) 778*053f45beSAndroid Build Coastguard Worker if [ $FOUND = "1" ]; then 779*053f45beSAndroid Build Coastguard Worker echo "Kernel param found but $TARGET is not 1, TEST FAILED" 780*053f45beSAndroid Build Coastguard Worker rc=1 781*053f45beSAndroid Build Coastguard Worker test_rc 782*053f45beSAndroid Build Coastguard Worker fi 783*053f45beSAndroid Build Coastguard Worker 784*053f45beSAndroid Build Coastguard Worker echo "Skipping test, expected kernel parameter missing." 785*053f45beSAndroid Build Coastguard Worker echo "To perform this test, make sure kernel is booted with parameter: sysctl.debug.test_sysctl.boot_int=1" 786*053f45beSAndroid Build Coastguard Worker return $ksft_skip 787*053f45beSAndroid Build Coastguard Worker} 788*053f45beSAndroid Build Coastguard Worker 789*053f45beSAndroid Build Coastguard Workersysctl_test_0008() 790*053f45beSAndroid Build Coastguard Worker{ 791*053f45beSAndroid Build Coastguard Worker TARGET="${SYSCTL}/match_int" 792*053f45beSAndroid Build Coastguard Worker if [ ! -f $TARGET ]; then 793*053f45beSAndroid Build Coastguard Worker echo "Skipping test for $TARGET as it is not present ..." 794*053f45beSAndroid Build Coastguard Worker return $ksft_skip 795*053f45beSAndroid Build Coastguard Worker fi 796*053f45beSAndroid Build Coastguard Worker 797*053f45beSAndroid Build Coastguard Worker echo -n "Testing if $TARGET is matched in kernel" 798*053f45beSAndroid Build Coastguard Worker ORIG_VALUE=$(cat "${TARGET}") 799*053f45beSAndroid Build Coastguard Worker 800*053f45beSAndroid Build Coastguard Worker if [ $ORIG_VALUE -ne 1 ]; then 801*053f45beSAndroid Build Coastguard Worker echo "TEST FAILED" 802*053f45beSAndroid Build Coastguard Worker rc=1 803*053f45beSAndroid Build Coastguard Worker test_rc 804*053f45beSAndroid Build Coastguard Worker fi 805*053f45beSAndroid Build Coastguard Worker 806*053f45beSAndroid Build Coastguard Worker echo "ok" 807*053f45beSAndroid Build Coastguard Worker return 0 808*053f45beSAndroid Build Coastguard Worker} 809*053f45beSAndroid Build Coastguard Worker 810*053f45beSAndroid Build Coastguard Workerlist_tests() 811*053f45beSAndroid Build Coastguard Worker{ 812*053f45beSAndroid Build Coastguard Worker echo "Test ID list:" 813*053f45beSAndroid Build Coastguard Worker echo 814*053f45beSAndroid Build Coastguard Worker echo "TEST_ID x NUM_TEST" 815*053f45beSAndroid Build Coastguard Worker echo "TEST_ID: Test ID" 816*053f45beSAndroid Build Coastguard Worker echo "NUM_TESTS: Number of recommended times to run the test" 817*053f45beSAndroid Build Coastguard Worker echo 818*053f45beSAndroid Build Coastguard Worker echo "0001 x $(get_test_count 0001) - tests proc_dointvec_minmax()" 819*053f45beSAndroid Build Coastguard Worker echo "0002 x $(get_test_count 0002) - tests proc_dostring()" 820*053f45beSAndroid Build Coastguard Worker echo "0003 x $(get_test_count 0003) - tests proc_dointvec()" 821*053f45beSAndroid Build Coastguard Worker echo "0004 x $(get_test_count 0004) - tests proc_douintvec()" 822*053f45beSAndroid Build Coastguard Worker echo "0005 x $(get_test_count 0005) - tests proc_douintvec() array" 823*053f45beSAndroid Build Coastguard Worker echo "0006 x $(get_test_count 0006) - tests proc_do_large_bitmap()" 824*053f45beSAndroid Build Coastguard Worker echo "0007 x $(get_test_count 0007) - tests setting sysctl from kernel boot param" 825*053f45beSAndroid Build Coastguard Worker echo "0008 x $(get_test_count 0008) - tests sysctl macro values match" 826*053f45beSAndroid Build Coastguard Worker} 827*053f45beSAndroid Build Coastguard Worker 828*053f45beSAndroid Build Coastguard Workerusage() 829*053f45beSAndroid Build Coastguard Worker{ 830*053f45beSAndroid Build Coastguard Worker NUM_TESTS=$(grep -o ' ' <<<"$ALL_TESTS" | grep -c .) 831*053f45beSAndroid Build Coastguard Worker let NUM_TESTS=$NUM_TESTS+1 832*053f45beSAndroid Build Coastguard Worker MAX_TEST=$(printf "%04d\n" $NUM_TESTS) 833*053f45beSAndroid Build Coastguard Worker echo "Usage: $0 [ -t <4-number-digit> ] | [ -w <4-number-digit> ] |" 834*053f45beSAndroid Build Coastguard Worker echo " [ -s <4-number-digit> ] | [ -c <4-number-digit> <test- count>" 835*053f45beSAndroid Build Coastguard Worker echo " [ all ] [ -h | --help ] [ -l ]" 836*053f45beSAndroid Build Coastguard Worker echo "" 837*053f45beSAndroid Build Coastguard Worker echo "Valid tests: 0001-$MAX_TEST" 838*053f45beSAndroid Build Coastguard Worker echo "" 839*053f45beSAndroid Build Coastguard Worker echo " all Runs all tests (default)" 840*053f45beSAndroid Build Coastguard Worker echo " -t Run test ID the number amount of times is recommended" 841*053f45beSAndroid Build Coastguard Worker echo " -w Watch test ID run until it runs into an error" 842*053f45beSAndroid Build Coastguard Worker echo " -c Run test ID once" 843*053f45beSAndroid Build Coastguard Worker echo " -s Run test ID x test-count number of times" 844*053f45beSAndroid Build Coastguard Worker echo " -l List all test ID list" 845*053f45beSAndroid Build Coastguard Worker echo " -h|--help Help" 846*053f45beSAndroid Build Coastguard Worker echo 847*053f45beSAndroid Build Coastguard Worker echo "If an error every occurs execution will immediately terminate." 848*053f45beSAndroid Build Coastguard Worker echo "If you are adding a new test try using -w <test-ID> first to" 849*053f45beSAndroid Build Coastguard Worker echo "make sure the test passes a series of tests." 850*053f45beSAndroid Build Coastguard Worker echo 851*053f45beSAndroid Build Coastguard Worker echo Example uses: 852*053f45beSAndroid Build Coastguard Worker echo 853*053f45beSAndroid Build Coastguard Worker echo "$TEST_NAME.sh -- executes all tests" 854*053f45beSAndroid Build Coastguard Worker echo "$TEST_NAME.sh -t 0002 -- Executes test ID 0002 number of times is recomended" 855*053f45beSAndroid Build Coastguard Worker echo "$TEST_NAME.sh -w 0002 -- Watch test ID 0002 run until an error occurs" 856*053f45beSAndroid Build Coastguard Worker echo "$TEST_NAME.sh -s 0002 -- Run test ID 0002 once" 857*053f45beSAndroid Build Coastguard Worker echo "$TEST_NAME.sh -c 0002 3 -- Run test ID 0002 three times" 858*053f45beSAndroid Build Coastguard Worker echo 859*053f45beSAndroid Build Coastguard Worker list_tests 860*053f45beSAndroid Build Coastguard Worker exit 1 861*053f45beSAndroid Build Coastguard Worker} 862*053f45beSAndroid Build Coastguard Worker 863*053f45beSAndroid Build Coastguard Workerfunction test_num() 864*053f45beSAndroid Build Coastguard Worker{ 865*053f45beSAndroid Build Coastguard Worker re='^[0-9]+$' 866*053f45beSAndroid Build Coastguard Worker if ! [[ $1 =~ $re ]]; then 867*053f45beSAndroid Build Coastguard Worker usage 868*053f45beSAndroid Build Coastguard Worker fi 869*053f45beSAndroid Build Coastguard Worker} 870*053f45beSAndroid Build Coastguard Worker 871*053f45beSAndroid Build Coastguard Workerfunction get_test_count() 872*053f45beSAndroid Build Coastguard Worker{ 873*053f45beSAndroid Build Coastguard Worker test_num $1 874*053f45beSAndroid Build Coastguard Worker TEST_DATA=$(echo $ALL_TESTS | awk '{print $'$1'}') 875*053f45beSAndroid Build Coastguard Worker echo ${TEST_DATA} | awk -F":" '{print $2}' 876*053f45beSAndroid Build Coastguard Worker} 877*053f45beSAndroid Build Coastguard Worker 878*053f45beSAndroid Build Coastguard Workerfunction get_test_enabled() 879*053f45beSAndroid Build Coastguard Worker{ 880*053f45beSAndroid Build Coastguard Worker test_num $1 881*053f45beSAndroid Build Coastguard Worker TEST_DATA=$(echo $ALL_TESTS | awk '{print $'$1'}') 882*053f45beSAndroid Build Coastguard Worker echo ${TEST_DATA} | awk -F":" '{print $3}' 883*053f45beSAndroid Build Coastguard Worker} 884*053f45beSAndroid Build Coastguard Worker 885*053f45beSAndroid Build Coastguard Workerfunction get_test_target() 886*053f45beSAndroid Build Coastguard Worker{ 887*053f45beSAndroid Build Coastguard Worker test_num $1 888*053f45beSAndroid Build Coastguard Worker TEST_DATA=$(echo $ALL_TESTS | awk '{print $'$1'}') 889*053f45beSAndroid Build Coastguard Worker echo ${TEST_DATA} | awk -F":" '{print $4}' 890*053f45beSAndroid Build Coastguard Worker} 891*053f45beSAndroid Build Coastguard Worker 892*053f45beSAndroid Build Coastguard Workerfunction run_all_tests() 893*053f45beSAndroid Build Coastguard Worker{ 894*053f45beSAndroid Build Coastguard Worker for i in $ALL_TESTS ; do 895*053f45beSAndroid Build Coastguard Worker TEST_ID=${i%:*:*:*} 896*053f45beSAndroid Build Coastguard Worker ENABLED=$(get_test_enabled $TEST_ID) 897*053f45beSAndroid Build Coastguard Worker TEST_COUNT=$(get_test_count $TEST_ID) 898*053f45beSAndroid Build Coastguard Worker TEST_TARGET=$(get_test_target $TEST_ID) 899*053f45beSAndroid Build Coastguard Worker if target_exists $TEST_TARGET $TEST_ID; then 900*053f45beSAndroid Build Coastguard Worker continue 901*053f45beSAndroid Build Coastguard Worker fi 902*053f45beSAndroid Build Coastguard Worker if [[ $ENABLED -eq "1" ]]; then 903*053f45beSAndroid Build Coastguard Worker test_case $TEST_ID $TEST_COUNT $TEST_TARGET 904*053f45beSAndroid Build Coastguard Worker fi 905*053f45beSAndroid Build Coastguard Worker done 906*053f45beSAndroid Build Coastguard Worker} 907*053f45beSAndroid Build Coastguard Worker 908*053f45beSAndroid Build Coastguard Workerfunction watch_log() 909*053f45beSAndroid Build Coastguard Worker{ 910*053f45beSAndroid Build Coastguard Worker if [ $# -ne 3 ]; then 911*053f45beSAndroid Build Coastguard Worker clear 912*053f45beSAndroid Build Coastguard Worker fi 913*053f45beSAndroid Build Coastguard Worker date 914*053f45beSAndroid Build Coastguard Worker echo "Running test: $2 - run #$1" 915*053f45beSAndroid Build Coastguard Worker} 916*053f45beSAndroid Build Coastguard Worker 917*053f45beSAndroid Build Coastguard Workerfunction watch_case() 918*053f45beSAndroid Build Coastguard Worker{ 919*053f45beSAndroid Build Coastguard Worker i=0 920*053f45beSAndroid Build Coastguard Worker while [ 1 ]; do 921*053f45beSAndroid Build Coastguard Worker 922*053f45beSAndroid Build Coastguard Worker if [ $# -eq 1 ]; then 923*053f45beSAndroid Build Coastguard Worker test_num $1 924*053f45beSAndroid Build Coastguard Worker watch_log $i ${TEST_NAME}_test_$1 925*053f45beSAndroid Build Coastguard Worker ${TEST_NAME}_test_$1 926*053f45beSAndroid Build Coastguard Worker else 927*053f45beSAndroid Build Coastguard Worker watch_log $i all 928*053f45beSAndroid Build Coastguard Worker run_all_tests 929*053f45beSAndroid Build Coastguard Worker fi 930*053f45beSAndroid Build Coastguard Worker let i=$i+1 931*053f45beSAndroid Build Coastguard Worker done 932*053f45beSAndroid Build Coastguard Worker} 933*053f45beSAndroid Build Coastguard Worker 934*053f45beSAndroid Build Coastguard Workerfunction test_case() 935*053f45beSAndroid Build Coastguard Worker{ 936*053f45beSAndroid Build Coastguard Worker NUM_TESTS=$2 937*053f45beSAndroid Build Coastguard Worker 938*053f45beSAndroid Build Coastguard Worker i=0 939*053f45beSAndroid Build Coastguard Worker 940*053f45beSAndroid Build Coastguard Worker if target_exists $3 $1; then 941*053f45beSAndroid Build Coastguard Worker continue 942*053f45beSAndroid Build Coastguard Worker fi 943*053f45beSAndroid Build Coastguard Worker 944*053f45beSAndroid Build Coastguard Worker while [ $i -lt $NUM_TESTS ]; do 945*053f45beSAndroid Build Coastguard Worker test_num $1 946*053f45beSAndroid Build Coastguard Worker watch_log $i ${TEST_NAME}_test_$1 noclear 947*053f45beSAndroid Build Coastguard Worker RUN_TEST=${TEST_NAME}_test_$1 948*053f45beSAndroid Build Coastguard Worker $RUN_TEST 949*053f45beSAndroid Build Coastguard Worker let i=$i+1 950*053f45beSAndroid Build Coastguard Worker done 951*053f45beSAndroid Build Coastguard Worker} 952*053f45beSAndroid Build Coastguard Worker 953*053f45beSAndroid Build Coastguard Workerfunction parse_args() 954*053f45beSAndroid Build Coastguard Worker{ 955*053f45beSAndroid Build Coastguard Worker if [ $# -eq 0 ]; then 956*053f45beSAndroid Build Coastguard Worker run_all_tests 957*053f45beSAndroid Build Coastguard Worker else 958*053f45beSAndroid Build Coastguard Worker if [[ "$1" = "all" ]]; then 959*053f45beSAndroid Build Coastguard Worker run_all_tests 960*053f45beSAndroid Build Coastguard Worker elif [[ "$1" = "-w" ]]; then 961*053f45beSAndroid Build Coastguard Worker shift 962*053f45beSAndroid Build Coastguard Worker watch_case $@ 963*053f45beSAndroid Build Coastguard Worker elif [[ "$1" = "-t" ]]; then 964*053f45beSAndroid Build Coastguard Worker shift 965*053f45beSAndroid Build Coastguard Worker test_num $1 966*053f45beSAndroid Build Coastguard Worker test_case $1 $(get_test_count $1) $(get_test_target $1) 967*053f45beSAndroid Build Coastguard Worker elif [[ "$1" = "-c" ]]; then 968*053f45beSAndroid Build Coastguard Worker shift 969*053f45beSAndroid Build Coastguard Worker test_num $1 970*053f45beSAndroid Build Coastguard Worker test_num $2 971*053f45beSAndroid Build Coastguard Worker test_case $1 $2 $(get_test_target $1) 972*053f45beSAndroid Build Coastguard Worker elif [[ "$1" = "-s" ]]; then 973*053f45beSAndroid Build Coastguard Worker shift 974*053f45beSAndroid Build Coastguard Worker test_case $1 1 $(get_test_target $1) 975*053f45beSAndroid Build Coastguard Worker elif [[ "$1" = "-l" ]]; then 976*053f45beSAndroid Build Coastguard Worker list_tests 977*053f45beSAndroid Build Coastguard Worker elif [[ "$1" = "-h" || "$1" = "--help" ]]; then 978*053f45beSAndroid Build Coastguard Worker usage 979*053f45beSAndroid Build Coastguard Worker else 980*053f45beSAndroid Build Coastguard Worker usage 981*053f45beSAndroid Build Coastguard Worker fi 982*053f45beSAndroid Build Coastguard Worker fi 983*053f45beSAndroid Build Coastguard Worker} 984*053f45beSAndroid Build Coastguard Worker 985*053f45beSAndroid Build Coastguard Workertest_reqs 986*053f45beSAndroid Build Coastguard Workerallow_user_defaults 987*053f45beSAndroid Build Coastguard Workercheck_production_sysctl_writes_strict 988*053f45beSAndroid Build Coastguard Workerload_req_mod 989*053f45beSAndroid Build Coastguard Worker 990*053f45beSAndroid Build Coastguard Workertrap "test_finish" EXIT 991*053f45beSAndroid Build Coastguard Worker 992*053f45beSAndroid Build Coastguard Workerparse_args $@ 993*053f45beSAndroid Build Coastguard Worker 994*053f45beSAndroid Build Coastguard Workerexit 0 995