From 6f7139fe28a462cd9d3c84d417254ea5b8efabdf Mon Sep 17 00:00:00 2001 From: SChernykh Date: Thu, 25 May 2023 12:57:06 +0200 Subject: [PATCH] CI: added address sanitizer to test sync --- .github/workflows/test-sync.yml | 43 +++++++++++++++++++++++++++++++++ CMakeLists.txt | 7 +++++- cmake/flags.cmake | 6 ++++- 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-sync.yml b/.github/workflows/test-sync.yml index 80aa662..4135602 100644 --- a/.github/workflows/test-sync.yml +++ b/.github/workflows/test-sync.yml @@ -171,6 +171,49 @@ jobs: build/*.log build/data/ + sync-test-ubuntu-asan: + + timeout-minutes: 30 + runs-on: ubuntu-22.04 + + steps: + - name: Install dependencies + run: | + sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test + sudo apt update + sudo apt install -y git build-essential cmake libuv1-dev libzmq3-dev libsodium-dev libpgm-dev libnorm-dev libgss-dev libcurl4-openssl-dev libidn2-0-dev gcc-12 g++-12 + + - name: Checkout repository + uses: actions/checkout@v3 + with: + submodules: true + + - name: Build p2pool + run: | + mkdir build + cd build + cmake .. -DDEV_TEST_SYNC=ON -DDEV_WITH_ASAN=ON -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 + make -j$(nproc) + + - name: Run p2pool + timeout-minutes: 20 + run: | + cd build + mkdir data + python ../tests/src/stratum_dummy.py 1 & + python ../tests/src/stratum_dummy.py 2 & + python ../tests/src/stratum_dummy.py 3 & + ASAN_OPTIONS="detect_stack_use_after_return=1 atexit=1" ./p2pool --host xmrnode.facspro.net --rpc-port 18089 --zmq-port 18084 --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --data-api data --local-api --loglevel 6 + grep 'Synchronization finished successfully' p2pool.log + + - name: Archive p2pool.log + uses: actions/upload-artifact@v3 + with: + name: p2pool_ubuntu_data_asan + path: | + build/*.log + build/data/ + sync-test-macos: timeout-minutes: 30 diff --git a/CMakeLists.txt b/CMakeLists.txt index a293ca3..6788cff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,7 @@ option(DEV_TEST_SYNC "[Developer only] Sync test, stop p2pool after sync is comp option(DEV_WITH_TSAN "[Developer only] Compile with thread sanitizer" OFF) option(DEV_WITH_MSAN "[Developer only] Compile with memory sanitizer" OFF) option(DEV_WITH_UBSAN "[Developer only] Compile with undefined behavior sanitizer" OFF) +option(DEV_WITH_ASAN "[Developer only] Compile with address sanitizer" OFF) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") @@ -46,6 +47,10 @@ if (DEV_WITH_UBSAN) add_definitions(-DDEV_WITH_UBSAN) endif() +if (DEV_WITH_ASAN) + add_definitions(-DDEV_WITH_ASAN) +endif() + include(cmake/flags.cmake) set(HEADERS @@ -293,7 +298,7 @@ endif() add_executable(${CMAKE_PROJECT_NAME} ${HEADERS} ${SOURCES}) if (STATIC_BINARY OR STATIC_LIBS) - if (NOT (DEV_WITH_TSAN OR DEV_WITH_MSAN OR DEV_WITH_UBSAN)) + if (NOT (DEV_WITH_TSAN OR DEV_WITH_MSAN OR DEV_WITH_UBSAN OR DEV_WITH_ASAN)) if (WIN32) add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} "${CMAKE_PROJECT_NAME}.exe") else() diff --git a/cmake/flags.cmake b/cmake/flags.cmake index 44134db..5d4e82c 100644 --- a/cmake/flags.cmake +++ b/cmake/flags.cmake @@ -16,9 +16,13 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU) set(GENERAL_FLAGS "${GENERAL_FLAGS} -fno-omit-frame-pointer -fsanitize=undefined") endif() + if (DEV_WITH_ASAN) + set(GENERAL_FLAGS "${GENERAL_FLAGS} -fno-omit-frame-pointer -fsanitize=address") + endif() + set(WARNING_FLAGS "-Wall -Wextra -Wcast-align -Wcast-qual -Wlogical-op -Wstrict-overflow=2 -Wundef -Wformat=2 -Wpointer-arith -Werror") - if (DEV_WITH_TSAN OR DEV_WITH_UBSAN) + if (DEV_WITH_TSAN OR DEV_WITH_UBSAN OR DEV_WITH_ASAN) set(OPTIMIZATION_FLAGS "-O2 -g") else() set(OPTIMIZATION_FLAGS "-Ofast -s")