testing: tsan
authorMichael Wallner <mike@php.net>
Mon, 23 Nov 2020 16:41:28 +0000 (17:41 +0100)
committerMichael Wallner <mike@php.net>
Mon, 23 Nov 2020 16:43:36 +0000 (17:43 +0100)
.github/workflows/cmake-build-ci.gen
.github/workflows/cmake-build-ci.yml
CMake/CheckDebug.cmake
CMakeConfig.txt
test/CMakeLists.txt

index 7ead2ddcc7208c701c9687582ba11790d767fdb6..b1a5634528f5f51afc43449ccc7db319ab94b7b1 100755 (executable)
@@ -267,6 +267,17 @@ jobs:
       - uses: actions/checkout@v2
 <?php steps(); ?>
 
+  # thread sanitizer build
+  dbg-tsan:
+    name: dbg-tsan (<?=defaults()?>)
+    runs-on: <?=DEF[DEF["os"]]?> #
+    env:
+      ENABLE_SANITIZERS:  "thread"
+      ENABLE_MEMASLAP:    "OFF"
+    steps:
+      - uses: actions/checkout@v2
+<?php steps(); ?>
+
   # mac build
   dbg-mac:
     name: dbg-mac (<?=DEF["macOS"]?>, <?=DEF[DEF["macOS"]]?>, <?=DEF[DEF[DEF["macOS"]]]["ver"]?>)
index aa349ca2606a98799ae1583668ba5f2495af6162..43e2fbe452a4e477df1184e27282b8cfb6eb0755 100644 (file)
@@ -192,6 +192,83 @@ jobs:
             --data-urlencode "level=error" \
             --data-urlencode "message=Github [${GITHUB_REPOSITORY}](https://github.com/${GITHUB_REPOSITORY}/commits/${REF}) (${REF}) [failure](https://github.com/m6w6/libmemcached/actions/runs/${GITHUB_RUN_ID}) (${ImageOS}/${CC:-${CC_VND}-${CC_VER}})"
 
+  # thread sanitizer build
+  dbg-tsan:
+    name: dbg-tsan (ubuntu-20.04, gnu, cur)
+    runs-on: ubuntu-20.04 #
+    env:
+      ENABLE_SANITIZERS:  "thread"
+      ENABLE_MEMASLAP:    "OFF"
+    steps:
+      - uses: actions/checkout@v2
+      - name: Prepare environment (for cur gnu on ubuntu-20.04)
+        if: (env.OS_VER=='ubuntu-20.04') && (env.CC_VND=='gnu') && (env.CC_VER=='cur')
+        run: |
+          echo CC="gcc-9" >> ${GITHUB_ENV}
+          echo CXX="g++-9" >> ${GITHUB_ENV}
+      - name: Install dependencies (Linux)
+        if: runner.os == 'Linux'
+        run: |
+          sudo apt-get install \
+            libevent-dev \
+            libsasl2-dev \
+            libtbb-dev \
+            ${INSTALL_MEMCACHED} \
+            ${INSTALL_CC} ${INSTALL_CXX}
+          sudo systemctl stop memcached || true
+      - name: Install dependencies (Mac)
+        if: runner.os == 'macOS'
+        run: |
+          brew install bison flex ${INSTALL_MEMCACHED}
+          brew services stop memcached || true
+          echo MEMCACHED_BINARY="/usr/local/bin/memcached" >> ${GITHUB_ENV}
+      - name: Build memcached
+        run: |
+          if test -d memcached
+          then
+            cd memcached
+            ./autogen.sh
+            ./configure CFLAGS="-O2 -pipe" \
+              --prefix=${MEMCACHED_PREFIX} \
+              --enable-sasl \
+              --enable-sasl-pwdb \
+              --disable-coverage \
+              --disable-dependency-tracking \
+              --disable-docs \
+              --disable-extstore \
+              --disable-option-checking \
+              ;
+            make -j2
+            make install
+            cd ..
+            echo MEMCACHED_BINARY="${MEMCACHED_PREFIX}/bin/memcached" >> ${GITHUB_ENV}
+          fi
+      - name: Generate build tree (${{ env.CMAKE_BUILD_TYPE }})
+        run: cmake -S . -B build
+      - name: Build all with ${{ env.CXX }} ${{ env.CXXFLAGS }}
+        run: make -C build -j2 all
+      - name: Test
+        run: make -C build -j2 test
+      - name: Install
+        run: make -C build -j2 install DESTDIR=/tmp
+      - name: Failed tests log
+        if: ${{ failure() }}
+        run: cat build/Testing/Temporary/LastTest.log || true
+      - name: Notify Gitter (success)
+        if: ${{ success() }}
+        run: |
+          REF=$(basename ${GITHUB_REF})
+          curl -sS "${{ secrets.GITTER }}" \
+            --data-urlencode "level=info" \
+            --data-urlencode "message=Github [${GITHUB_REPOSITORY}](https://github.com/${GITHUB_REPOSITORY}/commits/${REF}) (${REF}) [success](https://github.com/m6w6/libmemcached/actions/runs/${GITHUB_RUN_ID}) (${ImageOS}/${CC:-${CC_VND}-${CC_VER}})"
+      - name: Notify Gitter (failure)
+        if: ${{ failure() }}
+        run: |
+          REF=$(basename ${GITHUB_REF})
+          curl -sS "${{ secrets.GITTER }}" \
+            --data-urlencode "level=error" \
+            --data-urlencode "message=Github [${GITHUB_REPOSITORY}](https://github.com/${GITHUB_REPOSITORY}/commits/${REF}) (${REF}) [failure](https://github.com/m6w6/libmemcached/actions/runs/${GITHUB_RUN_ID}) (${ImageOS}/${CC:-${CC_VND}-${CC_VER}})"
+
   # mac build
   dbg-mac:
     name: dbg-mac (macos-10.15, clang, apple)
