Loading test/docker/Dockerfile.tsan 0 → 100644 +69 −0 Original line number Diff line number Diff line FROM node:alpine AS build WORKDIR /build RUN apk update --no-cache && apk upgrade --no-cache RUN apk add --no-cache cmake ninja clang alpine-sdk yaml-dev brotli-dev json-c-dev util-linux-dev compiler-rt # Build all libraries with ThreadSanitizer ENV CC=clang ENV CXX=clang++ ENV CXXFLAGS="-g -O1 -fno-omit-frame-pointer -fsanitize=thread" ENV CFLAGS="-g -O1 -fno-omit-frame-pointer -fsanitize=thread" ENV LDFLAGS="-fsanitize=thread" RUN git clone https://tuxist.de/git/jan.koester/libcmdplus.git && \ mkdir libcmdplus/build && \ cd libcmdplus/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-fPIC -g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-fPIC -g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/tuxist/uuidplus.git && \ mkdir uuidplus/build && \ cd uuidplus/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/jan.koester/libnetplus.git && \ mkdir libnetplus/build && \ cd libnetplus/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/jan.koester/libhtmlpp.git && \ mkdir libhtmlpp/build && \ cd libhtmlpp/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/jan.koester/libhttppp.git && \ mkdir libhttppp/build && \ cd libhttppp/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/jan.koester/libconfplus.git && \ mkdir libconfplus/build && \ cd libconfplus/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-fPIC -g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-fPIC -g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/tuxist/libparitypp.git && \ mkdir libparitypp/build && \ cd libparitypp/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/jan.koester/authdb.git && \ mkdir authdb/build && \ cd authdb/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBUILD_BINDINGS=OFF -DDATAPATH:PATH=/usr/local/share/authdb -DCMAKE_CXX_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install # --- Runtime stage --- FROM node:alpine RUN addgroup authdb && \ adduser authdb -h /var/lib/authdb -S -G authdb RUN apk update && apk upgrade && \ apk add --no-cache yaml brotli openssl json-c libuuid libstdc++ \ clang-libs compiler-rt RUN mkdir -p /etc/authdb/certs /var/lib/authdb /usr/local/share/authdb /var/log/authdb && \ chown -R authdb:authdb /var/lib/authdb /var/log/authdb COPY --from=build /usr/local/bin/authdb /usr/local/bin/ COPY --from=build /usr/local/lib /usr/local/lib/ COPY --from=build /usr/local/lib/authdb /usr/local/lib/authdb COPY --from=build /usr/local/share/authdb /usr/local/share/authdb EXPOSE 9090 4433 # TSan options: log_path writes reports to file, second_deadlock_stack shows both sides ENV TSAN_OPTIONS="history_size=7 second_deadlock_stack=1 log_path=/var/log/authdb/tsan.log" CMD ["authdb", "-f", "true", "-c", "yaml:///etc/authdb/config.yaml"] test/docker/docker-compose.tsan.yml 0 → 100644 +58 −0 Original line number Diff line number Diff line services: authdb1: build: context: . dockerfile: Dockerfile.tsan container_name: authdb1 hostname: node1 cap_add: - SYS_PTRACE security_opt: - seccomp:unconfined volumes: - ./config-node1.yaml:/etc/authdb/config.yaml:ro - ./certs:/etc/authdb/certs:ro ports: - "9091:9090" networks: - cluster authdb2: build: context: . dockerfile: Dockerfile.tsan container_name: authdb2 hostname: node2 cap_add: - SYS_PTRACE security_opt: - seccomp:unconfined volumes: - ./config-node2.yaml:/etc/authdb/config.yaml:ro - ./certs:/etc/authdb/certs:ro ports: - "9092:9090" networks: - cluster authdb3: build: context: . dockerfile: Dockerfile.tsan container_name: authdb3 hostname: node3 cap_add: - SYS_PTRACE security_opt: - seccomp:unconfined volumes: - ./config-node3.yaml:/etc/authdb/config.yaml:ro - ./certs:/etc/authdb/certs:ro ports: - "9093:9090" networks: - cluster networks: cluster: driver: bridge Loading
test/docker/Dockerfile.tsan 0 → 100644 +69 −0 Original line number Diff line number Diff line FROM node:alpine AS build WORKDIR /build RUN apk update --no-cache && apk upgrade --no-cache RUN apk add --no-cache cmake ninja clang alpine-sdk yaml-dev brotli-dev json-c-dev util-linux-dev compiler-rt # Build all libraries with ThreadSanitizer ENV CC=clang ENV CXX=clang++ ENV CXXFLAGS="-g -O1 -fno-omit-frame-pointer -fsanitize=thread" ENV CFLAGS="-g -O1 -fno-omit-frame-pointer -fsanitize=thread" ENV LDFLAGS="-fsanitize=thread" RUN git clone https://tuxist.de/git/jan.koester/libcmdplus.git && \ mkdir libcmdplus/build && \ cd libcmdplus/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-fPIC -g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-fPIC -g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/tuxist/uuidplus.git && \ mkdir uuidplus/build && \ cd uuidplus/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/jan.koester/libnetplus.git && \ mkdir libnetplus/build && \ cd libnetplus/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/jan.koester/libhtmlpp.git && \ mkdir libhtmlpp/build && \ cd libhtmlpp/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/jan.koester/libhttppp.git && \ mkdir libhttppp/build && \ cd libhttppp/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/jan.koester/libconfplus.git && \ mkdir libconfplus/build && \ cd libconfplus/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-fPIC -g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-fPIC -g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/tuxist/libparitypp.git && \ mkdir libparitypp/build && \ cd libparitypp/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install RUN git clone https://tuxist.de/git/jan.koester/authdb.git && \ mkdir authdb/build && \ cd authdb/build && cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBUILD_BINDINGS=OFF -DDATAPATH:PATH=/usr/local/share/authdb -DCMAKE_CXX_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_C_FLAGS="-g -O1 -fsanitize=thread" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=thread" && ninja install # --- Runtime stage --- FROM node:alpine RUN addgroup authdb && \ adduser authdb -h /var/lib/authdb -S -G authdb RUN apk update && apk upgrade && \ apk add --no-cache yaml brotli openssl json-c libuuid libstdc++ \ clang-libs compiler-rt RUN mkdir -p /etc/authdb/certs /var/lib/authdb /usr/local/share/authdb /var/log/authdb && \ chown -R authdb:authdb /var/lib/authdb /var/log/authdb COPY --from=build /usr/local/bin/authdb /usr/local/bin/ COPY --from=build /usr/local/lib /usr/local/lib/ COPY --from=build /usr/local/lib/authdb /usr/local/lib/authdb COPY --from=build /usr/local/share/authdb /usr/local/share/authdb EXPOSE 9090 4433 # TSan options: log_path writes reports to file, second_deadlock_stack shows both sides ENV TSAN_OPTIONS="history_size=7 second_deadlock_stack=1 log_path=/var/log/authdb/tsan.log" CMD ["authdb", "-f", "true", "-c", "yaml:///etc/authdb/config.yaml"]
test/docker/docker-compose.tsan.yml 0 → 100644 +58 −0 Original line number Diff line number Diff line services: authdb1: build: context: . dockerfile: Dockerfile.tsan container_name: authdb1 hostname: node1 cap_add: - SYS_PTRACE security_opt: - seccomp:unconfined volumes: - ./config-node1.yaml:/etc/authdb/config.yaml:ro - ./certs:/etc/authdb/certs:ro ports: - "9091:9090" networks: - cluster authdb2: build: context: . dockerfile: Dockerfile.tsan container_name: authdb2 hostname: node2 cap_add: - SYS_PTRACE security_opt: - seccomp:unconfined volumes: - ./config-node2.yaml:/etc/authdb/config.yaml:ro - ./certs:/etc/authdb/certs:ro ports: - "9092:9090" networks: - cluster authdb3: build: context: . dockerfile: Dockerfile.tsan container_name: authdb3 hostname: node3 cap_add: - SYS_PTRACE security_opt: - seccomp:unconfined volumes: - ./config-node3.yaml:/etc/authdb/config.yaml:ro - ./certs:/etc/authdb/certs:ro ports: - "9093:9090" networks: - cluster networks: cluster: driver: bridge