Merge pull request #1237 from syureyi/mobileutat

Mobileutat
This commit is contained in:
huili2 2014-07-31 17:15:16 +08:00
commit ecfd7df157
11 changed files with 446 additions and 16 deletions

4
autotest/unitTest/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.DS_Store
./ios/report/
./android/report/

View File

@ -0,0 +1,106 @@
#!/bin/bash
AUTO_TEST_ANDROID_PATH=`pwd`
AUTO_TEST_SRC_PATH="../../../"
AUTO_TEST_RES_PATH="${AUTO_TEST_ANDROID_PATH}/report"
mkdir -p ${AUTO_TEST_RES_PATH}
#Prepare android build enviroment
echo please set the enviroment variable as:
echo export ANDROID_HOME="path of android sdk"
echo export ANDROID_NDK_HOME="path of android ndk"
ANDROID_SDK_PATH=${ANDROID_HOME}
ANDROID_NDK_PATH=${ANDROID_NDK_HOME}
ANDROID_MAKE_PARAMS="OS=android NDKROOT=${ANDROID_NDK_PATH} TARGET=android-19"
if [ "#${ANDROID_SDK_PATH}" = "#" ]
then
echo Please set ANDROID_HOME with the path of Android SDK
exit 1
fi
if [ "#${ANDROID_NDK_PATH}" = "#" ]
then
echo Please set ANDROID_NDK_HOME with the path of Android NDK
exit 1
fi
#make build
cd ${AUTO_TEST_SRC_PATH}
find ./ -name *.o -exec rm -f {} \;
find ./ -name *.d -exec rm -f {} \;
make clean
make $ANDROID_MAKE_PARAMS test
if [ $? -ne 0 ]
then
echo Build error,check with the trace of make
exit 1
fi
#find apk
echo Start to find unittest apk
apk_name=`find ./ -name MainActivity-debug.apk`
if [ "#${apk_name}" = "#" ]
then
echo Fail to find encoder APK.
exit 1
fi
#prepare devices
ADB=${ANDROID_SDK_PATH}/platform-tools/adb
#get devices
devices=`$ADB devices | awk -F" " '/\tdevice/{print $1}'`
if [ "#$devices" = "#" ];then
echo "Have not any android devices."
exit 1
fi
#run apk
run_apk() {
local apk=$1;
local rand=` date +%s`
apk_id="com.cisco.codec.unittest"
apk_main="com.cisco.codec.unittest/.MainActivity"
test_path="/sdcard/welsenc"
log_grep_params="welsenc"
test_res=./res
xml_file="sdcard/codec_unittest.xml"
for dev in $devices; do
#dev_info_file=${AUTO_TEST_RES_PATH}/${dev}.log
report_file=${AUTO_TEST_RES_PATH}/codec_unittest_${dev}_${rand}.xml
$ADB -s $dev uninstall ${apk_id}
$ADB -s $dev install -r ${apk}
#TODO: output more info about android device such as name,cpu,memory,and also power comsumption.
echo `$ADB -s $dev shell cat /system/build.prop |grep ro.product.model | awk -F"=" '{print $2}'`>${dev_info_file}
$ADB -s $dev push ${test_res} /sdcard/res
$ADB -s $dev shell am start --es path "$xml_file" -n ${apk_main}
# check whetehr the app is finished every 2 sec
for (( ; ; )); do
$ADB -s $dev shell ps | grep ${apk_id}
if [ $? -ne 0 ]; then
sleep 2
$ADB -s $dev shell ps | grep ${apk_id}
[ $? -ne 0 ] && break
fi
sleep 2
done
# kill logcat
$ADB -s $dev pull ${xml_file} ${report_file}
#delete the res
$ADB -s $dev shell rm -rf ${xml_file}
$ADB -s $dev shell rm -rf /sdcard/res
done
}
for apk in ${apk_name};do
run_apk $apk;
if [ $? -ne 0 ]
then
echo There is something wrong happened when run ${apk_name}
exit 1
else
echo Finished unit test on android
echo The test result is at ./android/report/xxx.xml
echo xxxxxxxxxxxxxxxAndroid unittest Endxxxxxxxxxxxxxxxx
fi
done