index e4c3dcba5f4aacf85226f4b155ca17e5dc419ab2..4b63db66fa5cde7ec79caddcb76516973259838f 100644 (file)
@@ -25,7 +25,7 @@ macro(check_sanitizer VAR NAME LIB)
             add_compile_options(-fsanitize=${NAME})
             link_libraries(-fsanitize=${NAME})
             check_flag(-fsanitize-recover=${NAME} IGNORE)
-            message(STATUS "  OK")
+            message(STATUS "  OK: sanitizer ${NAME}")
         else()
             message(STATUS "  NO: not supported")
         endif()
index 3c44a776af5aabbf0fd0ff53ec6599a9a10a3e92..7f70b70b03f0812161ef7c4bc1b5fe718f2395dd 100644 (file)
@@ -32,7 +32,7 @@ option(BUILD_DOCS_MANGZ     "gzip manpages"
         ${BUILD_DOCS_MAN})
 
 set(ENABLE_SANITIZERS "$ENV{ENABLE_SANITIZERS}"
-        CACHE STRING "sanitizers to enable (e.g. address undefined ...)")
+        CACHE STRING "sanitizers to enable (e.g. address;undefined ...)")
 option(ENABLE_SASL          "enable SASL support"
         $ENV{ENABLE_SASL})
 option(ENABLE_DTRACE        "enable dtrace support"
index e2ecf0a27a2b1aa283a423a78c4999518db98d8b..6f8230fb8aea95c297ff8aeada756361decb2b81 100644 (file)
@@ -33,9 +33,11 @@ target_include_directories(runtests PRIVATE
         ${CMAKE_BINARY_DIR}/src)
 target_link_libraries(runtests PRIVATE libhashkit libmemcachedinternal libmemcachedutil)
 
-check_tbb()
-if(HAVE_TBB)
-    target_link_libraries(runtests PRIVATE ${LIBTBB})
+if(NOT (thread IN_LIST ENABLE_SANITIZERS))
+    check_tbb()
+    if(HAVE_TBB)
+        target_link_libraries(runtests PRIVATE ${LIBTBB})
+    endif()
 endif()
 
 add_dependencies(runtests ${CLIENTS})