From e859bac1068d9f4670bd0fbdd17af796358ea819 Mon Sep 17 00:00:00 2001 From: Sven Anderson Date: Thu, 9 Nov 2023 15:20:48 +0100 Subject: [PATCH] CI: enable and collect core dumps in tests Signed-off-by: Sven Anderson --- .github/workflows/main.yml | 5 +++++ entrypoint.sh | 18 ++++++++++++++++-- testing/containers/ceph/Dockerfile | 3 ++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 46d2bf07e..bbf828fef 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -76,11 +76,15 @@ jobs: go_version: ${{ needs.go-versions.outputs.unstable }} steps: - uses: actions/checkout@v4 + - name: Set cores to get stored as "core" + run: sudo bash -c 'echo "core" > /proc/sys/kernel/core_pattern' - name: Run tests run: make test-containers-test "CEPH_VERSION=${{ matrix.ceph_version }}" "GO_VERSION=${{ matrix.go_version }}" "RESULTS_DIR=$PWD/_results" - name: Clean up test containers + if: always() run: make test-containers-clean "CEPH_VERSION=${{ matrix.ceph_version }}" - name: Archive test results + if: always() uses: actions/upload-artifact@v3 with: name: "go-ceph-results-${{ matrix.ceph_version }}-${{ matrix.go_version }}" @@ -88,6 +92,7 @@ jobs: _results/ retention-days: 30 - name: Check API Versions and Aging + if: always() run: | if [ -f _results/implements.json ]; then ./contrib/apiage.py diff --git a/entrypoint.sh b/entrypoint.sh index 0f0aad8e3..9fd0fca7f 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -257,9 +257,23 @@ test_pkg() { testargs+=("-memprofile" "${pkg}.mem.out") fi - show go test -v "${testargs[@]}" "./${pkg}" + ulimit -c unlimited + go test -c -v "${testargs[@]}" "./${pkg}" + show "./${pkg}.test" ret=$(($?+ret)) - grep -v "^mode: count" "${pkg}.cover.out" >> "cover.out" + if ls core.* >/dev/null 2>&1; then + echo "Found coredump" + sleep 5 + mv core.* "${pkg}.core" + chmod 644 "${pkg}.core" + echo "set auto-load safe-path /" >>/root/.gdbinit + gdb "${pkg}.test" "${pkg}.core" -ex bt -ex q | cat + mkdir -p "${RESULTS_DIR}" + mv "${pkg}.test" "${pkg}.core" "${RESULTS_DIR}" + fi + if [[ -x "${pkg}.cover.out" ]] ; then + grep -v "^mode: count" "${pkg}.cover.out" >> "cover.out" + fi return ${ret} } diff --git a/testing/containers/ceph/Dockerfile b/testing/containers/ceph/Dockerfile index c99c9d466..7196fcd02 100644 --- a/testing/containers/ceph/Dockerfile +++ b/testing/containers/ceph/Dockerfile @@ -16,7 +16,8 @@ RUN true && \ yum install -y \ git wget curl make \ /usr/bin/cc /usr/bin/c++ \ - "libcephfs-devel-${cv}" "librados-devel-${cv}" "librbd-devel-${cv}" && \ + "libcephfs-devel-${cv}" "librados-devel-${cv}" "librbd-devel-${cv}" \ + gdb librados2-debuginfo && \ yum clean all && \ true