View File

@ -0,0 +1,163 @@
#!/bin/bash
##############################################################
#Build ios test ref app
#set the default configuration
CODEC_TEST_IOS_ARCH="armv7"
CODEC_TEST_IOS_PLATFORM="iphoneos"
CODEC_TEST_IOS_DEBUG_RELEASE="Release"
CODEC_TEST_IOS_REPORT_SUBFOLDER="release"
buildXcodeProject()
{
xcodebuild ARCHS="${CODEC_TEST_IOS_ARCH}" VALID_ARCHS="${CODEC_TEST_IOS_ARCH}" ONLY_ACTIVE_ARCH=NO -project $1 -target $2 -configuration $3 -sdk ${CODEC_TEST_IOS_PLATFORM} clean build
if [ $? -eq 0 ]; then
echo "build $1 $3 successfully"
else
echo "build $1 $3 fail"
exit 1
fi
}
iosUnitTest()
{
if [ $# -gt 2 ]; then
echo "Please use command $0 [armv7/armv7s/arm64] [release/debug]"
exit 1
fi
CODEC_TEST_XCODE_PROJECT_NAME="${AUTO_TEST_SRC_PATH}/test/build/ios/codec_unittest/codec_unittest.xcodeproj/"
CODEC_TEST_IOS_PROJECT_NAME="codec_unittest"
CODEC_TEST_IOS_PROJECT_PATH="${AUTO_TEST_SRC_PATH}/test/build/ios/codec_unittest/build"
CODEC_TEST_IOS_APP=${CODEC_TEST_IOS_PROJECT_PATH}/${CODEC_TEST_IOS_DEBUG_RELEASE}-iphoneos/${CODEC_TEST_IOS_PROJECT_NAME}.app
CODEC_TEST_IOS_APP_ID="com.cisco.codec-unittest"
CODEC_TEST_RES=${AUTO_TEST_SRC_PATH}/res
CODEC_TEST_LOG="codec_unittest"
for PARAM in $*; do
if [ "release" = "${PARAM}" ]; then
CODEC_TEST_IOS_DEBUG_RELEASE="Release"
CODEC_TEST_IOS_REPORT_SUBFOLDER="release"
elif [ "debug" = "${PARAM}" ]; then
CODEC_TEST_IOS_DEBUG_RELEASE="Debug"
CODEC_TEST_IOS_REPORT_SUBFOLDER="debug"
elif [ "armv7" = "${PARAM}" ];then
CODEC_TEST_IOS_ARCH="armv7"
elif [ "armv7s" = "${PARAM}" ];then
CODEC_TEST_IOS_ARCH="armv7s"
elif [ "arm64" = "${PARAM}" ];then
CODEC_TEST_IOS_ARCH="arm64"
else
echo parameters are illegal!!!, please have a check.
exit 1
fi
done
cd ${AUTO_TEST_SRC_PATH}
IOS_MAKE_PARAMS="OS=ios ARCH=${CODEC_TEST_IOS_ARCH}"
############make build
find ./ -name *.o -exec rm -rf {} \;
find ./ -name *.d -exec rm -rf {} \;
make clean
make ${IOS_MAKE_PARAMS} test
echo "Codec test will run on ${CODEC_TEST_IOS_PLATFORM} with ${CODEC_TEST_IOS_DEBUG_RELEASE}"
cd ${AUTO_TEST_IOS_PATH}
buildXcodeProject ${CODEC_TEST_XCODE_PROJECT_NAME} ${CODEC_TEST_IOS_PROJECT_NAME} ${CODEC_TEST_IOS_DEBUG_RELEASE} ${CODEC_TEST_IOS_PLATFORM}
##############run on ios devices#########################
# for real device
if [ ! -d ${CODEC_TEST_IOS_APP} ] ; then
echo "${CODEC_TEST_IOS_APP} is not found"
exit 1
else
echo "Find app ${CODEC_TEST_IOS_APP}"
fi
#ensure instruments not runing
echo "Try to kill the runing instruments"
pids_str=`ps x -o pid,command | grep -v grep | grep "instruments" | awk '{printf "%s,", $1}'`
instruments_pids="${pids_str//,/ }"
for pid in ${instruments_pids}; do
echo "Found instruments ${pid}. Killing..."
kill -9 ${pid} && wait ${pid} &> /dev/null
done
DEVICES=`system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'`
if [ "${DEVICES}#" == "#" ]
then
echo "Can not find any connected device! please check device is connected to MAC!"
exit 1
else
rand=`date +%s`
for DEVICE_ID in ${DEVICES}
do
echo "Try to run on device:${DEVICE_ID}"
#uninstall the application from device to remove the last result
${AUTO_TEST_IOS_SCRIPT_PATH}/fruitstrap uninstall --bundle ${CODEC_TEST_IOS_APP_ID} --id ${DEVICE_ID}
if [ $? -ne 0 ]; then
echo uninstall application: ${CODEC_TEST_IOS_APP} from device: ${DEVICE_ID} is failed!
fi
#install the application
${AUTO_TEST_IOS_SCRIPT_PATH}/fruitstrap install --bundle ${CODEC_TEST_IOS_APP} --id ${DEVICE_ID}
if [ $? -ne 0 ]; then
echo install application: ${CODEC_TEST_IOS_APP} to device: ${DEVICE_ID} is failed!
exit 1
fi
${AUTO_TEST_IOS_SCRIPT_PATH}/iFileTransfer -o copy -id ${DEVICE_ID} -app ${CODEC_TEST_IOS_APP_ID} -from ${CODEC_TEST_RES}
instruments -w ${DEVICE_ID} -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate ${CODEC_TEST_IOS_APP} -e UIASCRIPT ${AUTO_TEST_IOS_SCRIPT_PATH}/uiascript.js -e UIARRESULTPATH /tmp/
#copy to report folder
${AUTO_TEST_IOS_SCRIPT_PATH}/iFileTransfer -o download -id ${DEVICE_ID} -app ${CODEC_TEST_IOS_APP_ID} -from /Documents/${CODEC_TEST_LOG}.xml -to ${CODEC_TEST_IOS_REPORT_PATH}/${CODEC_TEST_LOG}_${DEVICE_ID}_${rand}_${CODEC_TEST_IOS_ARCH}.xml
if [ $? -ne 0 ]; then
echo "download file: ${CODEC_TEST_LOG}.xml from ${CODEC_TEST_IOS_APP_ID} is failed!"
exit 1
fi
done
fi
}
AUTO_TEST_IOS_PATH=`pwd`
AUTO_TEST_SRC_PATH="../../.."
AUTO_TEST_IOS_SCRIPT_PATH="../../performanceTest/ios"
CODEC_TEST_IOS_REPORT_PATH="${AUTO_TEST_IOS_PATH}/report"
if [ ! -d ${CODEC_TEST_IOS_REPORT_PATH} ]
then
mkdir -p ${CODEC_TEST_IOS_REPORT_PATH}
fi
#start to run unittest,default run the xcode at arch armv7 with release
iosUnitTest armv7 release
if [ $? -ne 0 ]; then
echo "Running Unittest demo with armv7 is failed!"
exit 1
else
echo Finished unittest with armv7 on ios devices
echo the test result is generated at ./ios/report/xx.xml
fi
#start to run unittest,run the xcode at arch arm64 with release
iosUnitTest arm64 release
if [ $? -ne 0 ]; then
echo "Running Unittest demo with arm64 is failed!"
exit 1
else
echo Finished unittest with arm64 on ios devices
echo the test result is generated at ./ios/report/xx.xml
fi
echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxIOS unittest Endxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#TODO:according to the trace of instruments to do some analysis
#find ${AUTO_TEST_IOS_SCRIPT_PATH} -name *.trace -exec rm -rf {} \;
rm -rf *.trace

View File

@ -0,0 +1,43 @@
if [ $# -ne 1 ];then
echo Please input $0 [report dir]
exit 1
fi
REPORT=$1
if [ ! -e ${REPORT} ];then
echo "The directory of ${REPORT} dose't not exit,please check the test log"
exit 1
fi
UT_Failed_Num=0
parse_unittest() {
res=$1
echo ${res}
echo Start to parse unittest results of $res
if [ -e $res ];then
tests=`cat $res | grep "<testsuites" | awk -F " " '{print $2;}' | awk -F "\"" '{print $2;}'`
fails=`cat $res | grep "<testsuites" | awk -F " " '{print $3;}' | awk -F "\"" '{print $2;}'`
times=`cat $res | grep "<testsuites" | awk -F " " '{print $6;}' | awk -F "\"" '{print $2;}'`
waste=`cat $res | grep "<testsuites" | awk -F " " '{print $7;}' | awk -F "\"" '{print $2;}'`
msg="Total testcases: $tests, failed: $fails,time:$waste seconds, at$times,xml:$res"
echo ${msg}
UT_Failed_Num=$((${UT_Failed_Num}+${fails}))
fi
}
xmlcount=`ls $REPORT | wc -l`
xmlfiles=`ls $REPORT`
if [ ${xmlcount} -eq 0 ];
then echo There is nothing xml files generated at $REPORT
exit 1
fi
for file in $xmlfiles;do
parse_unittest $REPORT/$file
done
if [ ${UT_Failed_Num} = "0" ];then
echo Total $xmlcount files at $REPORT,all sucessful
exit 0
else
echo Total $xmlcount files at $REPORT,${UT_Failed_Num} error cases
exit 2
fi

View File

@ -0,0 +1,86 @@
#!/bin/bash
AUTO_TEST_PATH=`pwd`
IOS=0
ANDROID=0
#Prepare GTEST
AUTO_TEST_SRC_PATH="../../"
cd ${AUTO_TEST_SRC_PATH}
if [ ! -d "./gtest" ]
then
make gtest-bootstrap
fi
cd ${AUTO_TEST_PATH}
#To find whether have android devices
echo please set the enviroment variable as:
echo export ANDROID_HOME="path of android sdk"
echo export ANDROID_NDK_HOME="path of android ndk"
ANDROID_SDK_PATH=${ANDROID_HOME}
ANDROID_NDK_PATH=${ANDROID_NDK_HOME}
if [ "#${ANDROID_SDK_PATH}" = "#" ]
then
echo Please set ANDROID_HOME with the path of Android SDK
exit 1
fi
if [ "#${ANDROID_NDK_PATH}" = "#" ]
then
echo Please set ANDROID_NDK_HOME with the path of Android NDK
exit 1
fi
#prepare devices
ADB=${ANDROID_SDK_PATH}/platform-tools/adb
#get devices
devices=`$ADB devices | awk -F" " '/\tdevice/{print $1}'`
if [ "#$devices" = "#" ];then
echo "Can not find any android devices!"
else
echo Start to run the unittest on android devices
ANDROID=1
cd ./android
bash run_AutoTest_android.sh
cd ${AUTO_TEST_PATH}
if [ $? -ne 0 ];then
echo There is something wrong happened when runing unittest on android devices,please to check
fi
fi
#To find whether have ios devices
DEVICES=`system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'`
if [ "${DEVICES}#" == "#" ]
then
echo "Can not find any ios devices!"
else
echo Start to run the unittest on ios devices
IOS=1
cd ./ios
bash run_AutoTest_ios.sh
cd ${AUTO_TEST_PATH}
if [ $? -ne 0 ];then
echo There is something wrong happened when runing unittest on ios devices,please to check
fi
fi
#To parse the unit test result file to find whether have failures
if [ ${ANDROID} = "1" ];then
bash run_ParseUTxml.sh ./android/report
ret=$?
if [ ${ret} -eq 0 ];then
echo Unit test run on the android devices have not any failure case
elif [ ${ret} -eq 2 ];then
echo Unit test have cases failed,please check
elif [ ${ret} -eq 1 ];then
echo Unit test run failed
fi
fi
if [ ${IOS} = "1" ];then
bash run_ParseUTxml.sh ./ios/report
ret=$?
if [ $ret -eq 0 ];then
echo Unit test run on the ios devices have not any failure case
elif [ $ret -eq 2 ];then
echo Unit test have cases failed,please check
elif [ $ret -eq 1 ];then
echo Unit test run failed
fi
fi

View File

@ -22,7 +22,11 @@ bool YUVPixelDataGenerator (uint8_t* pPointer, int32_t iWidth, int32_t iHeight,
}
FileInputStream fileStream;
#if defined(ANDROID_NDK)
if (!fileStream.Open ("/sdcard/res/CiscoVT2people_160x96_6fps.yuv")) {
#else
if (!fileStream.Open ("res/CiscoVT2people_160x96_6fps.yuv")) {
#endif
return false;
}
if (fileStream.read (sBuf.data(), kiFrameSize) == kiFrameSize) {

View File

@ -5,7 +5,7 @@
#include "utils/InputStream.h"
#include "BaseDecoderTest.h"
#include "BaseEncoderTest.h"
#include <string>
static void UpdateHashFromFrame (const SFrameBSInfo& info, SHA1Context* ctx) {
for (int i = 0; i < info.iLayerNum; ++i) {
const SLayerBSInfo& layerInfo = info.sLayerInfo[i];
@ -93,8 +93,12 @@ class DecodeEncodeTest : public ::testing::TestWithParam<DecodeEncodeFileParam>,
TEST_P (DecodeEncodeTest, CompareOutput) {
DecodeEncodeFileParam p = GetParam();
#if defined(ANDROID_NDK)
std::string filename = std::string ("/sdcard/") + p.fileName;
ASSERT_TRUE (Open (filename.c_str()));
#else
ASSERT_TRUE (Open (p.fileName));
#endif
EncodeStream (this, CAMERA_VIDEO_REAL_TIME, p.width, p.height, p.frameRate, SM_SINGLE_SLICE, false, 1, this);
unsigned char digest[SHA_DIGEST_LENGTH];
SHA1Result (&ctx_, digest);
@ -102,11 +106,11 @@ TEST_P (DecodeEncodeTest, CompareOutput) {
CompareHash (digest, p.hashStr);
}
}
static const DecodeEncodeFileParam kFileParamArray[] = {
{"res/test_vd_1d.264", "a4c7299ec1a7bacd5819685e221a79ac2b56cdbc", 320, 192, 12.0f},
{"res/test_vd_rc.264", "106fd8cc978c1801b0d1f8297e9b7f17d5336e15", 320, 192, 12.0f},
};
INSTANTIATE_TEST_CASE_P (DecodeEncodeFile, DecodeEncodeTest,
::testing::ValuesIn (kFileParamArray));

View File

@ -1,6 +1,7 @@
#include <gtest/gtest.h>
#include "utils/HashFunctions.h"
#include "BaseDecoderTest.h"
#include <string>
static void UpdateHashFromPlane (SHA1Context* ctx, const uint8_t* plane,
int width, int height, int stride) {
@ -52,7 +53,12 @@ class DecoderOutputTest : public ::testing::WithParamInterface<FileParam>,
TEST_P (DecoderOutputTest, CompareOutput) {
FileParam p = GetParam();
#if defined(ANDROID_NDK)
std::string filename = std::string ("/sdcard/") + p.fileName;
DecodeFile (filename.c_str(), this);
#else
DecodeFile (p.fileName, this);
#endif
unsigned char digest[SHA_DIGEST_LENGTH];
SHA1Result (&ctx_, digest);
@ -60,7 +66,6 @@ TEST_P (DecoderOutputTest, CompareOutput) {
CompareHash (digest, p.hashStr);
}
}
static const FileParam kFileParamArray[] = {
{"res/test_vd_1d.264", "5827d2338b79ff82cd091c707823e466197281d3"},
{"res/test_vd_rc.264", "eea02e97bfec89d0418593a8abaaf55d02eaa1ca"},

View File

@ -1,7 +1,7 @@
#include <gtest/gtest.h>
#include "utils/HashFunctions.h"
#include "BaseEncoderTest.h"
#include <string>
static void UpdateHashFromFrame (const SFrameBSInfo& info, SHA1Context* ctx) {
for (int i = 0; i < info.iLayerNum; ++i) {
const SLayerBSInfo& layerInfo = info.sLayerInfo[i];
@ -57,8 +57,12 @@ class EncoderOutputTest : public ::testing::WithParamInterface<EncodeFileParam>,
TEST_P (EncoderOutputTest, CompareOutput) {
EncodeFileParam p = GetParam();
#if defined(ANDROID_NDK)
std::string filename = std::string ("/sdcard/") + p.fileName;
EncodeFile (filename.c_str(), p.usageType , p.width, p.height, p.frameRate, p.slices, p.denoise, p.layers, this);
#else
EncodeFile (p.fileName, p.usageType , p.width, p.height, p.frameRate, p.slices, p.denoise, p.layers, this);
#endif
//will remove this after screen content algorithms are ready,
//because the bitstream output will vary when the different algorithms are added.
unsigned char digest[SHA_DIGEST_LENGTH];
@ -67,7 +71,6 @@ TEST_P (EncoderOutputTest, CompareOutput) {
CompareHash (digest, p.hashStr);
}
}
static const EncodeFileParam kFileParamArray[] = {
{
"res/CiscoVT2people_320x192_12fps.yuv",

View File

@ -28,6 +28,8 @@ public class MainActivity extends Activity {
@Override
public void onDestroy()
{
super.onDestroy();
Log.i("codec_unittest","OnDestroy");
Process.killProcess(Process.myPid());
}
@ -55,7 +57,6 @@ public class MainActivity extends Activity {
Log.i("codec_unittest","codec unittest runing @"+path);
DoUnittest("/sdcard", path);
Log.i("codec_unittest","codec unittest end");
Process.killProcess(Process.myPid());
finish();
}

View File

@ -13,7 +13,7 @@
extern int CodecUtMain(int argc, char** argv);
int GetDocumentPath(char *pPath, unsigned long *pLen)
int DoTest(char *pPath, unsigned long *pLen)
{
if (!pLen) return 1;
unsigned long uPathLen = *pLen;
@ -27,10 +27,17 @@ int GetDocumentPath(char *pPath, unsigned long *pLen)
return 2;
}
NSString* document = [paths objectAtIndex:0];
NSFileManager* manager = [NSFileManager defaultManager];
[manager changeCurrentDirectoryPath:[document stringByExpandingTildeInPath]];
NSString* escapedPath = [document stringByReplacingOccurrencesOfString:@" " withString:@"\\ "];
unsigned long uDocumentPathLen = [escapedPath length];
uPathLen= (uDocumentPathLen <= uPathLen) ? uDocumentPathLen : uPathLen;
memcpy(pPath,[escapedPath UTF8String],uPathLen);
char path[1024] = "";
sprintf(path, "%s%s",pPath,"/codec_unittest.xml");
int argc =2;
char* argv[]={(char*)"codec_unittest",path};
CodecUtMain(argc,argv);
return 0;
}
@ -42,18 +49,22 @@ int main(int argc, char * argv[])
//Call the UT
#ifdef IOS_SIMULATOR
const char* path="/tmp/codec_unittest.xml";
#else
char xmlWritePath[1024] = "";
unsigned long uPathLen = 1024;
char path[1024] = "";
GetDocumentPath(xmlWritePath,&uPathLen);
sprintf(path, "%s%s",xmlWritePath,"/codec_unittest.xml");
#endif
argc =2;
argv[0]=(char*)"codec_unittest";
argv[1]=path;
CodecUtMain(argc,argv);
abort();
#else
char xmlWritePath[1024] = "";
unsigned long uPathLen = 1024;
if(DoTest(xmlWritePath,&uPathLen) == 0)
NSLog(@"Unit test running sucessfully on devices");
else
NSLog(@"Unit test runing failed on devices");
abort();
#endif
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}