github.com/cockroachdb/pebble@v1.1.1-0.20240513155919-3622ade60459/scripts/code-coverage.sh (about)

     1  #!/bin/bash
     2  
     3  # This script runs unit tests and the metamorphic tests with coverage
     4  # instrumentation and generates three lcov files:
     5  #  - ./artifacts/profile-tests.lcov
     6  #  - ./artifacts/profile-meta.lcov
     7  #  - ./artifacts/profile-tests-and-meta.lcov
     8  
     9  set -euxo pipefail
    10  
    11  mkdir -p artifacts
    12  
    13  tmpdir=$(mktemp -d)
    14  trap 'rm -rf "$tmpdir"' EXIT
    15  
    16  test_failed=0
    17  # The coverpkg argument ensures that coverage is not restricted to the tested
    18  # package; so this will get us overall coverage for all tests.
    19  go test -tags invariants ./... -coverprofile=artifacts/profile-tests.gocov -coverpkg=./... || test_failed=1
    20  
    21  # The metamorphic test executes itself for each run; we don't get coverage for
    22  # the inner run. To fix this, we use metarunner as the "inner" binary and we
    23  # instrument it with coverage (see https://go.dev/testing/coverage/#building).
    24  go build -tags invariants -o "${tmpdir}/metarunner" -cover ./internal/metamorphic/metarunner
    25  mkdir -p "${tmpdir}/metacover"
    26  
    27  GOCOVERDIR="${tmpdir}/metacover" go test ./internal/metamorphic \
    28    -count 50 --inner-binary="${tmpdir}/metarunner" || test_failed=1
    29  
    30  go tool covdata textfmt -i "${tmpdir}/metacover" -o artifacts/profile-meta.gocov
    31  
    32  # TODO(radu): make the crossversion metamorphic test work.
    33  
    34  go run github.com/cockroachdb/code-cov-utils/convert@v1.1.0 -out artifacts/profile-tests.lcov \
    35    -trim-prefix github.com/cockroachdb/pebble/ \
    36    artifacts/profile-tests.gocov
    37  
    38  go run github.com/cockroachdb/code-cov-utils/convert@v1.1.0 -out artifacts/profile-meta.lcov \
    39    -trim-prefix github.com/cockroachdb/pebble/ \
    40    artifacts/profile-meta.gocov
    41  
    42  go run github.com/cockroachdb/code-cov-utils/convert@v1.1.0 -out artifacts/profile-tests-and-meta.lcov \
    43    -trim-prefix github.com/cockroachdb/pebble/ \
    44    artifacts/profile-tests.gocov artifacts/profile-meta.gocov
    45  
    46  if [ $test_failed -eq 1 ]; then
    47    # TODO(radu): somehow plumb the error and publish it.
    48    echo "WARNING: some tests have failed; coverage might be incomplete."
    49  fi