mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2025-11-29 17:38:24 +08:00
feature(testing-automation): unit tests with Google Framework (#3273)
This commit is contained in:
2
.github/workflows/core_build.yml
vendored
2
.github/workflows/core_build.yml
vendored
@@ -42,6 +42,8 @@ jobs:
|
|||||||
run: source ./apps/ci/ci-worldserver-dry-run.sh
|
run: source ./apps/ci/ci-worldserver-dry-run.sh
|
||||||
- name: Check startup errors
|
- name: Check startup errors
|
||||||
run: source ./apps/ci/ci-error-check.sh
|
run: source ./apps/ci/ci-error-check.sh
|
||||||
|
- name: Run unit tests
|
||||||
|
run: source ./apps/ci/ci-run-unit-tests.sh
|
||||||
|
|
||||||
docker-build:
|
docker-build:
|
||||||
strategy:
|
strategy:
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -61,6 +61,7 @@ nbproject/
|
|||||||
.vscode
|
.vscode
|
||||||
.idea
|
.idea
|
||||||
cmake-build-debug/*
|
cmake-build-debug/*
|
||||||
|
cmake-build-debug-coverage/*
|
||||||
|
|
||||||
#
|
#
|
||||||
# Eclipse
|
# Eclipse
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ set(AC_PATH_ROOT "${CMAKE_SOURCE_DIR}")
|
|||||||
|
|
||||||
# set macro-directory
|
# set macro-directory
|
||||||
list(APPEND CMAKE_MODULE_PATH
|
list(APPEND CMAKE_MODULE_PATH
|
||||||
"${CMAKE_SOURCE_DIR}/src/cmake/macros"
|
"${CMAKE_SOURCE_DIR}/src/cmake/macros"
|
||||||
"${CMAKE_SOURCE_DIR}/deps/cotire/CMake")
|
"${CMAKE_SOURCE_DIR}/deps/cotire/CMake")
|
||||||
|
|
||||||
include(CheckCXXSourceRuns)
|
include(CheckCXXSourceRuns)
|
||||||
include(CheckIncludeFiles)
|
include(CheckIncludeFiles)
|
||||||
@@ -49,7 +49,7 @@ include(conf/dist/config.cmake)
|
|||||||
|
|
||||||
# load custom configurations for cmake if exists
|
# load custom configurations for cmake if exists
|
||||||
if(EXISTS "${CMAKE_SOURCE_DIR}/conf/config.cmake")
|
if(EXISTS "${CMAKE_SOURCE_DIR}/conf/config.cmake")
|
||||||
include(conf/config.cmake)
|
include(conf/config.cmake)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -63,7 +63,7 @@ FOREACH(subdir ${sub_DIRS})
|
|||||||
get_filename_component(MODULENAME ${subdir} NAME)
|
get_filename_component(MODULENAME ${subdir} NAME)
|
||||||
|
|
||||||
if (";${DISABLED_AC_MODULES};" MATCHES ";${MODULENAME};")
|
if (";${DISABLED_AC_MODULES};" MATCHES ";${MODULENAME};")
|
||||||
continue()
|
continue()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
STRING(REGEX REPLACE "^${CMAKE_SOURCE_DIR}/" "" subdir_rel ${subdir})
|
STRING(REGEX REPLACE "^${CMAKE_SOURCE_DIR}/" "" subdir_rel ${subdir})
|
||||||
@@ -77,13 +77,13 @@ CU_RUN_HOOK("AFTER_LOAD_CONF")
|
|||||||
|
|
||||||
# build in Release-mode by default if not explicitly set
|
# build in Release-mode by default if not explicitly set
|
||||||
if( NOT CMAKE_BUILD_TYPE )
|
if( NOT CMAKE_BUILD_TYPE )
|
||||||
set(CMAKE_BUILD_TYPE "Release")
|
set(CMAKE_BUILD_TYPE "Release")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# turn off PCH totally if enabled (hidden setting, mainly for devs)
|
# turn off PCH totally if enabled (hidden setting, mainly for devs)
|
||||||
if( NOPCH )
|
if( NOPCH )
|
||||||
set(USE_COREPCH 0)
|
set(USE_COREPCH 0)
|
||||||
set(USE_SCRIPTPCH 0)
|
set(USE_SCRIPTPCH 0)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(ConfigureBaseTargets)
|
include(ConfigureBaseTargets)
|
||||||
@@ -101,11 +101,11 @@ find_package(ACE REQUIRED)
|
|||||||
find_package(MySQL REQUIRED)
|
find_package(MySQL REQUIRED)
|
||||||
|
|
||||||
if(UNIX AND WITH_PERFTOOLS)
|
if(UNIX AND WITH_PERFTOOLS)
|
||||||
find_package(Gperftools)
|
find_package(Gperftools)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT WITHOUT_GIT)
|
if(NOT WITHOUT_GIT)
|
||||||
find_package(Git)
|
find_package(Git)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Find revision ID and hash of the sourcetree
|
# Find revision ID and hash of the sourcetree
|
||||||
@@ -121,11 +121,11 @@ include(src/cmake/showoptions.cmake)
|
|||||||
add_subdirectory(deps)
|
add_subdirectory(deps)
|
||||||
|
|
||||||
if( SERVERS OR TOOLS)
|
if( SERVERS OR TOOLS)
|
||||||
add_subdirectory(src/common)
|
add_subdirectory(src/common)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if( TOOLS )
|
if( TOOLS )
|
||||||
add_subdirectory(src/tools)
|
add_subdirectory(src/tools)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -138,3 +138,19 @@ CU_RUN_HOOK("BEFORE_SRC_LOAD")
|
|||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
|
|
||||||
CU_RUN_HOOK("AFTER_SRC_LOAD")
|
CU_RUN_HOOK("AFTER_SRC_LOAD")
|
||||||
|
|
||||||
|
if( UNIT_TESTS )
|
||||||
|
# we use this to get code coverage
|
||||||
|
if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(src/cmake/googletest.cmake)
|
||||||
|
fetch_googletest(
|
||||||
|
${PROJECT_SOURCE_DIR}/src/cmake
|
||||||
|
${PROJECT_BINARY_DIR}/googletest
|
||||||
|
)
|
||||||
|
|
||||||
|
enable_testing()
|
||||||
|
add_subdirectory(src/test)
|
||||||
|
endif()
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ CWARNINGS=ON
|
|||||||
CDEBUG=OFF
|
CDEBUG=OFF
|
||||||
CTYPE=Release
|
CTYPE=Release
|
||||||
CSCRIPTS=ON
|
CSCRIPTS=ON
|
||||||
|
CUNIT_TESTS=ON
|
||||||
CSERVERS=ON
|
CSERVERS=ON
|
||||||
CTOOLS=ON
|
CTOOLS=ON
|
||||||
CSCRIPTPCH=OFF
|
CSCRIPTPCH=OFF
|
||||||
|
|||||||
3
apps/ci/ci-run-unit-tests.sh
Executable file
3
apps/ci/ci-run-unit-tests.sh
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
time /home/runner/work/azerothcore-wotlk/azerothcore-wotlk/var/build/obj/src/test/unit_tests
|
||||||
@@ -35,6 +35,7 @@ function comp_configure() {
|
|||||||
|
|
||||||
cmake $SRCPATH -DCMAKE_INSTALL_PREFIX=$BINPATH $DCONF -DSERVERS=$CSERVERS \
|
cmake $SRCPATH -DCMAKE_INSTALL_PREFIX=$BINPATH $DCONF -DSERVERS=$CSERVERS \
|
||||||
-DSCRIPTS=$CSCRIPTS \
|
-DSCRIPTS=$CSCRIPTS \
|
||||||
|
-DUNIT_TESTS=$CUNIT_TESTS \
|
||||||
-DTOOLS=$CTOOLS -DUSE_SCRIPTPCH=$CSCRIPTPCH -DUSE_COREPCH=$CCOREPCH -DWITH_COREDEBUG=$CDEBUG -DCMAKE_BUILD_TYPE=$CTYPE -DWITH_WARNINGS=$CWARNINGS \
|
-DTOOLS=$CTOOLS -DUSE_SCRIPTPCH=$CSCRIPTPCH -DUSE_COREPCH=$CCOREPCH -DWITH_COREDEBUG=$CDEBUG -DCMAKE_BUILD_TYPE=$CTYPE -DWITH_WARNINGS=$CWARNINGS \
|
||||||
-DCMAKE_C_COMPILER=$CCOMPILERC -DCMAKE_CXX_COMPILER=$CCOMPILERCXX "-DDISABLED_AC_MODULES=$CDISABLED_AC_MODULES" $CCUSTOMOPTIONS
|
-DCMAKE_C_COMPILER=$CCOMPILERC -DCMAKE_CXX_COMPILER=$CCOMPILERCXX "-DDISABLED_AC_MODULES=$CDISABLED_AC_MODULES" $CCUSTOMOPTIONS
|
||||||
|
|
||||||
|
|||||||
1
conf/dist/config.cmake
vendored
1
conf/dist/config.cmake
vendored
@@ -1,5 +1,6 @@
|
|||||||
option(SERVERS "Build worldserver and authserver" 1)
|
option(SERVERS "Build worldserver and authserver" 1)
|
||||||
option(SCRIPTS "Build core with scripts included" 1)
|
option(SCRIPTS "Build core with scripts included" 1)
|
||||||
|
option(UNIT_TESTS "Build unit tests" 0)
|
||||||
option(TOOLS "Build map/vmap/mmap extraction/assembler tools" 0)
|
option(TOOLS "Build map/vmap/mmap extraction/assembler tools" 0)
|
||||||
option(USE_SCRIPTPCH "Use precompiled headers when compiling scripts" 1)
|
option(USE_SCRIPTPCH "Use precompiled headers when compiling scripts" 1)
|
||||||
option(USE_COREPCH "Use precompiled headers when compiling servers" 1)
|
option(USE_COREPCH "Use precompiled headers when compiling servers" 1)
|
||||||
|
|||||||
2
conf/dist/config.sh
vendored
2
conf/dist/config.sh
vendored
@@ -47,6 +47,8 @@ CDEBUG=OFF
|
|||||||
CTYPE=Release
|
CTYPE=Release
|
||||||
# compile scripts
|
# compile scripts
|
||||||
CSCRIPTS=ON
|
CSCRIPTS=ON
|
||||||
|
# compile unit tests
|
||||||
|
CUNIT_TESTS=OFF
|
||||||
# compile server
|
# compile server
|
||||||
CSERVERS=ON
|
CSERVERS=ON
|
||||||
# compile tools
|
# compile tools
|
||||||
|
|||||||
20
src/cmake/googletest-download.cmake
Normal file
20
src/cmake/googletest-download.cmake
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# code copied from https://crascit.com/2015/07/25/cmake-gtest/
|
||||||
|
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
|
||||||
|
|
||||||
|
project(googletest-download NONE)
|
||||||
|
|
||||||
|
include(ExternalProject)
|
||||||
|
|
||||||
|
ExternalProject_Add(
|
||||||
|
googletest
|
||||||
|
SOURCE_DIR "@GOOGLETEST_DOWNLOAD_ROOT@/googletest-src"
|
||||||
|
BINARY_DIR "@GOOGLETEST_DOWNLOAD_ROOT@/googletest-build"
|
||||||
|
GIT_REPOSITORY
|
||||||
|
https://github.com/google/googletest.git
|
||||||
|
GIT_TAG
|
||||||
|
release-1.10.0
|
||||||
|
CONFIGURE_COMMAND ""
|
||||||
|
BUILD_COMMAND ""
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
TEST_COMMAND ""
|
||||||
|
)
|
||||||
32
src/cmake/googletest.cmake
Normal file
32
src/cmake/googletest.cmake
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# the following code to fetch googletest
|
||||||
|
# is inspired by and adapted after https://crascit.com/2015/07/25/cmake-gtest/
|
||||||
|
# download and unpack googletest at configure time
|
||||||
|
|
||||||
|
macro(fetch_googletest _download_module_path _download_root)
|
||||||
|
set(GOOGLETEST_DOWNLOAD_ROOT ${_download_root})
|
||||||
|
configure_file(
|
||||||
|
${_download_module_path}/googletest-download.cmake
|
||||||
|
${_download_root}/CMakeLists.txt
|
||||||
|
@ONLY
|
||||||
|
)
|
||||||
|
unset(GOOGLETEST_DOWNLOAD_ROOT)
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
"${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
|
||||||
|
WORKING_DIRECTORY
|
||||||
|
${_download_root}
|
||||||
|
)
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
"${CMAKE_COMMAND}" --build .
|
||||||
|
WORKING_DIRECTORY
|
||||||
|
${_download_root}
|
||||||
|
)
|
||||||
|
|
||||||
|
# adds the targers: gtest, gtest_main, gmock, gmock_main
|
||||||
|
add_subdirectory(
|
||||||
|
${_download_root}/googletest-src
|
||||||
|
${_download_root}/googletest-build
|
||||||
|
)
|
||||||
|
endmacro()
|
||||||
@@ -40,6 +40,12 @@ else()
|
|||||||
message("* Build map/vmap tools : No (default)")
|
message("* Build map/vmap tools : No (default)")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if( UNIT_TESTS )
|
||||||
|
message("* Build unit tests : Yes")
|
||||||
|
else()
|
||||||
|
message("* Build unit tests : No (default)")
|
||||||
|
endif()
|
||||||
|
|
||||||
if( USE_COREPCH )
|
if( USE_COREPCH )
|
||||||
message("* Build core w/PCH : Yes (default)")
|
message("* Build core w/PCH : Yes (default)")
|
||||||
else()
|
else()
|
||||||
|
|||||||
23
src/test/CMakeLists.txt
Normal file
23
src/test/CMakeLists.txt
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
CollectSourceFiles(
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
PRIVATE_SOURCES
|
||||||
|
)
|
||||||
|
|
||||||
|
add_executable(
|
||||||
|
unit_tests
|
||||||
|
${PRIVATE_SOURCES}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
unit_tests
|
||||||
|
gtest_main
|
||||||
|
game
|
||||||
|
game-interface
|
||||||
|
)
|
||||||
|
|
||||||
|
add_test(
|
||||||
|
NAME
|
||||||
|
unit
|
||||||
|
COMMAND
|
||||||
|
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/unit_tests
|
||||||
|
)
|
||||||
13
src/test/server/game/Miscellaneous/FormulasTest.cpp
Normal file
13
src/test/server/game/Miscellaneous/FormulasTest.cpp
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#include "gtest/gtest.h"
|
||||||
|
#include "Formulas.h"
|
||||||
|
|
||||||
|
TEST(FormulasTest, hk_honor_at_level)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(acore::Honor::hk_honor_at_level(80), 124);
|
||||||
|
EXPECT_EQ(acore::Honor::hk_honor_at_level(80, 2), 248);
|
||||||
|
EXPECT_EQ(acore::Honor::hk_honor_at_level(80, 0.5), 62);
|
||||||
|
EXPECT_EQ(acore::Honor::hk_honor_at_level(1), 2);
|
||||||
|
EXPECT_EQ(acore::Honor::hk_honor_at_level(1, 10), 16);
|
||||||
|
EXPECT_EQ(acore::Honor::hk_honor_at_level(2), 4);
|
||||||
|
EXPECT_EQ(acore::Honor::hk_honor_at_level(3), 5);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user