linuxOS_D21X/package/third-party/initscripts/init.d/S99burn-in
2024-11-29 16:33:21 +08:00

372 lines
6.8 KiB
Bash
Executable File

#!/bin/sh
################################################################################
# Copyright (C) 2024 ArtInChip.
#
# Burn-in Test script
#
################################################################################
# $1 - module name, only test one module, optional
SCRIPT_NAME=$0
MOD_NAME=$1
RUN_TIME=$(date +%Y-%m-%d_%H-%M)
RESULT_FILE=/tmp/aic_test_${RUN_TIME}.log
LOOPS=50000
# Define the return value
RT_NO_RESOURCE=100
RT_NO_DEV=101
RT_NO_TOOL=102
RT_FAILED=119
RT_OK=0
usage()
{
echo "Should input as follow:"
printf "\t$SCRIPT_NAME [Module]\n"
echo
echo "Example:"
printf "\t$SCRIPT_NAME # Run all modules testcase $LOOPS times\n"
printf "\t$SCRIPT_NAME mpp # Only run MPP module testcase once time\n"
}
COLOR_BEGIN="\033["
COLOR_RED="${COLOR_BEGIN}41;37m"
COLOR_YELLOW="${COLOR_BEGIN}43;30m"
COLOR_WHITE="${COLOR_BEGIN}47;30m"
COLOR_END="\033[0m"
pr_err()
{
echo -e "${COLOR_RED}*** $*${COLOR_END}"
}
pr_warn()
{
echo -e "${COLOR_YELLOW}!!! $*${COLOR_END}"
}
pr_info()
{
echo -e "${COLOR_WHITE}>>> $*${COLOR_END}"
}
run_cmd()
{
echo
pr_info $1
echo
eval $1
}
# $1 - msg
# $2 - cnt
state_log()
{
echo
pr_info "****************************************************************"
pr_info "$2 Run burn-in test of $1 ..."
pr_info "****************************************************************"
echo
MOD_CNT=0
printf "\n$2 The test result of $1\n" >> $RESULT_FILE
echo ----------------------------------------------------- >> $RESULT_FILE
}
check_date()
{
CUR_TIME=`date +%Y-%m-%d_%H:%M:%S`
pr_info "Current time: $CUR_TIME"
YEAR=$(date +%Y)
if [ $YEAR -lt 2024 ]; then
pr_warn "It better to set the system date & time first."
printf "Set system date & time:\n\tdate -s 202405201314\n"
fi
}
# $1 - module name
module_start()
{
MOD_CNT=`expr $MOD_CNT + 1`
echo
echo $MOD_CNT") Test" $1 ...
echo -----------------------------------------------------------------
}
# $1 - module name
# $2 - result string
module_end()
{
MOD_NAME=$1
RESULT=$2
ARG=$3
echo
echo -----------------------------------------------------------------
echo $MOD_NAME $ARG is $RESULT
CUR_TIME=`date +%Y-%m-%d_%H:%M:%S`
if [ "x$ARG" = "x" ]; then
printf "%2s) %-10s is %-8s\t[%s]\n" $MOD_CNT $MOD_NAME $RESULT $CUR_TIME >> $RESULT_FILE
else
printf "%2s) %-6s %-3s is %-8s\t[%s]\n" $MOD_CNT $MOD_NAME $ARG $RESULT $CUR_TIME >> $RESULT_FILE
fi
echo
pr_info "Current time: $CUR_TIME"
}
# $1 - the full path name
dev_is_exist()
{
if [ -c $1 ] || [ -b $1 ]; then
ls -l $1
return 0
else
pr_err "The device $1 does not exist!"
return 1
fi
}
# $1 - the command name
cmd_is_exist()
{
which $1 > /dev/null
if [ $? -eq 0 ]; then
return 0
else
pr_err "The command $1 does not exist!"
return 1
fi
}
# $1 - the full path name
file_is_exist()
{
if [ -f $1 ]; then
return 0
else
pr_err "The file $1 does not exist!"
return 1
fi
}
# $1 - the full path name
folder_is_exist()
{
if [ -d $1 ]; then
return 0
else
pr_err "The folder $1 does not exist!"
return 1
fi
}
bi_prepare()
{
file_is_exist /usr/bin/which
if [ $? -ne 0 ]; then
pr_warn "Need enable ifconfig in Busybox menuconfig"
exit $RT_NO_TOOL
fi
LOGLEVEL=`cat /proc/sys/kernel/printk | awk '{print $1}'`
if [ $LOGLEVEL -lt 7 ]; then
run_cmd "echo 7 > /proc/sys/kernel/printk"
fi
}
bi_exit()
{
if [ $LOGLEVEL -lt 7 ]; then
run_cmd "echo $LOGLEVEL > /proc/sys/kernel/printk"
fi
cd / > /dev/null
}
###############################################################################
# The burn-in test entry of each module
# Name format: bi_*
###############################################################################
bi_resource_available()
{
if [ -d /mnt/udisk/aic_test ]; then
RES_DIR=/mnt/udisk/aic_test
return 1
elif [ -d /mnt/sdcard/aic_test ]; then
RES_DIR=/mnt/sdcard/aic_test
return 1
elif [ -d /aic_test ]; then
RES_DIR=/aic_test
return 1
fi
return 0
}
bi_mpp()
{
RET=$RT_NO_RESOURCE
VIDEO_DIR=$RES_DIR/video
if [ ! -d $VIDEO_DIR ]; then
pr_info "No video folder found"
return $RT_NO_RESOURCE
fi
APP=/usr/local/bin/player_demo
cmd_is_exist $APP
if [ $? -ne 0 ]; then
pr_warn "Need enable $(basename $APP) in SDK menuconfig"
return $RT_NO_TOOL
fi
for file in $VIDEO_DIR/*.mp4
do
if [ ${#file} -eq 0 ]; then
continue
fi
if [ ! -f $file ]; then
continue
fi
run_cmd "$APP -i $file"
if [ $? -ne 0 ]; then
pr_err "Failed to player $file"
return $RT_FAILED
fi
done
return $RET
}
bi_custom()
{
RET=$RT_NO_RESOURCE
cd $RES_DIR || exit $RT_NO_RESOURCE
for case in test_*.sh
do
if [ ${#file} -eq 0 ]; then
continue
fi
if [ ! -x $case ]; then
pr_info "Add executable attibute to $case"
chmod +x $case
fi
run_cmd "./$case"
TEMP=$?
echo
if [ $TEMP -eq 0 ]; then
echo "$case is OK"
echo " $case is OK" >> $RESULT_FILE
HAVE_VALID_TESTCASE=1
RET=0
elif [ $TEMP -eq $RT_NO_RESOURCE ] || [ $TEMP -eq $RT_NO_DEV ] \
|| [ $TEMP -eq $RT_NO_TOOL ]; then
echo "$case is Ignored"
echo " $case is Ignored" >> $RESULT_FILE
else
echo "$case is Failed"
exit $RT_FAILED
fi
done
cd - > /dev/null || exit $RT_NO_RESOURCE
return $RET
}
# $1 - module name
# $2 - argument1
bi_test()
{
MOD_NAME=`echo $1 | tr a-z A-Z`
module_start $MOD_NAME
bi_$1 $2
RET=$?
if [ $RET -eq 0 ]; then
module_end $MOD_NAME "OK" $2
HAVE_VALID_TESTCASE=1
elif [ $RET -eq $RT_NO_RESOURCE ] || [ $RET -eq $RT_NO_DEV ] || [ $RET -eq $RT_NO_TOOL ]; then
module_end $MOD_NAME "Ignored" $2
else
module_end $MOD_NAME "Failed" $2
exit $RT_FAILED
fi
}
###############################################################################
# The main process of burn-in test
###############################################################################
if [ $# -gt 1 ]; then
usage
exit 1
elif [ $# -gt 0 ]; then
if [ "$MOD_NAME" = "help" ]; then
usage
exit $RT_OK
fi
fi
if [ "x$MOD_NAME" = "xstop" ]; then
exit $RT_OK
fi
bi_resource_available
if [ $? -eq 0 ]; then
exit $RT_OK
fi
check_date
pr_info "Prepares to run burn-in test ..."
bi_prepare
# Only test one module
if [ ! "x$MOD_NAME" = "x" ] && [ ! "x$MOD_NAME" = "xstart" ]; then
MOD_CNT=0
bi_test $MOD_NAME $3
bi_exit
exit $?
fi
printf "---------------- Burn-in test report ----------------\n\n" > $RESULT_FILE
printf "Test Time: $RUN_TIME\n" >> $RESULT_FILE
i=1
HAVE_VALID_TESTCASE=0
while [ $i -le $LOOPS ]
do
state_log "Multimedia" "$i/$LOOPS"
bi_test mpp
state_log "Custom" "$i/$LOOPS"
bi_test custom
if [ $HAVE_VALID_TESTCASE -eq 0 ]; then
echo
pr_warn "There is no valid testcase, so exit"
exit $RT_NO_RESOURCE
fi
i=`expr $i + 1`
done
grep "Failed" $RESULT_FILE
if [ $? -eq 0 ]; then
printf "\nThere is some error in test!\n"
else
printf "\nYEAH!! All testcase is OK!\n"
fi
printf "Test report is saved in $RESULT_FILE:\n\n"
cat $RESULT_FILE