1*fb1b10abSAndroid Build Coastguard Worker#!/bin/sh 2*fb1b10abSAndroid Build Coastguard Worker## 3*fb1b10abSAndroid Build Coastguard Worker## Copyright (c) 2014 The WebM project authors. All Rights Reserved. 4*fb1b10abSAndroid Build Coastguard Worker## 5*fb1b10abSAndroid Build Coastguard Worker## Use of this source code is governed by a BSD-style license 6*fb1b10abSAndroid Build Coastguard Worker## that can be found in the LICENSE file in the root of the source 7*fb1b10abSAndroid Build Coastguard Worker## tree. An additional intellectual property rights grant can be found 8*fb1b10abSAndroid Build Coastguard Worker## in the file PATENTS. All contributing project authors may 9*fb1b10abSAndroid Build Coastguard Worker## be found in the AUTHORS file in the root of the source tree. 10*fb1b10abSAndroid Build Coastguard Worker## 11*fb1b10abSAndroid Build Coastguard Worker## This file contains shell code shared by test scripts for libvpx tools. 12*fb1b10abSAndroid Build Coastguard Worker 13*fb1b10abSAndroid Build Coastguard Worker# Use $VPX_TEST_TOOLS_COMMON_SH as a pseudo include guard. 14*fb1b10abSAndroid Build Coastguard Workerif [ -z "${VPX_TEST_TOOLS_COMMON_SH}" ]; then 15*fb1b10abSAndroid Build Coastguard WorkerVPX_TEST_TOOLS_COMMON_SH=included 16*fb1b10abSAndroid Build Coastguard Worker 17*fb1b10abSAndroid Build Coastguard Workerset -e 18*fb1b10abSAndroid Build Coastguard Workerdevnull='> /dev/null 2>&1' 19*fb1b10abSAndroid Build Coastguard WorkerVPX_TEST_PREFIX="" 20*fb1b10abSAndroid Build Coastguard Worker 21*fb1b10abSAndroid Build Coastguard Workerelog() { 22*fb1b10abSAndroid Build Coastguard Worker echo "$@" 1>&2 23*fb1b10abSAndroid Build Coastguard Worker} 24*fb1b10abSAndroid Build Coastguard Worker 25*fb1b10abSAndroid Build Coastguard Workervlog() { 26*fb1b10abSAndroid Build Coastguard Worker if [ "${VPX_TEST_VERBOSE_OUTPUT}" = "yes" ]; then 27*fb1b10abSAndroid Build Coastguard Worker echo "$@" 28*fb1b10abSAndroid Build Coastguard Worker fi 29*fb1b10abSAndroid Build Coastguard Worker} 30*fb1b10abSAndroid Build Coastguard Worker 31*fb1b10abSAndroid Build Coastguard Worker# Sets $VPX_TOOL_TEST to the name specified by positional parameter one. 32*fb1b10abSAndroid Build Coastguard Workertest_begin() { 33*fb1b10abSAndroid Build Coastguard Worker VPX_TOOL_TEST="${1}" 34*fb1b10abSAndroid Build Coastguard Worker} 35*fb1b10abSAndroid Build Coastguard Worker 36*fb1b10abSAndroid Build Coastguard Worker# Clears the VPX_TOOL_TEST variable after confirming that $VPX_TOOL_TEST matches 37*fb1b10abSAndroid Build Coastguard Worker# positional parameter one. 38*fb1b10abSAndroid Build Coastguard Workertest_end() { 39*fb1b10abSAndroid Build Coastguard Worker if [ "$1" != "${VPX_TOOL_TEST}" ]; then 40*fb1b10abSAndroid Build Coastguard Worker echo "FAIL completed test mismatch!." 41*fb1b10abSAndroid Build Coastguard Worker echo " completed test: ${1}" 42*fb1b10abSAndroid Build Coastguard Worker echo " active test: ${VPX_TOOL_TEST}." 43*fb1b10abSAndroid Build Coastguard Worker return 1 44*fb1b10abSAndroid Build Coastguard Worker fi 45*fb1b10abSAndroid Build Coastguard Worker VPX_TOOL_TEST='<unset>' 46*fb1b10abSAndroid Build Coastguard Worker} 47*fb1b10abSAndroid Build Coastguard Worker 48*fb1b10abSAndroid Build Coastguard Worker# Echoes the target configuration being tested. 49*fb1b10abSAndroid Build Coastguard Workertest_configuration_target() { 50*fb1b10abSAndroid Build Coastguard Worker vpx_config_mk="${LIBVPX_CONFIG_PATH}/config.mk" 51*fb1b10abSAndroid Build Coastguard Worker # Find the TOOLCHAIN line, split it using ':=' as the field separator, and 52*fb1b10abSAndroid Build Coastguard Worker # print the last field to get the value. Then pipe the value to tr to consume 53*fb1b10abSAndroid Build Coastguard Worker # any leading/trailing spaces while allowing tr to echo the output to stdout. 54*fb1b10abSAndroid Build Coastguard Worker awk -F ':=' '/TOOLCHAIN/ { print $NF }' "${vpx_config_mk}" | tr -d ' ' 55*fb1b10abSAndroid Build Coastguard Worker} 56*fb1b10abSAndroid Build Coastguard Worker 57*fb1b10abSAndroid Build Coastguard Worker# Trap function used for failure reports and tool output directory removal. 58*fb1b10abSAndroid Build Coastguard Worker# When the contents of $VPX_TOOL_TEST do not match the string '<unset>', reports 59*fb1b10abSAndroid Build Coastguard Worker# failure of test stored in $VPX_TOOL_TEST. 60*fb1b10abSAndroid Build Coastguard Workercleanup() { 61*fb1b10abSAndroid Build Coastguard Worker if [ -n "${VPX_TOOL_TEST}" ] && [ "${VPX_TOOL_TEST}" != '<unset>' ]; then 62*fb1b10abSAndroid Build Coastguard Worker echo "FAIL: $VPX_TOOL_TEST" 63*fb1b10abSAndroid Build Coastguard Worker fi 64*fb1b10abSAndroid Build Coastguard Worker if [ -n "${VPX_TEST_OUTPUT_DIR}" ] && [ -d "${VPX_TEST_OUTPUT_DIR}" ]; then 65*fb1b10abSAndroid Build Coastguard Worker rm -rf "${VPX_TEST_OUTPUT_DIR}" 66*fb1b10abSAndroid Build Coastguard Worker fi 67*fb1b10abSAndroid Build Coastguard Worker} 68*fb1b10abSAndroid Build Coastguard Worker 69*fb1b10abSAndroid Build Coastguard Worker# Echoes the git hash portion of the VERSION_STRING variable defined in 70*fb1b10abSAndroid Build Coastguard Worker# $LIBVPX_CONFIG_PATH/config.mk to stdout, or the version number string when 71*fb1b10abSAndroid Build Coastguard Worker# no git hash is contained in VERSION_STRING. 72*fb1b10abSAndroid Build Coastguard Workerconfig_hash() { 73*fb1b10abSAndroid Build Coastguard Worker vpx_config_mk="${LIBVPX_CONFIG_PATH}/config.mk" 74*fb1b10abSAndroid Build Coastguard Worker # Find VERSION_STRING line, split it with "-g" and print the last field to 75*fb1b10abSAndroid Build Coastguard Worker # output the git hash to stdout. 76*fb1b10abSAndroid Build Coastguard Worker vpx_version=$(awk -F -g '/VERSION_STRING/ {print $NF}' "${vpx_config_mk}") 77*fb1b10abSAndroid Build Coastguard Worker # Handle two situations here: 78*fb1b10abSAndroid Build Coastguard Worker # 1. The default case: $vpx_version is a git hash, so echo it unchanged. 79*fb1b10abSAndroid Build Coastguard Worker # 2. When being run a non-dev tree, the -g portion is not present in the 80*fb1b10abSAndroid Build Coastguard Worker # version string: It's only the version number. 81*fb1b10abSAndroid Build Coastguard Worker # In this case $vpx_version is something like 'VERSION_STRING=v1.3.0', so 82*fb1b10abSAndroid Build Coastguard Worker # we echo only what is after the '='. 83*fb1b10abSAndroid Build Coastguard Worker echo "${vpx_version##*=}" 84*fb1b10abSAndroid Build Coastguard Worker} 85*fb1b10abSAndroid Build Coastguard Worker 86*fb1b10abSAndroid Build Coastguard Worker# Echoes the short form of the current git hash. 87*fb1b10abSAndroid Build Coastguard Workercurrent_hash() { 88*fb1b10abSAndroid Build Coastguard Worker if git --version > /dev/null 2>&1; then 89*fb1b10abSAndroid Build Coastguard Worker (cd "$(dirname "${0}")" 90*fb1b10abSAndroid Build Coastguard Worker git rev-parse --short HEAD) 91*fb1b10abSAndroid Build Coastguard Worker else 92*fb1b10abSAndroid Build Coastguard Worker # Return the config hash if git is unavailable: Fail silently, git hashes 93*fb1b10abSAndroid Build Coastguard Worker # are used only for warnings. 94*fb1b10abSAndroid Build Coastguard Worker config_hash 95*fb1b10abSAndroid Build Coastguard Worker fi 96*fb1b10abSAndroid Build Coastguard Worker} 97*fb1b10abSAndroid Build Coastguard Worker 98*fb1b10abSAndroid Build Coastguard Worker# Echoes warnings to stdout when git hash in vpx_config.h does not match the 99*fb1b10abSAndroid Build Coastguard Worker# current git hash. 100*fb1b10abSAndroid Build Coastguard Workercheck_git_hashes() { 101*fb1b10abSAndroid Build Coastguard Worker hash_at_configure_time=$(config_hash) 102*fb1b10abSAndroid Build Coastguard Worker hash_now=$(current_hash) 103*fb1b10abSAndroid Build Coastguard Worker 104*fb1b10abSAndroid Build Coastguard Worker if [ "${hash_at_configure_time}" != "${hash_now}" ]; then 105*fb1b10abSAndroid Build Coastguard Worker echo "Warning: git hash has changed since last configure." 106*fb1b10abSAndroid Build Coastguard Worker fi 107*fb1b10abSAndroid Build Coastguard Worker} 108*fb1b10abSAndroid Build Coastguard Worker 109*fb1b10abSAndroid Build Coastguard Worker# $1 is the name of an environment variable containing a directory name to 110*fb1b10abSAndroid Build Coastguard Worker# test. 111*fb1b10abSAndroid Build Coastguard Workertest_env_var_dir() { 112*fb1b10abSAndroid Build Coastguard Worker local dir=$(eval echo "\${$1}") 113*fb1b10abSAndroid Build Coastguard Worker if [ ! -d "${dir}" ]; then 114*fb1b10abSAndroid Build Coastguard Worker elog "'${dir}': No such directory" 115*fb1b10abSAndroid Build Coastguard Worker elog "The $1 environment variable must be set to a valid directory." 116*fb1b10abSAndroid Build Coastguard Worker return 1 117*fb1b10abSAndroid Build Coastguard Worker fi 118*fb1b10abSAndroid Build Coastguard Worker} 119*fb1b10abSAndroid Build Coastguard Worker 120*fb1b10abSAndroid Build Coastguard Worker# This script requires that the LIBVPX_BIN_PATH, LIBVPX_CONFIG_PATH, and 121*fb1b10abSAndroid Build Coastguard Worker# LIBVPX_TEST_DATA_PATH variables are in the environment: Confirm that 122*fb1b10abSAndroid Build Coastguard Worker# the variables are set and that they all evaluate to directory paths. 123*fb1b10abSAndroid Build Coastguard Workerverify_vpx_test_environment() { 124*fb1b10abSAndroid Build Coastguard Worker test_env_var_dir "LIBVPX_BIN_PATH" \ 125*fb1b10abSAndroid Build Coastguard Worker && test_env_var_dir "LIBVPX_CONFIG_PATH" \ 126*fb1b10abSAndroid Build Coastguard Worker && test_env_var_dir "LIBVPX_TEST_DATA_PATH" 127*fb1b10abSAndroid Build Coastguard Worker} 128*fb1b10abSAndroid Build Coastguard Worker 129*fb1b10abSAndroid Build Coastguard Worker# Greps vpx_config.h in LIBVPX_CONFIG_PATH for positional parameter one, which 130*fb1b10abSAndroid Build Coastguard Worker# should be a LIBVPX preprocessor flag. Echoes yes to stdout when the feature 131*fb1b10abSAndroid Build Coastguard Worker# is available. 132*fb1b10abSAndroid Build Coastguard Workervpx_config_option_enabled() { 133*fb1b10abSAndroid Build Coastguard Worker vpx_config_option="${1}" 134*fb1b10abSAndroid Build Coastguard Worker vpx_config_file="${LIBVPX_CONFIG_PATH}/vpx_config.h" 135*fb1b10abSAndroid Build Coastguard Worker config_line=$(grep "${vpx_config_option}" "${vpx_config_file}") 136*fb1b10abSAndroid Build Coastguard Worker if echo "${config_line}" | grep -E -q '1$'; then 137*fb1b10abSAndroid Build Coastguard Worker echo yes 138*fb1b10abSAndroid Build Coastguard Worker fi 139*fb1b10abSAndroid Build Coastguard Worker} 140*fb1b10abSAndroid Build Coastguard Worker 141*fb1b10abSAndroid Build Coastguard Worker# Echoes yes when output of test_configuration_target() contains win32 or win64. 142*fb1b10abSAndroid Build Coastguard Workeris_windows_target() { 143*fb1b10abSAndroid Build Coastguard Worker if test_configuration_target \ 144*fb1b10abSAndroid Build Coastguard Worker | grep -q -e win32 -e win64 > /dev/null 2>&1; then 145*fb1b10abSAndroid Build Coastguard Worker echo yes 146*fb1b10abSAndroid Build Coastguard Worker fi 147*fb1b10abSAndroid Build Coastguard Worker} 148*fb1b10abSAndroid Build Coastguard Worker 149*fb1b10abSAndroid Build Coastguard Worker# Echoes path to $1 when it's executable and exists in ${LIBVPX_BIN_PATH}, or an 150*fb1b10abSAndroid Build Coastguard Worker# empty string. Caller is responsible for testing the string once the function 151*fb1b10abSAndroid Build Coastguard Worker# returns. 152*fb1b10abSAndroid Build Coastguard Workervpx_tool_path() { 153*fb1b10abSAndroid Build Coastguard Worker local tool_name="$1" 154*fb1b10abSAndroid Build Coastguard Worker local tool_path="${LIBVPX_BIN_PATH}/${tool_name}${VPX_TEST_EXE_SUFFIX}" 155*fb1b10abSAndroid Build Coastguard Worker if [ ! -x "${tool_path}" ]; then 156*fb1b10abSAndroid Build Coastguard Worker # Try one directory up: when running via examples.sh the tool could be in 157*fb1b10abSAndroid Build Coastguard Worker # the parent directory of $LIBVPX_BIN_PATH. 158*fb1b10abSAndroid Build Coastguard Worker tool_path="${LIBVPX_BIN_PATH}/../${tool_name}${VPX_TEST_EXE_SUFFIX}" 159*fb1b10abSAndroid Build Coastguard Worker fi 160*fb1b10abSAndroid Build Coastguard Worker 161*fb1b10abSAndroid Build Coastguard Worker if [ ! -x "${tool_path}" ]; then 162*fb1b10abSAndroid Build Coastguard Worker tool_path="" 163*fb1b10abSAndroid Build Coastguard Worker fi 164*fb1b10abSAndroid Build Coastguard Worker echo "${tool_path}" 165*fb1b10abSAndroid Build Coastguard Worker} 166*fb1b10abSAndroid Build Coastguard Worker 167*fb1b10abSAndroid Build Coastguard Worker# Echoes yes to stdout when the file named by positional parameter one exists 168*fb1b10abSAndroid Build Coastguard Worker# in LIBVPX_BIN_PATH, and is executable. 169*fb1b10abSAndroid Build Coastguard Workervpx_tool_available() { 170*fb1b10abSAndroid Build Coastguard Worker local tool_name="$1" 171*fb1b10abSAndroid Build Coastguard Worker local tool="${LIBVPX_BIN_PATH}/${tool_name}${VPX_TEST_EXE_SUFFIX}" 172*fb1b10abSAndroid Build Coastguard Worker [ -x "${tool}" ] && echo yes 173*fb1b10abSAndroid Build Coastguard Worker} 174*fb1b10abSAndroid Build Coastguard Worker 175*fb1b10abSAndroid Build Coastguard Worker# Echoes yes to stdout when vpx_config_option_enabled() reports yes for 176*fb1b10abSAndroid Build Coastguard Worker# CONFIG_VP8_DECODER. 177*fb1b10abSAndroid Build Coastguard Workervp8_decode_available() { 178*fb1b10abSAndroid Build Coastguard Worker [ "$(vpx_config_option_enabled CONFIG_VP8_DECODER)" = "yes" ] && echo yes 179*fb1b10abSAndroid Build Coastguard Worker} 180*fb1b10abSAndroid Build Coastguard Worker 181*fb1b10abSAndroid Build Coastguard Worker# Echoes yes to stdout when vpx_config_option_enabled() reports yes for 182*fb1b10abSAndroid Build Coastguard Worker# CONFIG_VP8_ENCODER. 183*fb1b10abSAndroid Build Coastguard Workervp8_encode_available() { 184*fb1b10abSAndroid Build Coastguard Worker [ "$(vpx_config_option_enabled CONFIG_VP8_ENCODER)" = "yes" ] && echo yes 185*fb1b10abSAndroid Build Coastguard Worker} 186*fb1b10abSAndroid Build Coastguard Worker 187*fb1b10abSAndroid Build Coastguard Worker# Echoes yes to stdout when vpx_config_option_enabled() reports yes for 188*fb1b10abSAndroid Build Coastguard Worker# CONFIG_VP9_DECODER. 189*fb1b10abSAndroid Build Coastguard Workervp9_decode_available() { 190*fb1b10abSAndroid Build Coastguard Worker [ "$(vpx_config_option_enabled CONFIG_VP9_DECODER)" = "yes" ] && echo yes 191*fb1b10abSAndroid Build Coastguard Worker} 192*fb1b10abSAndroid Build Coastguard Worker 193*fb1b10abSAndroid Build Coastguard Worker# Echoes yes to stdout when vpx_config_option_enabled() reports yes for 194*fb1b10abSAndroid Build Coastguard Worker# CONFIG_VP9_ENCODER. 195*fb1b10abSAndroid Build Coastguard Workervp9_encode_available() { 196*fb1b10abSAndroid Build Coastguard Worker [ "$(vpx_config_option_enabled CONFIG_VP9_ENCODER)" = "yes" ] && echo yes 197*fb1b10abSAndroid Build Coastguard Worker} 198*fb1b10abSAndroid Build Coastguard Worker 199*fb1b10abSAndroid Build Coastguard Worker# Echoes yes to stdout when vpx_config_option_enabled() reports yes for 200*fb1b10abSAndroid Build Coastguard Worker# CONFIG_WEBM_IO. 201*fb1b10abSAndroid Build Coastguard Workerwebm_io_available() { 202*fb1b10abSAndroid Build Coastguard Worker [ "$(vpx_config_option_enabled CONFIG_WEBM_IO)" = "yes" ] && echo yes 203*fb1b10abSAndroid Build Coastguard Worker} 204*fb1b10abSAndroid Build Coastguard Worker 205*fb1b10abSAndroid Build Coastguard Worker# Filters strings from $1 using the filter specified by $2. Filter behavior 206*fb1b10abSAndroid Build Coastguard Worker# depends on the presence of $3. When $3 is present, strings that match the 207*fb1b10abSAndroid Build Coastguard Worker# filter are excluded. When $3 is omitted, strings matching the filter are 208*fb1b10abSAndroid Build Coastguard Worker# included. 209*fb1b10abSAndroid Build Coastguard Worker# The filtered result is echoed to stdout. 210*fb1b10abSAndroid Build Coastguard Workerfilter_strings() { 211*fb1b10abSAndroid Build Coastguard Worker strings=${1} 212*fb1b10abSAndroid Build Coastguard Worker filter=${2} 213*fb1b10abSAndroid Build Coastguard Worker exclude=${3} 214*fb1b10abSAndroid Build Coastguard Worker 215*fb1b10abSAndroid Build Coastguard Worker if [ -n "${exclude}" ]; then 216*fb1b10abSAndroid Build Coastguard Worker # When positional parameter three exists the caller wants to remove strings. 217*fb1b10abSAndroid Build Coastguard Worker # Tell grep to invert matches using the -v argument. 218*fb1b10abSAndroid Build Coastguard Worker exclude='-v' 219*fb1b10abSAndroid Build Coastguard Worker else 220*fb1b10abSAndroid Build Coastguard Worker unset exclude 221*fb1b10abSAndroid Build Coastguard Worker fi 222*fb1b10abSAndroid Build Coastguard Worker 223*fb1b10abSAndroid Build Coastguard Worker if [ -n "${filter}" ]; then 224*fb1b10abSAndroid Build Coastguard Worker for s in ${strings}; do 225*fb1b10abSAndroid Build Coastguard Worker if echo "${s}" | grep -E -q ${exclude} "${filter}" > /dev/null 2>&1; then 226*fb1b10abSAndroid Build Coastguard Worker filtered_strings="${filtered_strings} ${s}" 227*fb1b10abSAndroid Build Coastguard Worker fi 228*fb1b10abSAndroid Build Coastguard Worker done 229*fb1b10abSAndroid Build Coastguard Worker else 230*fb1b10abSAndroid Build Coastguard Worker filtered_strings="${strings}" 231*fb1b10abSAndroid Build Coastguard Worker fi 232*fb1b10abSAndroid Build Coastguard Worker echo "${filtered_strings}" 233*fb1b10abSAndroid Build Coastguard Worker} 234*fb1b10abSAndroid Build Coastguard Worker 235*fb1b10abSAndroid Build Coastguard Worker# Runs user test functions passed via positional parameters one and two. 236*fb1b10abSAndroid Build Coastguard Worker# Functions in positional parameter one are treated as environment verification 237*fb1b10abSAndroid Build Coastguard Worker# functions and are run unconditionally. Functions in positional parameter two 238*fb1b10abSAndroid Build Coastguard Worker# are run according to the rules specified in vpx_test_usage(). 239*fb1b10abSAndroid Build Coastguard Workerrun_tests() { 240*fb1b10abSAndroid Build Coastguard Worker local env_tests="verify_vpx_test_environment $1" 241*fb1b10abSAndroid Build Coastguard Worker local tests_to_filter="$2" 242*fb1b10abSAndroid Build Coastguard Worker local test_name="${VPX_TEST_NAME}" 243*fb1b10abSAndroid Build Coastguard Worker 244*fb1b10abSAndroid Build Coastguard Worker if [ -z "${test_name}" ]; then 245*fb1b10abSAndroid Build Coastguard Worker test_name="$(basename "${0%.*}")" 246*fb1b10abSAndroid Build Coastguard Worker fi 247*fb1b10abSAndroid Build Coastguard Worker 248*fb1b10abSAndroid Build Coastguard Worker if [ "${VPX_TEST_RUN_DISABLED_TESTS}" != "yes" ]; then 249*fb1b10abSAndroid Build Coastguard Worker # Filter out DISABLED tests. 250*fb1b10abSAndroid Build Coastguard Worker tests_to_filter=$(filter_strings "${tests_to_filter}" ^DISABLED exclude) 251*fb1b10abSAndroid Build Coastguard Worker fi 252*fb1b10abSAndroid Build Coastguard Worker 253*fb1b10abSAndroid Build Coastguard Worker if [ -n "${VPX_TEST_FILTER}" ]; then 254*fb1b10abSAndroid Build Coastguard Worker # Remove tests not matching the user's filter. 255*fb1b10abSAndroid Build Coastguard Worker tests_to_filter=$(filter_strings "${tests_to_filter}" ${VPX_TEST_FILTER}) 256*fb1b10abSAndroid Build Coastguard Worker fi 257*fb1b10abSAndroid Build Coastguard Worker 258*fb1b10abSAndroid Build Coastguard Worker # User requested test listing: Dump test names and return. 259*fb1b10abSAndroid Build Coastguard Worker if [ "${VPX_TEST_LIST_TESTS}" = "yes" ]; then 260*fb1b10abSAndroid Build Coastguard Worker for test_name in $tests_to_filter; do 261*fb1b10abSAndroid Build Coastguard Worker echo ${test_name} 262*fb1b10abSAndroid Build Coastguard Worker done 263*fb1b10abSAndroid Build Coastguard Worker return 264*fb1b10abSAndroid Build Coastguard Worker fi 265*fb1b10abSAndroid Build Coastguard Worker 266*fb1b10abSAndroid Build Coastguard Worker # Don't bother with the environment tests if everything else was disabled. 267*fb1b10abSAndroid Build Coastguard Worker [ -z "${tests_to_filter}" ] && return 268*fb1b10abSAndroid Build Coastguard Worker 269*fb1b10abSAndroid Build Coastguard Worker # Combine environment and actual tests. 270*fb1b10abSAndroid Build Coastguard Worker local tests_to_run="${env_tests} ${tests_to_filter}" 271*fb1b10abSAndroid Build Coastguard Worker 272*fb1b10abSAndroid Build Coastguard Worker check_git_hashes 273*fb1b10abSAndroid Build Coastguard Worker 274*fb1b10abSAndroid Build Coastguard Worker # Run tests. 275*fb1b10abSAndroid Build Coastguard Worker for test in ${tests_to_run}; do 276*fb1b10abSAndroid Build Coastguard Worker test_begin "${test}" 277*fb1b10abSAndroid Build Coastguard Worker vlog " RUN ${test}" 278*fb1b10abSAndroid Build Coastguard Worker "${test}" 279*fb1b10abSAndroid Build Coastguard Worker vlog " PASS ${test}" 280*fb1b10abSAndroid Build Coastguard Worker test_end "${test}" 281*fb1b10abSAndroid Build Coastguard Worker done 282*fb1b10abSAndroid Build Coastguard Worker 283*fb1b10abSAndroid Build Coastguard Worker # C vs SIMD tests are run for x86 32-bit, 64-bit and ARM platform 284*fb1b10abSAndroid Build Coastguard Worker if [ "${test_name}" = "vp9_c_vs_simd_encode" ]; then 285*fb1b10abSAndroid Build Coastguard Worker local tested_config="$(current_hash)" 286*fb1b10abSAndroid Build Coastguard Worker else 287*fb1b10abSAndroid Build Coastguard Worker local tested_config="$(test_configuration_target) @ $(current_hash)" 288*fb1b10abSAndroid Build Coastguard Worker fi 289*fb1b10abSAndroid Build Coastguard Worker echo "${test_name}: Done, all tests pass for ${tested_config}." 290*fb1b10abSAndroid Build Coastguard Worker} 291*fb1b10abSAndroid Build Coastguard Worker 292*fb1b10abSAndroid Build Coastguard Workervpx_test_usage() { 293*fb1b10abSAndroid Build Coastguard Workercat << EOF 294*fb1b10abSAndroid Build Coastguard Worker Usage: ${0##*/} [arguments] 295*fb1b10abSAndroid Build Coastguard Worker --bin-path <path to libvpx binaries directory> 296*fb1b10abSAndroid Build Coastguard Worker --config-path <path to libvpx config directory> 297*fb1b10abSAndroid Build Coastguard Worker --filter <filter>: User test filter. Only tests matching filter are run. 298*fb1b10abSAndroid Build Coastguard Worker --run-disabled-tests: Run disabled tests. 299*fb1b10abSAndroid Build Coastguard Worker --help: Display this message and exit. 300*fb1b10abSAndroid Build Coastguard Worker --test-data-path <path to libvpx test data directory> 301*fb1b10abSAndroid Build Coastguard Worker --show-program-output: Shows output from all programs being tested. 302*fb1b10abSAndroid Build Coastguard Worker --prefix: Allows for a user specified prefix to be inserted before all test 303*fb1b10abSAndroid Build Coastguard Worker programs. Grants the ability, for example, to run test programs 304*fb1b10abSAndroid Build Coastguard Worker within valgrind. 305*fb1b10abSAndroid Build Coastguard Worker --list-tests: List all test names and exit without actually running tests. 306*fb1b10abSAndroid Build Coastguard Worker --verbose: Verbose output. 307*fb1b10abSAndroid Build Coastguard Worker 308*fb1b10abSAndroid Build Coastguard Worker When the --bin-path option is not specified the script attempts to use 309*fb1b10abSAndroid Build Coastguard Worker \$LIBVPX_BIN_PATH and then the current directory. 310*fb1b10abSAndroid Build Coastguard Worker 311*fb1b10abSAndroid Build Coastguard Worker When the --config-path option is not specified the script attempts to use 312*fb1b10abSAndroid Build Coastguard Worker \$LIBVPX_CONFIG_PATH and then the current directory. 313*fb1b10abSAndroid Build Coastguard Worker 314*fb1b10abSAndroid Build Coastguard Worker When the -test-data-path option is not specified the script attempts to use 315*fb1b10abSAndroid Build Coastguard Worker \$LIBVPX_TEST_DATA_PATH and then the current directory. 316*fb1b10abSAndroid Build Coastguard WorkerEOF 317*fb1b10abSAndroid Build Coastguard Worker} 318*fb1b10abSAndroid Build Coastguard Worker 319*fb1b10abSAndroid Build Coastguard Worker# Returns non-zero (failure) when required environment variables are empty 320*fb1b10abSAndroid Build Coastguard Worker# strings. 321*fb1b10abSAndroid Build Coastguard Workervpx_test_check_environment() { 322*fb1b10abSAndroid Build Coastguard Worker if [ -z "${LIBVPX_BIN_PATH}" ] || \ 323*fb1b10abSAndroid Build Coastguard Worker [ -z "${LIBVPX_CONFIG_PATH}" ] || \ 324*fb1b10abSAndroid Build Coastguard Worker [ -z "${LIBVPX_TEST_DATA_PATH}" ]; then 325*fb1b10abSAndroid Build Coastguard Worker return 1 326*fb1b10abSAndroid Build Coastguard Worker fi 327*fb1b10abSAndroid Build Coastguard Worker} 328*fb1b10abSAndroid Build Coastguard Worker 329*fb1b10abSAndroid Build Coastguard Worker# Parse the command line. 330*fb1b10abSAndroid Build Coastguard Workerwhile [ -n "$1" ]; do 331*fb1b10abSAndroid Build Coastguard Worker case "$1" in 332*fb1b10abSAndroid Build Coastguard Worker --bin-path) 333*fb1b10abSAndroid Build Coastguard Worker LIBVPX_BIN_PATH="$2" 334*fb1b10abSAndroid Build Coastguard Worker shift 335*fb1b10abSAndroid Build Coastguard Worker ;; 336*fb1b10abSAndroid Build Coastguard Worker --config-path) 337*fb1b10abSAndroid Build Coastguard Worker LIBVPX_CONFIG_PATH="$2" 338*fb1b10abSAndroid Build Coastguard Worker shift 339*fb1b10abSAndroid Build Coastguard Worker ;; 340*fb1b10abSAndroid Build Coastguard Worker --filter) 341*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_FILTER="$2" 342*fb1b10abSAndroid Build Coastguard Worker shift 343*fb1b10abSAndroid Build Coastguard Worker ;; 344*fb1b10abSAndroid Build Coastguard Worker --run-disabled-tests) 345*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_RUN_DISABLED_TESTS=yes 346*fb1b10abSAndroid Build Coastguard Worker ;; 347*fb1b10abSAndroid Build Coastguard Worker --help) 348*fb1b10abSAndroid Build Coastguard Worker vpx_test_usage 349*fb1b10abSAndroid Build Coastguard Worker exit 350*fb1b10abSAndroid Build Coastguard Worker ;; 351*fb1b10abSAndroid Build Coastguard Worker --test-data-path) 352*fb1b10abSAndroid Build Coastguard Worker LIBVPX_TEST_DATA_PATH="$2" 353*fb1b10abSAndroid Build Coastguard Worker shift 354*fb1b10abSAndroid Build Coastguard Worker ;; 355*fb1b10abSAndroid Build Coastguard Worker --prefix) 356*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_PREFIX="$2" 357*fb1b10abSAndroid Build Coastguard Worker shift 358*fb1b10abSAndroid Build Coastguard Worker ;; 359*fb1b10abSAndroid Build Coastguard Worker --verbose) 360*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_VERBOSE_OUTPUT=yes 361*fb1b10abSAndroid Build Coastguard Worker ;; 362*fb1b10abSAndroid Build Coastguard Worker --show-program-output) 363*fb1b10abSAndroid Build Coastguard Worker devnull= 364*fb1b10abSAndroid Build Coastguard Worker ;; 365*fb1b10abSAndroid Build Coastguard Worker --list-tests) 366*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_LIST_TESTS=yes 367*fb1b10abSAndroid Build Coastguard Worker ;; 368*fb1b10abSAndroid Build Coastguard Worker *) 369*fb1b10abSAndroid Build Coastguard Worker vpx_test_usage 370*fb1b10abSAndroid Build Coastguard Worker exit 1 371*fb1b10abSAndroid Build Coastguard Worker ;; 372*fb1b10abSAndroid Build Coastguard Worker esac 373*fb1b10abSAndroid Build Coastguard Worker shift 374*fb1b10abSAndroid Build Coastguard Workerdone 375*fb1b10abSAndroid Build Coastguard Worker 376*fb1b10abSAndroid Build Coastguard Worker# Handle running the tests from a build directory without arguments when running 377*fb1b10abSAndroid Build Coastguard Worker# the tests on *nix/macosx. 378*fb1b10abSAndroid Build Coastguard WorkerLIBVPX_BIN_PATH="${LIBVPX_BIN_PATH:-.}" 379*fb1b10abSAndroid Build Coastguard WorkerLIBVPX_CONFIG_PATH="${LIBVPX_CONFIG_PATH:-.}" 380*fb1b10abSAndroid Build Coastguard WorkerLIBVPX_TEST_DATA_PATH="${LIBVPX_TEST_DATA_PATH:-.}" 381*fb1b10abSAndroid Build Coastguard Worker 382*fb1b10abSAndroid Build Coastguard Worker# Create a temporary directory for output files, and a trap to clean it up. 383*fb1b10abSAndroid Build Coastguard Workerif [ -n "${TMPDIR}" ]; then 384*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_TEMP_ROOT="${TMPDIR}" 385*fb1b10abSAndroid Build Coastguard Workerelif [ -n "${TEMPDIR}" ]; then 386*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_TEMP_ROOT="${TEMPDIR}" 387*fb1b10abSAndroid Build Coastguard Workerelse 388*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_TEMP_ROOT=/tmp 389*fb1b10abSAndroid Build Coastguard Workerfi 390*fb1b10abSAndroid Build Coastguard Worker 391*fb1b10abSAndroid Build Coastguard WorkerVPX_TEST_OUTPUT_DIR="${VPX_TEST_TEMP_ROOT}/vpx_test_$$" 392*fb1b10abSAndroid Build Coastguard Worker 393*fb1b10abSAndroid Build Coastguard Workerif ! mkdir -p "${VPX_TEST_OUTPUT_DIR}" || \ 394*fb1b10abSAndroid Build Coastguard Worker [ ! -d "${VPX_TEST_OUTPUT_DIR}" ]; then 395*fb1b10abSAndroid Build Coastguard Worker echo "${0##*/}: Cannot create output directory, giving up." 396*fb1b10abSAndroid Build Coastguard Worker echo "${0##*/}: VPX_TEST_OUTPUT_DIR=${VPX_TEST_OUTPUT_DIR}" 397*fb1b10abSAndroid Build Coastguard Worker exit 1 398*fb1b10abSAndroid Build Coastguard Workerfi 399*fb1b10abSAndroid Build Coastguard Worker 400*fb1b10abSAndroid Build Coastguard Workerif [ "$(is_windows_target)" = "yes" ]; then 401*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_EXE_SUFFIX=".exe" 402*fb1b10abSAndroid Build Coastguard Workerfi 403*fb1b10abSAndroid Build Coastguard Worker 404*fb1b10abSAndroid Build Coastguard Worker# Variables shared by tests. 405*fb1b10abSAndroid Build Coastguard WorkerVP8_IVF_FILE="${LIBVPX_TEST_DATA_PATH}/vp80-00-comprehensive-001.ivf" 406*fb1b10abSAndroid Build Coastguard WorkerVP9_IVF_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-09-subpixel-00.ivf" 407*fb1b10abSAndroid Build Coastguard Worker 408*fb1b10abSAndroid Build Coastguard WorkerVP9_WEBM_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-00-quantizer-00.webm" 409*fb1b10abSAndroid Build Coastguard WorkerVP9_FPM_WEBM_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-07-frame_parallel-1.webm" 410*fb1b10abSAndroid Build Coastguard WorkerVP9_LT_50_FRAMES_WEBM_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-02-size-32x08.webm" 411*fb1b10abSAndroid Build Coastguard Worker 412*fb1b10abSAndroid Build Coastguard WorkerVP9_RAW_FILE="${LIBVPX_TEST_DATA_PATH}/crbug-1539.rawfile" 413*fb1b10abSAndroid Build Coastguard Worker 414*fb1b10abSAndroid Build Coastguard WorkerYUV_RAW_INPUT="${LIBVPX_TEST_DATA_PATH}/hantro_collage_w352h288.yuv" 415*fb1b10abSAndroid Build Coastguard WorkerYUV_RAW_INPUT_WIDTH=352 416*fb1b10abSAndroid Build Coastguard WorkerYUV_RAW_INPUT_HEIGHT=288 417*fb1b10abSAndroid Build Coastguard Worker 418*fb1b10abSAndroid Build Coastguard WorkerY4M_NOSQ_PAR_INPUT="${LIBVPX_TEST_DATA_PATH}/park_joy_90p_8_420_a10-1.y4m" 419*fb1b10abSAndroid Build Coastguard WorkerY4M_720P_INPUT="${LIBVPX_TEST_DATA_PATH}/niklas_1280_720_30.y4m" 420*fb1b10abSAndroid Build Coastguard WorkerY4M_720P_INPUT_WIDTH=1280 421*fb1b10abSAndroid Build Coastguard WorkerY4M_720P_INPUT_HEIGHT=720 422*fb1b10abSAndroid Build Coastguard Worker 423*fb1b10abSAndroid Build Coastguard Worker# Setup a trap function to clean up after tests complete. 424*fb1b10abSAndroid Build Coastguard Workertrap cleanup EXIT 425*fb1b10abSAndroid Build Coastguard Worker 426*fb1b10abSAndroid Build Coastguard Workervlog "$(basename "${0%.*}") test configuration: 427*fb1b10abSAndroid Build Coastguard Worker LIBVPX_BIN_PATH=${LIBVPX_BIN_PATH} 428*fb1b10abSAndroid Build Coastguard Worker LIBVPX_CONFIG_PATH=${LIBVPX_CONFIG_PATH} 429*fb1b10abSAndroid Build Coastguard Worker LIBVPX_TEST_DATA_PATH=${LIBVPX_TEST_DATA_PATH} 430*fb1b10abSAndroid Build Coastguard Worker VP8_IVF_FILE=${VP8_IVF_FILE} 431*fb1b10abSAndroid Build Coastguard Worker VP9_IVF_FILE=${VP9_IVF_FILE} 432*fb1b10abSAndroid Build Coastguard Worker VP9_WEBM_FILE=${VP9_WEBM_FILE} 433*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_EXE_SUFFIX=${VPX_TEST_EXE_SUFFIX} 434*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_FILTER=${VPX_TEST_FILTER} 435*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_LIST_TESTS=${VPX_TEST_LIST_TESTS} 436*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_OUTPUT_DIR=${VPX_TEST_OUTPUT_DIR} 437*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_PREFIX=${VPX_TEST_PREFIX} 438*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_RUN_DISABLED_TESTS=${VPX_TEST_RUN_DISABLED_TESTS} 439*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_SHOW_PROGRAM_OUTPUT=${VPX_TEST_SHOW_PROGRAM_OUTPUT} 440*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_TEMP_ROOT=${VPX_TEST_TEMP_ROOT} 441*fb1b10abSAndroid Build Coastguard Worker VPX_TEST_VERBOSE_OUTPUT=${VPX_TEST_VERBOSE_OUTPUT} 442*fb1b10abSAndroid Build Coastguard Worker YUV_RAW_INPUT=${YUV_RAW_INPUT} 443*fb1b10abSAndroid Build Coastguard Worker YUV_RAW_INPUT_WIDTH=${YUV_RAW_INPUT_WIDTH} 444*fb1b10abSAndroid Build Coastguard Worker YUV_RAW_INPUT_HEIGHT=${YUV_RAW_INPUT_HEIGHT} 445*fb1b10abSAndroid Build Coastguard Worker Y4M_NOSQ_PAR_INPUT=${Y4M_NOSQ_PAR_INPUT}" 446*fb1b10abSAndroid Build Coastguard Worker 447*fb1b10abSAndroid Build Coastguard Workerfi # End $VPX_TEST_TOOLS_COMMON_SH pseudo include guard. 448