diff --git a/README.md b/README.md index 06c4701a1..c12ea307b 100755 --- a/README.md +++ b/README.md @@ -422,6 +422,7 @@ See also: [Performance Test Guide](https://github.com/winlinvip/simple-rtmp-serv * nginx v1.5.0: 139524 lines
### History +* v1.0, 2014-03-04, add gest framework for utest, build success. * v1.0, 2014-03-02, add wiki [srs-librtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLibrtmp), [srs for arm](https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLinuxArm), [product](https://github.com/winlinvip/simple-rtmp-server/wiki/Product) * v1.0, 2014-03-02, srs-librtmp, client publish/play library like librtmp. * v1.0, 2014-03-01, modularity, extract core/kernel/rtmp/app/main module. diff --git a/trunk/auto/utest.sh b/trunk/auto/utest.sh index 1a79d4dfc..efe693edd 100644 --- a/trunk/auto/utest.sh +++ b/trunk/auto/utest.sh @@ -5,19 +5,22 @@ # $SRS_MAKEFILE the makefile name. ie. Makefile # # $APP_NAME the app name to output. ie. srs_utest +# $MODULE_DIR the src dir of utest code. ie. src/utest -UTEST_OBJS=${SRS_OBJS}/utest -FILE=${UTEST_OBJS}/${SRS_MAKEFILE} +FILE=${SRS_OBJS}/utest/${SRS_MAKEFILE} +# create dir for Makefile +mkdir -p ${SRS_OBJS}/utest -# dirs relative to objs/utest -GTEST_DIR=../gtest -UTEST_SRC=../../src/utest -UTEST_APP=../${APP_NAME} - -mkdir -p ${UTEST_OBJS} +# the prefix to generate the objs/utest/Makefile +# dirs relative to current dir(objs/utest), it's trunk/objs/utest +# trunk of srs, which contains the src dir, relative to objs/utest, it's trunk +SRS_TRUNK_PREFIX=../.. +# gest dir, relative to objs/utest, it's trunk/objs/gtest +GTEST_DIR=${SRS_TRUNK_PREFIX}/${SRS_OBJS}/gtest cat << END > ${FILE} -# generate *.a, *.o at current dir. +# user must run make the ${SRS_OBJS}/utest dir +# at the same dir of Makefile. # A sample Makefile for building Google Test and using it in user # tests. Please tweak it to suit your environment and project. You @@ -48,7 +51,7 @@ CXXFLAGS += -g -Wall -Wextra -O0 # All tests produced by this Makefile. Remember to add new tests you # created to the list. -TESTS = ${UTEST_APP} +TESTS = ${SRS_TRUNK_PREFIX}/${SRS_OBJS}/${APP_NAME} # All Google Test headers. Usually you shouldn't change this # definition. @@ -90,14 +93,86 @@ gtest_main.a : gtest-all.o gtest_main.o # gtest_main.a, depending on whether it defines its own main() # function. -srs_utest.o : ${UTEST_SRC}/srs_utest.cpp - \$(CXX) \$(CPPFLAGS) \$(CXXFLAGS) -I${UTEST_SRC} -c ${UTEST_SRC}/srs_utest.cpp -o \$@ -SRS_UTEST_OBJS = srs_utest.o +##################################################################################### +##################################################################################### +# SRS(Simple RTMP Server) utest section +##################################################################################### +##################################################################################### -${UTEST_APP} : \$(SRS_UTEST_OBJS) gtest_main.a - \$(CXX) \$(CPPFLAGS) \$(CXXFLAGS) -lpthread \$^ -o \$@ END +##################################################################################### +# Includes, the include dir. +echo "# Includes, the include dir." >> ${FILE} +# +# current module header files +echo -n "SRS_UTEST_INC = -I${SRS_TRUNK_PREFIX}/${MODULE_DIR} " >> ${FILE} +# +# depends module header files +for item in ${MODULE_DEPENDS[*]}; do + DEP_INCS_NAME="${item}_INCS" + echo -n "-I${SRS_TRUNK_PREFIX}/${!DEP_INCS_NAME} " >> ${FILE} +done +# +# depends library header files +for item in ${ModuleLibIncs[*]}; do + echo -n "-I${SRS_TRUNK_PREFIX}/${item} " >> ${FILE} +done +echo "" >> ${FILE}; echo "" >> ${FILE} + +##################################################################################### +# Depends, the depends objects +echo "# Depends, the depends objects" >> ${FILE} +# +# current module header files +echo -n "SRS_UTEST_DEPS = " >> ${FILE} +for item in ${MODULE_OBJS[*]}; do + FILE_NAME=${item%.*} + echo -n "${SRS_TRUNK_PREFIX}/${SRS_OBJS}/${FILE_NAME}.o " >> ${FILE} +done +echo "" >> ${FILE}; echo "" >> ${FILE} +# +echo "# Depends, utest header files" >> ${FILE} +DEPS_NAME="UTEST_DEPS" +echo -n "${DEPS_NAME} = " >> ${FILE} +for item in ${MODULE_FILES[*]}; do + HEADER_FILE="${SRS_TRUNK_PREFIX}/${MODULE_DIR}/${item}.hpp" + echo -n " ${HEADER_FILE}" >> ${FILE} +done +echo "" >> ${FILE}; echo "" >> ${FILE} + +##################################################################################### +# Objects, build each object of utest +echo "# Objects, build each object of utest" >> ${FILE} +# +MODULE_OBJS=() +for item in ${MODULE_FILES[*]}; do + MODULE_OBJS="${MODULE_OBJS[@]} ${item}.o" + cat << END >> ${FILE} +${item}.o : \$(${DEPS_NAME}) ${SRS_TRUNK_PREFIX}/${MODULE_DIR}/${item}.cpp \$(SRS_UTEST_DEPS) + \$(CXX) \$(CPPFLAGS) \$(CXXFLAGS) \$(SRS_UTEST_INC) -c ${SRS_TRUNK_PREFIX}/${MODULE_DIR}/${item}.cpp -o \$@ +END +done +echo "" >> ${FILE} + +##################################################################################### +# App for utest +# +# link all depends libraries +echo "# link all depends libraries" >> ${FILE} +echo -n "DEPS_LIBRARIES_FILES = " >> ${FILE} +for item in ${ModuleLibFiles[*]}; do + echo -n "${SRS_TRUNK_PREFIX}/${item} " >> ${FILE} +done +echo "" >> ${FILE}; echo "" >> ${FILE} +# +echo "# generate the utest binary" >> ${FILE} +cat << END >> ${FILE} +${SRS_TRUNK_PREFIX}/${SRS_OBJS}/${APP_NAME} : \$(SRS_UTEST_DEPS) ${MODULE_OBJS} gtest_main.a + \$(CXX) -o \$@ \$(CPPFLAGS) \$(CXXFLAGS) \$^ \$(DEPS_LIBRARIES_FILES) -lpthread -ldl +END + +##################################################################################### # parent Makefile, to create module output dir before compile it. echo " mkdir -p ${SRS_OBJS}/utest" >> ${SRS_MAKEFILE} diff --git a/trunk/configure b/trunk/configure index d671d9295..0f7824584 100755 --- a/trunk/configure +++ b/trunk/configure @@ -54,7 +54,7 @@ SrsLibrtmpSampleEntry="nossl" if [ $SRS_SSL = YES ]; then SrsLibrtmpSampleEntry="ssl";fi # utest make entry, (cd utest; make) SrsUtestMakeEntry="@echo -e \"ignore utest for it's disabled\"" -if [ $SRS_UTEST = YES ]; then SrsUtestMakeEntry="(cd $${SRS_OBJS}/utest; \$(MAKE) ${SRS_MAKEFILE})"; fi +if [ $SRS_UTEST = YES ]; then SrsUtestMakeEntry="(cd ${SRS_OBJS}/utest; \$(MAKE))"; fi ##################################################################################### # colorful summary @@ -187,7 +187,7 @@ MODULE_ID="CORE" MODULE_DEPENDS=() ModuleLibIncs=(${SRS_OBJS}) MODULE_FILES=("srs_core" "srs_core_autofree") -MODULE_DIR="src/core" . auto/modules.sh +CORE_INCS="src/core"; MODULE_DIR=${CORE_INCS} . auto/modules.sh CORE_OBJS="${MODULE_OBJS[@]}" # #Kernel, depends on core, provides error/log/config, nothing about stream information. @@ -195,7 +195,7 @@ MODULE_ID="KERNEL" MODULE_DEPENDS=("CORE") ModuleLibIncs=(${SRS_OBJS}) MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_stream" "srs_kernel_buffer") -MODULE_DIR="src/kernel" . auto/modules.sh +KERNEL_INCS="src/kernel"; MODULE_DIR=${KERNEL_INCS} . auto/modules.sh KERNEL_OBJS="${MODULE_OBJS[@]}" # #RTMP Protocol, depends on core/kernel, provides rtmp/htttp protocol features. @@ -204,7 +204,7 @@ MODULE_DEPENDS=("CORE" "KERNEL") ModuleLibIncs=(${SRS_OBJS} ${LibSSLRoot}) MODULE_FILES=("srs_protocol_amf0" "srs_protocol_io" "srs_protocol_rtmp_stack" "srs_protocol_rtmp" "srs_protocol_handshake" "srs_protocol_utility") -MODULE_DIR="src/rtmp" . auto/modules.sh +RTMP_INCS="src/rtmp"; MODULE_DIR=${RTMP_INCS} . auto/modules.sh RTMP_OBJS="${MODULE_OBJS[@]}" # #App Module @@ -215,7 +215,7 @@ MODULE_FILES=("srs_app_server" "srs_app_conn" "srs_app_client" "srs_app_socket" "srs_app_codec" "srs_app_refer" "srs_app_hls" "srs_app_forward" "srs_app_encoder" "srs_app_http" "srs_app_thread" "srs_app_bandwidth" "srs_app_st" "srs_app_log" "srs_app_config" "srs_app_pithy_print" "srs_app_reload") -MODULE_DIR="src/app" . auto/modules.sh +APP_INCS="src/app"; MODULE_DIR=${APP_INCS} . auto/modules.sh APP_OBJS="${MODULE_OBJS[@]}" # #LIBS Module, build libsrs.a for static link. @@ -223,7 +223,7 @@ MODULE_ID="LIBS" MODULE_DEPENDS=("CORE" "KERNEL" "RTMP") ModuleLibIncs=(${SRS_OBJS}) MODULE_FILES=("srs_librtmp" "srs_lib_simple_socket") -MODULE_DIR="src/libs" . auto/modules.sh +LIBS_INCS="src/libs"; MODULE_DIR=${LIBS_INCS} . auto/modules.sh LIBS_OBJS="${MODULE_OBJS[@]}" # #Main Module @@ -231,13 +231,8 @@ MODULE_ID="MAIN" MODULE_DEPENDS=("CORE" "KERNEL" "RTMP" "APP") ModuleLibIncs=(${LibSTRoot} ${SRS_OBJS}) MODULE_FILES=("srs_main_server" "srs_main_bandcheck") -MODULE_DIR="src/main" . auto/modules.sh -MAIN_OBJS="${MODULE_OBJS[@].o}" - -##################################################################################### -# utest, the unit-test cases of srs, base on gtest1.6 -MODULE_OBJS="${CORE_OBJS[@]} ${KERNEL_OBJS[@]} ${RTMP_OBJS[@]} ${APP_OBJS[@]} ${MAIN_OBJS[@]}" -APP_NAME="srs_utest" . auto/utest.sh +MAIN_INCS="src/main"; MODULE_DIR=${MAIN_INCS} . auto/modules.sh +MAIN_OBJS="${MODULE_OBJS[@]}" ##################################################################################### # Binaries, main entrances, link the module and its depends modules, @@ -263,6 +258,14 @@ BUILD_KEY="bandwidth" APP_MAIN="srs_main_bandcheck" APP_NAME="bandwidth" . auto/ # srs librtmp MODULE_OBJS="${CORE_OBJS[@]} ${KERNEL_OBJS[@]} ${RTMP_OBJS[@]} ${LIBS_OBJS[@]}" BUILD_KEY="librtmp" LIB_NAME="lib/srs_librtmp" . auto/libs.sh +# +# utest, the unit-test cases of srs, base on gtest1.6 +MODULE_FILES=("srs_utest") +ModuleLibIncs=(${SRS_OBJS} ${LibSTRoot}) +ModuleLibFiles=(${LibSTfile} ${LibHttpParserfile} ${LibSSLfile}) +MODULE_DEPENDS=("CORE" "KERNEL" "RTMP" "APP") +MODULE_OBJS="${CORE_OBJS[@]} ${KERNEL_OBJS[@]} ${RTMP_OBJS[@]} ${APP_OBJS[@]}" +MODULE_DIR="src/utest" APP_NAME="srs_utest" . auto/utest.sh echo 'configure ok! ' diff --git a/trunk/src/utest/srs_utest.cpp b/trunk/src/utest/srs_utest.cpp index aed0ed882..b730496b9 100644 --- a/trunk/src/utest/srs_utest.cpp +++ b/trunk/src/utest/srs_utest.cpp @@ -22,3 +22,24 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include + +#include +#include +#include +#include +#include + +// kernel module. +ISrsLog* _srs_log = new ISrsLog(); +ISrsThreadContext* _srs_context = new ISrsThreadContext(); +// app module. +SrsConfig* _srs_config = NULL; +SrsServer* _srs_server = NULL; + +// basic test and samples. +VOID TEST(SampleTest, FastSampleInt64Test){ + EXPECT_EQ(1, (int)sizeof(int8_t)); + EXPECT_EQ(2, (int)sizeof(int16_t)); + EXPECT_EQ(4, (int)sizeof(int32_t)); + EXPECT_EQ(8, (int)sizeof(int64_t)); +} diff --git a/trunk/src/utest/srs_utest.hpp b/trunk/src/utest/srs_utest.hpp index e6a491a85..c36add338 100644 --- a/trunk/src/utest/srs_utest.hpp +++ b/trunk/src/utest/srs_utest.hpp @@ -27,5 +27,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /* #include */ +#include + +#include "gtest/gtest.h" + +// we add an empty macro for upp to show the smart tips. +#define VOID #endif